perl代码技巧

perl代码可以说要多简洁有多简洁,下面是一些我日常工作中积累的技巧

交换两个变量

($a, $b) = ($b, $a);

列表移位

($a, $b, $c) = ($b, $c, $a);

将字符串拆分为字符

my $str = 'abcd';
my @chars = split //, $str;

巧用unless

unless(condition){
#do something
}

相当于

if(condition){
#...
}
else{
#do something
}

所以,使用unless可以减少代码行数,下面是一个例子

if(-e file){
#read file
}
else{
die"file not exists!\n" ;
}

可以写成

unless(-e file){
print"file not exists!\n" ;
}

使用or操作符

and和or都是短路操作符,a and b如果a为false,则不再计算b,a or b若a为真则不再计算b。所以用a or b可以实现和unless类似的功能,其语义是,除非满足条件a,否则执行b。看一个例子

chdir'/usr/spool/news' or die"Can't cd to spool: $!\n"

一次性读入整个文件

方法一:

my $text = do {local $/; <$XML>};

方法二:

sysread $fh, $text, -s $fh;

方法三: 使用Perl6::Slurp模块

use Perl6::Slurp;

sub test {
# Slurp file by name

my $xml_file = 'EJV.xml';
my $text = slurp $xml_file;
print $text, "\n";

# Slurp file by handle

my $xml_file = 'EJV.xml';
open my $XML, '<', $xml_file or die $!;
my $text = slurp $XML;
print $text, "\n";
}

获取引用参数并解引用为数组,shift前面的加号is just a placeholder to let perl know 'shift' is not a regular string.

sub bar {
    return @{ shift() };
    #return @{ +shift };
}

调用
sub test {
    my @a = (1, 2, 3);
    my @bar = bar(\@a);
}

==

posted on 2011-09-15 16:35  perlman  阅读(955)  评论(0编辑  收藏  举报

导航