现在要讲的是 audodie 和 Try::Tiny 这是近来看的几本 Perl 书常常提到的,记个笔记。
有时我们常常写多个 open ,然后还要写上多次 die 象下面,读一个文件,然后写一个文件,有时我写的 open 会超过 4 个,要写很多次 die 这时非常麻烦。我们如果直接 use autodie 就直接能解决所有问题。所有的 die 的地方都能自动实现。
open my $fh, '<', $in or die "$!";
open my $fh, '>', $out or die "$!";加上 autodie 以后就成了
use autodie
open my $fh, '<', $in;
open my $fh, '>', $out;有了这个方便多了,有时我们常常不想让程序 die 了后退出,想抓到原因,得使用 eval 然后来检查 $@.象下面这样。
use autodie;
eval {
open my $fh, '<', $in;
# .....
}
if ($@) {
# TODO
}
eval {
open my $fh, '>', $out;
}
if ($@){
# TODO
}还好上次只有二个 open 。。。是不是感觉很痛苦,要是 open 之类会 die 的更加多点的话。另外,有没有发现,只要第一个 open 失败,第二个 if ($@) 永远会失败。因为 $@ 的标记下面也检查同样的变量。这时使用 Try::Tiny 中的 try catch 吧(Python 原生支持)。
这时使用很方便
use autodie;
use Try::Tiny;
try {
open my $fh, '<', $in;
# .....
open my $fh, '>', $out;
# .....
}
cacht {
print "Error $_\n";
} 有时我们还可以在这个地方使用 try Catch 做程序流程控制
use autodie;
use Try::Tiny;
try {
&sub1();
&sub2();
&sub3();
}
cacht {
&sub4();
&sub5();
&sub6();
}象上面,只要在 sub1, sub2, sub3 任意一个子函数 die 出来,这个流程就认为出错,就做其它的另一种方案的流程 sub4,sub5,sub6.