很抱歉,但我找不到答案。
如果我有以下行
my $FH;
open FH,"somefile";
现在我想检查FH是否已成功打开,但我想在不同的行中执行此操作,而不是使用或语法。
我试过($ FH),但它对我不起作用。
感谢。
答案 0 :(得分:6)
来自open
-Manual:
Open在成功时返回非零值,否则返回未定义的值。如果 打开涉及管道,返回值恰好是pid的 子进程。
所以你可以这样做:
my $FH;
my $file_opened = open $FH, '<', 'somefile';
if($file_opened) {
print "open";
close($FH);
}
或者在一行中没有附加变量:
if(open $FH, '<', 'somefile') {
print "--open";
close($FH);
}
答案 1 :(得分:2)
您可以在一行中完成:
open( my $FH, '<', 'somefile' ) or die "Could not open file: $!\n";
这样可以打印出无法打开文件的原因。
修改:如果你想在两行中做同样的事情:
use autodie;
open( my $FH, '<', 'somefile' );
答案 2 :(得分:1)
如果你真的不想使用open
的返回值,核心模块Scalar::Util
会提供openhandle
函数,告诉你变量是否是一个文件句柄随时可以使用。
use Scalar::Util 'openhandle';
open my $FH, '<', 'some_file.txt';
unless (openhandle $FH) {
# handle error here
}