随笔分类 -  Perl

时刻检查函数的返回值
摘要:比如下面这段代码会产生一个奇怪的错误,print() on closed filehandle FILE at d:\code\test.pl line 6.sub testdir { open FILE, ">>z:/zdd" ; print FILE "Hello, world\n";}其实根本原因是open函数失败了,因为z:盘根本不存在,但是我们没有检查open的返回值,所以这个错误很隐讳,正确的写法应该是sub testdir { open FILE, ">>z:/zdd" or die $!; pr 阅读全文

posted @ 2011-12-20 09:36 perlman 阅读(610) 评论(0) 推荐(1)

Perl中use和require的区别与联系
摘要:请看这里 阅读全文

posted @ 2011-12-15 09:09 perlman 阅读(307) 评论(0) 推荐(0)

perl中s///和tr///的区别
摘要:请看这里 阅读全文

posted @ 2011-12-08 12:37 perlman 阅读(476) 评论(0) 推荐(0)

Perl处理文本一例
摘要:在CU上看到的一个题,觉得不错,就记录下来了。原文链接在这里我完全是门外汉,最近有一个文档要处理,如何用perl来做?谢谢了 一个文本文件里有多行如下,数量不定 Lif(__amscript_cd("www.xizi.com")){__amscript_wc('#closead {display:none;}');}; Lif(__amscript_cd("www.xizi.com")){__amscript_wc('#footer_win {display:none;}');}; Lif(__amscript_cd(&q 阅读全文

posted @ 2011-12-03 14:22 perlman 阅读(4622) 评论(0) 推荐(0)

perl中的q,qq,qw,qr,qx
摘要:从网上看到的一篇文章,觉得不错,转过来了。在perl语言中,几个特殊而常用的符号:q是单引号qq是双引号qw单词列表引号qr正则表达式引号qx反引号其中qq,qw又较为常用。qq{foobar}的意思为意思为双引号字符串,可内插变量,相当于"foobar"qw{foobar}的意思为用空格分解字符串,得到列表,相当于如下语句split('','foobar')得到的结果是'foo','bar'q和qq运算符的特点:q和qq必须是一个标识符,而不是标识符的部分。例如:q(abc)用()作为分界符q(abc)用() 阅读全文

posted @ 2011-12-03 13:54 perlman 阅读(7636) 评论(0) 推荐(0)

Perl最佳实践第五章(变量)
摘要:place holder 阅读全文

posted @ 2011-11-29 09:19 perlman 阅读(322) 评论(0) 推荐(0)

List::Util
摘要:use List::Util;use List::Util qw(first max maxstr min minstr reduce shuffle sum);sub test { my @numbers = (1, 2, 3, 4, 5, 6, 7); # Get first element my $first_number = first { defined($_) } @numbers; print $first_number, "\n"; # Get max element my $max_number = max @numbers; pri... 阅读全文

posted @ 2011-11-28 16:52 perlman 阅读(1047) 评论(0) 推荐(0)

perl中的map和grep
摘要:map语法:map EXPR, LISTmap BLOCK, LIST语义:对于LIST中的每个元素执行EXPR或者BLOCK,如果返回值存储在list中,则表示处理后的list,若返回值存储在scalar中,则表示处理后的list中元素个数。下面是几个例子.单词首字母大写sub test { my @names = ( 'jacob', 'alexander', 'ethan', 'andrew', ); my @new_names = map(ucfirst, @names); foreach my $name... 阅读全文

posted @ 2011-11-28 16:05 perlman 阅读(3833) 评论(0) 推荐(1)

Perl最佳实践第三章(命名规则)
摘要:标示符变量名采用 形容词_名词 的格式命名,多个单词之间用下划线分隔,比如$next_record$total_score$root_node对于查表的数组或者哈希,采用 xxx_of, xxx_for的命名方式,也就是在末端加上介词,比如。my %title_of;my %ISBN_for;my @sales_from;这种写法会使后面的代码可读性极好。while (my $month = prompt -menu => $MONTH_NAMES) { for my $book (@catalog) { print "$ISBN_for{$book} $title_of{.. 阅读全文

posted @ 2011-11-28 11:28 perlman 阅读(1634) 评论(0) 推荐(0)

Perl最佳实践读书笔记-第二章(代码部署)
摘要:代码风格最重要的是一致性!找出一种你或你的团队喜欢的风格,并坚持下去!括号方式使用K&R风格的括号,即把开口大括弧放在控制该代码块的行尾,接下来的代码缩进,然后在独立的一行放置闭口大括号。如下for my $name (@names) { for my $word ( anagrams_of(lc $name) ) { print "$word\n" ; }}列表元素占据多行时,按如下方式安排my @names = ( 'Damian', # 主键 'Matthew', # 明义 'Conway', # 一般类或类别) 阅读全文

posted @ 2011-11-27 10:29 perlman 阅读(806) 评论(0) 推荐(0)

Perl最佳实践读书笔记-第一章
摘要:本篇展开的小项有待完善,需待读书深入时回头总结。编码风格的三个主要目标:强健性,效率性,可维护性。强健性让初次犯错的机会减至最少比如用_ref后缀来命名引用,就可以避免将$array_ref->[$n]写成$array_ref[$n]。检查不正确的边界情况避开无法适当伸缩的构件如何处理是失败如何应对失败改善程序代码的结构效率性一个关键点是利用perl的优势并且避开perl的劣势,这就需要对perl非常熟悉才行,加油!比如一次性读入一个几十GB的大文件,仅仅是为了将其中的A替换为B,这么做就不如逐行读入并处理来的高效。可维护性通常来说,维护代码的时间至少是编写代码时间的4倍,所以为了你的代 阅读全文

posted @ 2011-11-27 10:07 perlman 阅读(578) 评论(0) 推荐(0)

perl获取脚本名字
摘要:且看一段代码( my $pgm = $0 ) =~ s!.*/(.*)!$1! ;如果我们运行脚本的命令是perl d:/code/test.pl -f c:/test那么$0获取的是脚本本身,也即d:/code/test.pl正则表达式s!.*/(.*)!$1!是将脚本全名中的路径去掉,得到test.pl所以这行代码执行过后,$pgm的值就是test.pl,perl果然是强大呀! 阅读全文

posted @ 2011-11-10 10:56 perlman 阅读(2580) 评论(0) 推荐(0)

perl实现链表
摘要:perl数组的push,pop,shift,unshift操作可以实现栈,队列及双端队列,但是却不能支持链表的操作,所以创建链表要另寻他法。创建链表sub test { # Create list my $list = undef; foreach (reverse 1..5) { $list = [$list, $_ * $_] ; } }上面的代码创建一个简单的单向链表,它的过程如下[undef, 25][[undef, 25], 16][[[undef, 25], 16], 9][[[[undef, 25], 16], 9], 4][[[... 阅读全文

posted @ 2011-10-19 09:54 perlman 阅读(1274) 评论(0) 推荐(0)

perl中的bool值
摘要:perl中没有专门的bool类型,多数的判断都是通过数字和字符串完成的,如果不是数字和字符串则转换为数字和字符串再判断。perl中为假的值有以下几种数字0字符串0,'0', "0"空字符串,'', ""undef空列表空哈希所有其他值均为真值。注意,定义空列表或空哈希用()my @array = ();my %hash = () ;不能用undefmy @array = undef #这表示array有一个元素,是undef也不能用[]my @array = [] #这表示array有一个元素,是指向空列表的引用。== 阅读全文

posted @ 2011-10-14 11:23 perlman 阅读(1968) 评论(0) 推荐(0)

perl杂项
摘要:不好分类的暂时都放到这里判断两个数组所有元素是否相同直接比较数组名字即可,不必逐个元素比较。my @a = (1..10) ;my @b = (1..10) ;if (@a == @b) { print "equal\n" ; #equal}但需要注意一点,如果是数组的引用,那么就不能直接比较了。必须先解引用再比较。my $aref1 = [1..10] ;my $aref2 = [1..10] ;if ($aref1 == $aref2) { print "equal\n" # not equal}先解引用再比较my $aref1 = [1..10] 阅读全文

posted @ 2011-10-13 10:20 perlman 阅读(944) 评论(0) 推荐(0)

perl判断字符串包含
摘要:perl中没有判断字符串包含的函数,可以用正则表达式来实现这个功能,下面代码判断$str1是否包含$str2。if($str1 =~ /$str2/) { ...} 阅读全文

posted @ 2011-10-12 17:35 perlman 阅读(12905) 评论(0) 推荐(0)

Perl风格
摘要:括弧对齐方式@a = ( [1, 2, 3], [4, 5, 6], [7, 8, 9],);赋值运算符单起一行并缩进my $predicted_val = $average + $predicted_change * $fudge_factor;如果要断句,那么将断句继续缩进,以表明它是属于赋值表达式的一部分my $predicted_val = ($minimum + $maxximum) / 2 + $predicted_change * max($fudge_factor, $local_epsilon);== THE END == 阅读全文

posted @ 2011-09-27 11:27 perlman 阅读(384) 评论(0) 推荐(0)

perl代码技巧
摘要:perl代码可以说要多简洁有多简洁,下面是一些我日常工作中积累的技巧交换两个变量($a, $b) = ($b, $a);列表移位($a, $b, $c) = ($b, $c, $a);将字符串拆分为字符my $str = 'abcd';my @chars = split //, $str;巧用unlessunless(condition){ #do something}相当于if(condition){ #...}else{ #do something}所以,使用unless可以减少代码行数,下面是一个例子if(-e file){ #read file}else{ ... 阅读全文

posted @ 2011-09-15 16:35 perlman 阅读(960) 评论(0) 推荐(0)

perl处理命令行参数
摘要:使用Getopt::std模块代码如下use strict ;use Getopt::Std ;sub test{ use vars qw($opt_d $opt_f) ; getopts('d:f:') ; print $opt_d, "\n" ; print $opt_f, "\n" ;}&test() ;1 ;'d:f:' d和f后面有冒号,表示-d和-f后面必须跟参数。对于更复杂的命令行参数处理,请看Getopt::long模块。 阅读全文

posted @ 2011-09-15 13:13 perlman 阅读(2425) 评论(0) 推荐(0)

perl命令行参数
摘要:查看perl版本perl -version对脚本进行语法检查perl -c scriptname.pl,比如 perl -c zdd.pl对zdd.pl进行语法检查,并不执行。调试perl脚本perl -d script.pl执行命令perl -e 'print "hellow, world!\n"'注意,在Windows上-e后面要使用双引号,所以上面的命令在Windows上要写成perl -e "print 'hello, world\n'",但是这样的话\n将被直接输出,而不是换行,所以更好的办法是使用qqperl 阅读全文

posted @ 2011-09-14 15:38 perlman 阅读(1984) 评论(0) 推荐(0)

导航