Perl tips series 1



print中内嵌函数

有的时候,我们想要print一些信息,但是又要对信息处理后打印,我们不得不分成两部分来做。

my @array = qw(abc de fgh);

my $tmp = join ':', @array;

print "$tmp\n";

如果特别想省去$tmp这个临时变量,可以像下面的方式来写。

@array = qw(abc de fgh);
print "@{[join ':',@array]}";

@{[code]}这种写法是把code的执行结果先转成array reference,然后在变成array,很巧妙的写法!

按照文件的创建时间排序

这个需求的出发场景是,比如一个工具生成autohref.txt文件,等再run一次,工具生成autohref1.txt,以此类推。 如果我想对最新的autohref*.txt文件进行处理,一般的方法是找匹配/autohref(\d+)\.txt/的文件,同时$1是最大的。 但是,如果用户删除了其中一个autohref4.txt,那么下次run这个工具,就有可能破坏了这个前提。所以,去找最新的这个文件是比较保险的。

my @files = glob './autohref*.txt';

my @files_in_order = sort {(stat $b)[10] <=> (stat $a)[10]} @files;

my $latest_file = shift @files_in_order;

函数stat的用法,来这里看