我想将文件读入数组。我知道一种方法,但即使没有这样的文件,我也不想停止我的程序。如果没有文件,我只想制作一个内部标志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()。
答案 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;