Perl:如何在新哈希中声明空数组引用?

时间:2011-12-22 03:27:16

标签: arrays perl hash reference warnings

我有严格的警告,但它一直在抱怨下一行的初始化:

$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';

显然,我做错了什么,但我不确定如何做对。 (另外,我知道最后一行是多余的,这可以用更好的方式总结吗?)

3 个答案:

答案 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, [], [], [], '' ];

是你想要的。