如何检查该文件是否成功打开两行

时间:2011-10-05 13:33:17

标签: perl

很抱歉,但我找不到答案。

如果我有以下行

my $FH;
open FH,"somefile";

现在我想检查FH是否已成功打开,但我想在不同的行中执行此操作,而不是使用或语法。

我试过($ FH),但它对我不起作用。

感谢。

3 个答案:

答案 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
}