1

这已经被问过几次了,但这些答案似乎都不适用于我的情况。

我的代码:

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";
}

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

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

4

3 回答 3

7

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

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

您的代码正在为数组分配一个列表,因此它只获取列表中的最后一个元素,即-1. 因此你的错误信息。

于 2011-07-15T05:20:08.890 回答
4

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

于 2011-07-15T05:20:13.360 回答
-1

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

于 2011-07-15T05:26:55.923 回答