sub open_file {
my @files = @_;
my @file_text = ();
foreach my $file(@files){
open(my $fh, '<', $file);
@file_text = <$fh>;
close($fh);
}
return @file_text;
}
你好。这种编码似乎存在问题,特别是foreach
循环部分。
@files
是一个包含@files = (abc.html bcd.htm zxy.html);
的数组我想打开所有这些html文件,并将累积的html文本存储在@file_text
中以供进一步使用。
然而我收到错误:
readline() on closed filehandle $fh at source-1-2.pl line 36
readline() on closed filehandle $fh at source-1-2.pl line 36
readline() on closed filehandle $fh at source-1-2.pl line 36
也许我得到三行相同的错误,因为我在3个html / htm文件之间循环。
答案 0 :(得分:4)
也许检查open
是否成功:
open(my $fh, '<', $file)
or die "can't open $file: $!";
答案 1 :(得分:3)
如果不检查返回值,则不应使用open
:
open(my $fh, '<', $file) or die $!;
# ^^^^^^^^^ this part
可能发生的事情是打开失败,因此文件句柄从未打开过。
答案 2 :(得分:1)
除了其他答案中关于打开的要点之外,该问题还要求“ ...打开所有这些html文件,并将累积的html文本存储在@file_text中以供进一步使用。” /强>”。代码的行@file_text = <$fh>;
表示@file_text
只读取最后一个文件的内容。该行可能会被@new_text = <$fh>; push @file_text, @new_text;
或@new_text = <$fh>; @file_text = (@file_text, @new_text);
替换。