我正在尝试打开一个文件并将其传递给一个函数并读取100行的块。 要做到这一点,我做了:
open my $fh, '<', $file or die "Unable to open the file: $!";
#get the header out
my $header = <$fh>;
my @columns = get_column_headers($header);
getData($fh, 100);
...
sub getData {
my $fh = shift;
my $maxLines = shift;
my $count = 0;
while (my $line = <$fh> && $count < $maxLines) {
print "line is : $line \n";
}
}
此打印行为:1
如果我在打开后在$ fh上打印参考,当我将它传递给getData时,它会输出GLOB。我如何实际检索剩余的行而不是&#34; 1&#34;我假设它是读取的行数?我做错了什么?
答案 0 :(得分:5)
只是一个优先问题。
my $line = <$fh> && $count < $maxLines
装置
my $line = ( <$fh> && $count < $maxLines )
所以添加parens
( my $line = <$fh> ) && $count < $maxLines
哦,你忘记增加$count
。
( my $line = <$fh> ) && ++$count <= $maxLines
答案 1 :(得分:2)
阅读http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
(my $line = <$fh> && $count < $maxLines)
被解释为(my $line = (<$fh> && $count < $maxLines))
,将真值(1)返回到$ line。
最好写成(my $line = <$fh> and $count < $maxLines)
或((my $line = <$fh>) && ($count < $maxLines))
。