尝试在Perl中循环遍历哈希数组时出错

时间:2011-07-15 05:15:51

标签: arrays perl hash flow-control

有几次曾经问过这个问题,但这些答案似乎都不适用于我的情况。

我的代码:

open(FILE, "<", $fileb) or die "File not openable: $!";
while (<FILE>) {
    $filebmeta[$line] = (data => $_, match => -1);
    $line++;
}
close(FILE);
$line = 0;


for my $hashref (@filebmeta) {
     print "$hashref->{data}\n";
}

当我运行此代码时,它吐出:'不能使用字符串(“-1”)作为HASH引用,而在./partc.pl第152行使用“strict refs”。'

知道为什么会这样吗?我似乎无法在循环中正确地取消引用散列。

3 个答案:

答案 0 :(得分:7)

数组的元素需要是hashrefs,所以你的assigment语句需要使用大括号:

$filebmeta[$line] = {data => $_, match => -1};

您的代码是为数组分配一个列表,因此它只是获取列表中的最后一个元素-1。因此,您的错误消息。

答案 1 :(得分:4)

您的表达式(data => $_, match => -1)不会创建hashref,它会创建一个列表。你可能意味着{data => $_, match => -1}

答案 2 :(得分:-1)

您的意思是除了代码中的所有未定义变量之外?阅读perlreftut并注意语法。