Perl - 读取文件

时间:2017-03-14 23:58:06

标签: arrays perl file

我想将文件读入数组。我知道一种方法,但即使没有这样的文件,我也不想停止我的程序。如果没有文件,我只想制作一个内部标志1并继续我的脚本。但是,我收到错误,因为我没有正确关闭文件。请让我知道如何解决此问题。任何建议表示赞赏。

我的代码(ttt.pl):

#!/usr/bin/perl 

use strict;
use warnings;


my $flag=1;
my $filename="test.txt";

open ( my $fh, '<', $filename ) or $flag=0;
chomp ( my @input = <$fh> );
close ( $fh );

print $flag;

错误信息是:在./ttt.pl第11行关闭的文件句柄$ fh上的readline()。

3 个答案:

答案 0 :(得分:4)

您通常会使用file test operator,一般化为-X,在尝试打开文件之前查看该文件是否存在:

if (-e $filename) {
    open(my $fh, '<', $filename) or die $!;
    # ...
}

-e对您的需求可能过于宽泛;对于普通文件,目录,符号链接等,它将返回true。如果要将测试限制为仅普通文件,请改用-f

答案 1 :(得分:3)

尝试打开文件并在失败时跳过它是最简单和最安全的。

我们总是检查失败(对吧?),在这里你要继续前进。 像往常那样做

foreach my $file (@filelist)
{
    open my $fh, '<', $file or do {
        warn "Can't open $file: $!";
        next;
    };

    # process the file

    close $fh or warn "Can't close filehandle: $!";
}

这也有助于(可能是罕见的)竞争条件。

答案 2 :(得分:2)

你必须检查你的旗帜是否仍为1

#!/usr/bin/perl 

use strict;
use warnings;


my $flag=1;
my $filename="test.txt";

open ( my $fh, '<', $filename ) or $flag=0;
if ($flag == 1){
    chomp ( my @input = <$fh> );
    close ( $fh );
}
print $flag;