在文件之间循环存储文本Perl

时间:2013-05-03 09:29:58

标签: perl

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文件之间循环。

3 个答案:

答案 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);替换。