有几次曾经问过这个问题,但这些答案似乎都不适用于我的情况。
我的代码:
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”。'
知道为什么会这样吗?我似乎无法在循环中正确地取消引用散列。
答案 0 :(得分:7)
数组的元素需要是hashrefs,所以你的assigment语句需要使用大括号:
$filebmeta[$line] = {data => $_, match => -1};
您的代码是为数组分配一个列表,因此它只是获取列表中的最后一个元素-1
。因此,您的错误消息。
答案 1 :(得分:4)
您的表达式(data => $_, match => -1)
不会创建hashref,它会创建一个列表。你可能意味着{data => $_, match => -1}
答案 2 :(得分:-1)
您的意思是除了代码中的所有未定义变量之外?阅读perlreftut并注意语法。