如何在faStat2第86行解决未打开的文件句柄UPPER上的以下错误"readline()".

Mat*_*coe 1 perl file-io

我该如何解决以下错误:

readline() on unopened filehandle UPPER at faStat2 line 86.
Run Code Online (Sandbox Code Playgroud)

在以下代码中?

#!/usr/bin/perl
use strict;
use warnings;

...

my $cmd = $0;
$cmd =~ s#.*/##;

($#ARGV > 0) || die "Usage $cmd <tibcoUpperMDLog> <tibcoLowerMDLog> <outFile>\n\n";

open(my $UPPER, $ARGV[0]) || die "Unable to open $ARGV[0]\n";
open(my $LOWER, $ARGV[1]) || die "Unable to open $ARGV[1]\n";

...

while ($msg = <UPPER>) { getUpperBusTimeStampAndBatchSize(\$msg); } #This is the line that the error is complaning about
Run Code Online (Sandbox Code Playgroud)

Dan*_*ego 5

我相信你需要$UPPERwhile循环中使用:

while ($msg = <$UPPER>) ...
Run Code Online (Sandbox Code Playgroud)

某些引用在示例中对文件句柄使用非美元符号变量,但它们也open()没有$句柄名称中的文件句柄.如果你问我这会让人感到困惑,但只要坚持下去,我相信你会好起来的.

  • Bareword文件句柄是一项旧功能.对于现代代码,您应该使用词法文件句柄(如`$ UPPER`而不是`UPPER`).你还应该使用`open`的3参数版本.见[本文](http://www.modernperlbooks.com/mt/2010/04/three-arg-open-migrating-to-modern-perl.html). (2认同)