我有严格的警告,但它一直在抱怨下一行的初始化:
$hash{$key} = ($row, [], [], [], '');
警告单行:
"Useless use of private variable in void context"
"Useless use of anonymous list ([]) in void context" (3 times)
我稍后会填充数据,但我希望索引1,2,3是数组引用,索引4是字符串。我正在访问并填写数据:
$hash{$key}->[1]->[3] = 'Data';
$hash{$key}->[4] = $hash{$key}->[4] . 'More Data';
显然,我做错了什么,但我不确定如何做对。 (另外,我知道最后一行是多余的,这可以用更好的方式总结吗?)
答案 0 :(得分:12)
哈希的元素只能是标量,所以你必须改变你的赋值以使用匿名数组构造函数而不是parens:
$hash{$key} = [$row, [], [], [], ''];
有关详细信息,请参阅perldsc。
该行:
$hash{$key}->[4] = $hash{$key}->[4] . 'More Data';
可写:
$hash{$key}->[4] .= 'More Data';
最后,除非您喜欢它们,否则->
字符隐含在下标分隔符之间,因此$hash{$key}->[1]->[3]
与$hash{$key}[1][3]
答案 1 :(得分:3)
我不太确定你要做什么,但如果要将数组分配给标量值,则需要使用括号来创建匿名数组:
$hash{$key} = [$row, [], [], [], ''];
在您的情况下,您尝试做的事情解释如下:
$row, [], [], [];
$hash{$key} = '';
因为您无法将值列表分配给标量(单值变量)。但是,您可以像上面一样,将引用分配给包含标量值的匿名数组。
答案 2 :(得分:2)
你几乎得到了它。
请记住,每个哈希和数组值必须是标量,因此如果您需要数组哈希,则必须为哈希键分配数组引用。所以:
$hash{$key} = [ $row, [], [], [], '' ];
是你想要的。