Perl读取文件错误

时间:2012-07-21 16:29:49

标签: perl file-io

我必须使用perl逐行读取内存中的大(BIG)文件。 如果出现一些错误,函数open()会返回false和$!设置为系统错误。 但是,如果我得到一些读取文件的错误? 我使用这段代码:

open(STATISTICS, "<" . $statisticsFile) or die "Can't open statistics file $statisticsFile ($!)";
while (<STATISTICS>) {
  my $line = $_;
  ...
}
close($STATISTICS);

任何提示?

3 个答案:

答案 0 :(得分:8)

您可以将代码更改为如下所示。

您似乎正在使用STATISTICS$STATISTICS作为文件句柄。由于词法句柄是优选的,我在这里使用$stat

open my $stat, "<" . $statisticsFile
    or die "Can't open statistics file $statisticsFile: $!";

until (eof $stat) {
  my $line = <$stat>;
  defined $line or die "Read failure on statistics file $statisticsFile: $!";
  ...
}

close($stat);

答案 1 :(得分:2)

您可能希望在while循环后测试eof。如果您不在eof,则表示您有错误。或者,可能更安全,检查$!因为eof 可能重置$!。无论哪种方式测试。

我还要补充说,在read(2)上获取错误非常罕见。也许你的内存不足了。

如果你的内存耗尽,perl就不会是那个告诉你它的人,操作系统会去(通过杀死perl!)。

答案 2 :(得分:2)

如果出现错误,while循环会中断,因为<STATISTICS>会返回undef。应设置$!,因此您可以在循环后检查$!的值,看看是否一切正常。