传递文件句柄并从perl中读取

时间:2013-10-22 01:29:04

标签: perl

我正在尝试打开一个文件并将其传递给一个函数并读取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;我假设它是读取的行数?我做错了什么?

2 个答案:

答案 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))