perl -V 显示很详细的信息
perl -S hello.pl #使用-S来搜索脚本的路径
perl -e 'print "@INC";'? 使用-e直接执行
perl hello.pl -I/usr/local/lib/modules?? ?使用-I指定搜索模块的路径
在命令行执行多行:
perl -
print "Hello!";
__END__
#####这个比较有用
perl -ne "print;" file.txt
-n 的作用类似与while<>
perl "-" x 30
-----------------------------
perl -e "print __LINE__;"
对于一些匹配
{
[?? ?[
(?? ?(
像{不用转译,其他两个要
chop 将字符串的最后一个字符删除,返回删除的字符
chomp 除去的字符与$? 对应,避免一些误删
$x=$y=$z=1;
print join(","$x,$y,$z);
检查是否为字符串(字符串非空)
if($x & ~$x)
将字符串转成数字
$num = 0 + "100";
print $num;
$!存储当前操作系统的错误
插值
$text = "un";
print "Don't be ${text}happy.";
print "${&getmessage}";
print "${(uc "x")}";
$date=`cal`;
print $date;
使用...关闭裸词
use strict 'subs';
quotemeta在非字母或数字前加反斜杠
常由于正则表达式
stat("test");返回有关test的文件信息
join 只是以某种方式将数据聚集在一起
map? 对每一个数据进行一次作用
grep 从一堆数据中找出符合条件的
print join("," (map lc,A,B,C));
print join("," (map {2 * $_}? A," (grep {$_ > 15} A,C));
匿名数组编辑,与不改动原先的数组
@array1 ?= (1,1,1);
@array2 = grep {$_ *=2} @{[@array1]};
在map,grep 只有grep 才会改变$_;
排序
sort
print sort ("a","f","f");
print sort {$a cmp $b} ("c","r","y");
sub myfunction{
?? ?return (shift(@_) <=> shift(@_));
}
print sort {myfunction($a,$b)} (3,2,1);
reverse(@list); 相反的排序
$a = (2,4,5);
print $a; ///结果为5
@array = (1,3,5);
for($loop = 0;$loop <= $#array;$loop++)
$#array 为数组里的最后一个下标
对于负数的下标
-0为0,-1为最后一个元素
@a[2],和$a[2]? 好像是一样的东西
简单的程序:十进制转十六进制
use integer;
$value = 257;
while($value){
?? ?push @digits,(0 .. 9,a .. f)[$value &15];
?? ?$value /=16;
}
while(@degits){
?? ?print pop @digits;
}
链接两个数组
@a = (1,3);
@b = @a;
@c = @a + @b;
print @c;###结果是6
@c = (@a,@b);或者push @a,@b;
清空数组的三种方法
$#array = -1;
@array = ();
@array = undef;
数组切片
@a = (1,5,6);
@b = @a[1,5];
拼接数组
splice array,offset,length,list;
将从offset开始,length长度去除,并插入list
@a = (1,5);
if(exists($a[2]))???? delete $a[3];
@ARGV读取命令行参数
while(($key,$value) = each(%hash))
(sort) keys %hash?????,????? values %hash
%hash3 = (%hash1,%hash2)
为哈希表分配内存空间
keys(%hash) = 40_000;
运算符与优先级
print ((2+3)*4);? 结果是20
print (2+3) * 4;? 结果是5 当使用括号,print与它最近的()结合,//解释为函数
print +(2+3)*5?? 结果是20? 当使用引号"????? "?? 直接打印引号内的内容
glob '*'? 返回目录下与之对应的文件名列表
while()
{}continue{} continue块在每次while之后重复,不管next,照样执行
?? ??? ?而有last,就不会执行
?? ??? ?redo,也不执行
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$text = "<A>Here is an anchor.</A>";if($text =~ /<(IMG|A)>[ws.]+</1>/i)m//? 和 s///?? 是从左边开始匹配,现在只替换一次,s///g? 现在将进行全局替换tr///? 将一个字符转换成另一个字符,后面什么都不加就是全局转化$xcount = ($text =~ tr/x/x/)? tr返回匹配到的次数c?? ?对查找列表求补d?? ?删除没有替换的字符s?? ?删除重复的替换字符/b([A-Za-z]+)b/?? b表示是在连续的字符组成的串中,$1,1是前面第一个括号匹配到的东西正则表达式的组成部分:字符,字符类,其他匹配模式,量词,断言,向后引用,正则表达式扩展量词:*(0或多次),+(1,或多次),?(1或0);???? 量词具有贪婪性断言:^ ??? ? 行收$?? ?行尾A?? ?字符串开头B?? ?非单词边界b?? ?单词边界G?? ?前一个m//g剩余的内容(仅仅能和/g一起使用)?? 获取前一个匹配没匹配到的东西Z?? ?字符串的末尾,或末尾前的新行z?? ?字符串的末尾(?=exrp) exrp可以匹配下一个,则匹配(?!exrp) exrp能匹配下一个,则匹配(?<=exrp)前一个(?<!exrp)$`?? $&???? $'?? 分别是匹配之前的内容,匹配的内容,匹配之后的内容$+? 最后一次匹配的内容w匹配字母数字字符一个函数 pos()返回最后一次m//g查找的位置$text = "Mary Tom Frank";while($text =~ /w+(?=s)/g){?? ?print "$&n";}在循环中定长表达式 !m/.{20,}/? 只编译一次,变量表达式,每次都编译可以使用m//o来优化经过编译的表达式qr/bisb/