1. 如何检查变量是否初始化?
if(defined($var))
对于数组的初始化检测,可以同样适用,但并不提倡这么做,运行会提示使用了Deprecate函数。可以通过检测数组长度判断:
if($#array eq -1){}
2. 数组遍历
my $i = 0;
while($i < $#ar) #$#取得数组@ar的最后一个索引
3. HASH遍历
while(my ($key,$value) = each %hash)
4. 获取HASH中数组或HASH
my @msgs = @{$data->{Message}};
my %msgs = %{$data->{Message}};
@{}和%{}是必要的
5. 常见的比较操作
lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比较)
6. 文件读取
open(OUTPUT,">>$output_file") || die "Could not write into file,program halting.";
print OUTPUT "tHello Worldn";
>>添加到文件末尾,>将替换文件
open(INPUT,"<$input_file") || die "Could not read from file,program halting.";
my @lines = <INPUT>;
将文件读入到数组,每行(包括换行符)为数组的一个元素
close(OUTPUT);
close(INPUT);
7. XML操作
use XML::Simple;
use Data::Dumper;
my $simple = XML::Simple->new();
my $data = $simple->XMLin('a.xml');
XML::Simple将XML文件转化为一种由数组和HASH构成的内部表示形式,非常方便处理。对于较大的XML可能造成内存不足。
Data::Dumper帮组输出数组和HASH的内容。
8. 去掉换行符
chomp,删除末尾n。它的返回值表示是否成功,不是处理后串
$str =~ s/[rn]//;
9. 正则匹配
If($str =~ /^/) 如果匹配
如果想取出匹配的子串,需要添加(),这样便可以通过Perl的内部标量$i访问。(i是括号编号)
取出函数名:
$fn =~ /^w+s+(w+)s*(.*)/;
$fn = $1;
10. 字符串处理
length($str)
substr($str,0) # substr($str,length($str))
index($str,$substr)
uc,lc,U,L来修改变量的大小写
11. 参数传递
脚本参数存放在@ARGV中
函数参数存放在@_中
可以通过类似于$ARGV[0]和$_[0]进行访问
12. 执行其他程序
``命令输入,可获取命令输出
System 执行系统中的程序,并返回退出状态
Exec 结束当前程序,执行另一个外部程序,不返回
13. GUI
http://www.ibm.com/developerworks/cn/aix/library/au-perltkmodule2/
14. 找出指定串中所有匹配模式的子串
while($doc =~ /<scs+?id=[wW]+?</sc>/g)
{
??? print "$&n------------n";
}
模式//g表明匹配所有可能的子串。正则表达式中的+?是为了修正表达式的贪婪性。
while循环将匹配的完整串放在变量$&中,如果使用了括号进行部分匹配,匹配的子串放在$i,其中i是括号的编号。
[wW]或者[sS]匹配所有字符,包含换行。.匹配不包含空格。
14. 获取文件绝对路径
use Cwd 'abs_path';
my $abs_file_path = abs_path($file_path);
15. 判断变量是否为HASH或数组,判断HASH或数组是否为空
%hash=('Tom'=>'Male','Jerry'=>'Female');
if ( ref($hash) eq "HASH" ) {
?print "href is a reference to a hash./n";
}
my @list = () ;
if(@list){???
?print "Not empty!n" ;
}
my %hash = () ;
if(%hash){???
?print "Not empty!n" ;
}
?16.s