做危险的事情,如果失败,试着修复它并再做一次。如果仍然失败,请放弃

时间:2012-09-26 12:06:25

标签: perl

我正在寻找

的好形式
if (! write_to_file($data) )
{
    open_this_file($file_name)
    write_to_file($data) or die "Cant write to $file_name" ;
}
它看起来很不清楚,不是吗?如何写自我解释?

4 个答案:

答案 0 :(得分:7)

“执行or修复& or死!”

假设write_to_file( $data )在失败时返回false:

   write_to_file( $data )
or do { open_this_file( $file_name ); write_to_file( $data ) }
or die "Can't write to $file_name";

由于运算符优先级,您可以在没有do块的情况下重写它。 open_this_filewrite_to_file之间的逗号优先级高于or,因此效果与do块相同:

   write_to_file( $data )
or open_this_file( $file_name ), write_to_file( $data )
or die "Can't write to $file_name";

答案 1 :(得分:4)

for my $try (1..$num_tries) {
    last if write_to_file($data);
    die '...' if $try == $num_tries;
    open_this_file($file_name)
}

答案 2 :(得分:3)

open_this_file($file_name) if not write_to_file($data);
write_to_file($data) or die "Cant write to $file_name";

没有太大的区别,但它更清洁,如你所愿..

或者你可以使用这个单行: -

write_to_file($data) or open_this_file($file_name) and 
                        write_to_file($data) or die "Cant write to $file_name";

答案 3 :(得分:2)

sub is_open { return (tell($handle) != -1); }

open_this_file($file_name) if not is_open($handle);
write_to_file($data)       or die "Cant write to $file_name" ;

其中$handle是文件句柄。