Perl的push函数返回索引值而不是数组元素

5
我正在阅读一个名为mention-freq的文本文件,其数据格式如下:
1

1

13

2

我希望读取行并将值存储在数组中,就像这样:@a=(1, 1, 13, 2)。Perl的push函数会给出索引值/行号,即1、2、3、4,而不是我想要的输出结果。请问您能指出错误吗?这是我所做的:

use strict;
use warnings;

open(FH, "<mention-freq") || die "$!";
my @a;
my $line;
while ($line = <FH>)
{
    $line =~ s/\n//;
    push @a, $line;
    print @a."\n";
}
close FH;

我喜欢 twoHandsTwoCutsFunction 函数 :) sub{map{s/^\s+//; s/\s+$//; $_}@_} - gaussblurinc
1个回答

10

问题在于您打印了@a和换行符的串联。当您进行串联操作时,会强制转换成标量上下文。数组的标量上下文不是其内容,而是其元素计数。

您只需要打印:

 print "@a\n";

同时,虽然这不会影响您的代码运行,但通常删除<> readline 操作读取到的记录终止符的方法是使用 chomp

instead.

chomp $line;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接