如果打开文件失败,是否必须使用die?

eri*_*ung 9 perl

大多数时候,我做这样的事情:

open FH, ">file.txt" or die "Cann't open file: $!";
Run Code Online (Sandbox Code Playgroud)

是否die必须使用?如果我希望我的脚本继续(如果文件无法打开则忽略错误),我该怎么办?

AKH*_*and 21

你可能想做点什么

if(open my $fh, ">", "file.txt") {
    # do stuff with file
    close $fh;
}
else {
    # do stuff without file
} 
Run Code Online (Sandbox Code Playgroud)

  • @ericyoung - 不,不,不是.如果假装Perl没有实现`goto`,你会好得多.你总是可以`打开(我的$ fh,">","file.txt")或退出(-1); (6认同)
  • @ericyoung这是对我所说的重述,正确答案是"抓住异常". (2认同)

Nei*_*ter 8

如果代码die无法访问该文件,则代码不必.

如果写入文件是可选的,您可能会这样做:

my $file_is_ok = 0;
open FH, ">file.txt" and $file_is_ok = 1;
warn "No logging available" unless $file_is_ok;
Run Code Online (Sandbox Code Playgroud)

然后,无论您想要使用文件句柄,都可以先检查它是否正常:

$file_is_ok and print FH "Something happened";
Run Code Online (Sandbox Code Playgroud)

通常你会想要比上面更多的抽象,但我希望这足以开始.


Nat*_*man 5

不,die绝对不必使用,否则失败open只会退出程序.这只是一个常用的构造,因为通常如果你不能打开一个文件就没有意义继续,但实际上也没有要求die或做任何其他事情.