perl学习笔记
1.在单引号里,n不是换行,只是反斜线和字母n两个字符 2.2**3表示2的三次方 3.<STDIN>让perl程序读取从键盘输入的值 4.<STDIN>返回的字符串,一般都会在最后跟有一个换行符,用chomp能移除换行符,举例: #!/usr/bin/perl 如果不加chomp,当你输入"a"的时候输出"no data" 5.注意下面不是乘号,而是字母x,输出为"hellohello" #!/usr/bin/perl 6. ..范围操作符,从左边的数字计数到右边,每次加1,@是声明数组 c[0]=5,c[1]=6等等,pop可用来取出数组最一个元素,同时返回该元素值 下面输出$a=9,$b=8,@c为“5 6 7” #!/usr/bin/perl
8.Foreach 从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。控制变量(本例中为$rock)每一次迭代从列表中取出一个新值。第一次为 “ bedrock”,第三次为 “ lava” 。控制变量不是这些列表元素中的一个拷贝而是这些元素本身。也就是说,如果在循环中修改这个变量,那原始列表中的元素也会被修改,如下面代码段所显示。这条性质是有用的,但是,如果不清楚,可能对其结果感到吃惊。 #!/usr/bin/perl $rock = "black rock"; @rocks=qw/bedrock slate lava/;
9.reverse会读取数组并按相反的次序返回,会输出“109876” @array=6..10; print @a2; 10.使用qw可以不用输入大量的引号,sort用来排序,输出apple first hit,$c=45 #!/usr/bin/perl 11.匹配不分大小写 #!/usr/bin/perl 12.Perl中的一个非常有用的函数是split - 把字符串进行分割并把分割后的结果放入数组中。这个函数使用规则表达式(RE),如果未特定则工作在$_变量上。 split函数可以这样使用: $info = "Caine:Michael:Actor:14,Leafy Drive"; 其结果是: 如果我们已经把信息存放在$_变量中,那么可以这样: @personal = split(/:/); 如果各个域被任何数量的冒号分隔,可以用RE代码进行分割: $_ = "Capes:Geoff::Shot putter:::Big Avenue"; 其结果是 @personal = ("Capes","Geoff","Shot putter","Big Avenue"); 但是下面的代码: $_ = "Capes:Geoff::Shot putter:::Big Avenue"; 的结果是 @personal = ("Capes","","Big Avenue"); 13.sub可创建子程序,让我们可以重复利用已有的代码,可以通过“&”来调用子程序,最后一次的运算结果都会被自动当成子程序的返回值(不同于VBS),第2个例子最后的表达式为print语句。它的返回值通常是1,代表“输出成功”,但它并不是我们想要的值。 example 1: sub test { $a + $b; } $a = 3; $b = 4; $tmp1 = &test; # tmp为7 example 2: sub test { $a + $b; print "hellon"; } $a = 3; $b = 4; $tmp1 = &test; # tmp为1 14.my可以用来创建私有变量,state可以创建持久性私有变量(在子程序多次调用保留该变量的值) sub max { my($m,$n); ($m,$n)=@_; if($m>$n) {$m} else {$n} } 15.反向引用1,反斜号后的数字和括号的组号匹配 $_ = "abba"; if (/(.)1/){ #同'bb'匹配 print "Matched!"; } 通过使用g{1}排除二义性 use 5.010; $_ = "aa11bb"; if (/(.)g{1}11/){ #同'aa11'匹配 print "Matched!"; } 16.默认模式匹配的对象是$_,=~能让perl拿右边的模式来匹配左边的字符串,而非匹配$_ my $t = "my rubble"; if($t=~/brub/){ # b匹配单词边界,还能匹配rubtest,但不能匹配arub print "match!"; } 17.s///用来替换 $_= "he is go with Barney tonight!"; s/Barney/Fred/; print "$_"; 18.即使有其他可以替换的部分,s///也只会进行一次替换,用/g进行全局替换 $_ = "home,sweet home!"; s/home/cave/g; print "$_"; #打印"cave,sweet cave!",若不加/g,则打印"cave,sweet home!" 19. $x="4:6:8:10"; my @values = split /:/,$x; #得到 4,6,8,10 my $z = join "-",@values; #得到 4-6-8-10 print "$z"; 20.在编写perl程序的时候,我们有时需要截取一个字符串中的部分内容,这个时候通常会使用Perl substr函数实现这个功能。 1. $str="testtest"; ? 2. print substr($str,5); ? 运行上面的程序,输出结果"testt",这个是我们想要的结果。再看看下面的程序: 1. $str="测试文本"; ? 2. print substr($str,1); 这时候输出了一个"?",这显然不是我们想要的结果。因为在perl中,所有从外部输入的字符串(包括写在程序里的字符串)都会当成字节来处理,"printsubstr($str,1);"这句话只是把"测试文本"的第一个字节取出来,并且用print输出,然而单个字节是不能表示一个中文字符的,所以就输出了"?"。 如果想要上面的程序输出正确的结果,就需要使用decode函数把"测试文本"转换成perl内部字符串,让perl把"测试文本"当成字符串来处理,这样再用"substr($str,1);"截取的就不是一个字节,而是一个汉字。 ◆下面看一下Perl substr函数的用法: 指令:substr 语法:substr($string,offset,length) 1. $s=substr("perl5",2,2);#这时$s="rl"; ? 2. $s=substr("perl5",2);#这时$s="rl5"; ? 3. $s=substr("perl5",-2,2);#这时$s="l5"; ---------------------------------------- 21.chdir 功能为改变当前工作目录(同cd),用法如下: chdir("$Path/$day"); 22.l 将下个字母转为小写 L 将它后面的所有字母都换为小写,直到E为止 u 将下一个字母转换为大写 U 将它后面的所有字母都换为大写,直到E为止 Q 相当于把它到E之间的非单词字符加上反斜杠 E 结束L、U、Q开始的作用范围 print "lZHANGKAI" print "LZHANGKAI" print "uzhangkai" print "UzhangEkain" 输出结果: zHANGKAI zhangkai Zhangkai ZHANGkai (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |