在Perl哈希中访问数组

时间:2013-10-10 20:36:44

标签: arrays perl hash

我在perl哈希中有一个数组,声明如下:

my %updatevars = (datapoints => []);

我后来试图像这样添加元素:

push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]);

我收到此错误:

  

要推送的arg 1的类型必须是dirlist.pl第61行的数组(不是哈希元素),靠近“])”

3 个答案:

答案 0 :(得分:6)

哈希(和数组)只能包含标量。这就是我们必须在其中引用数组(和哈希)的原因。 $updatevars{datapoints}包含对数组的引用。因此,您需要使用

push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ];

请注意,您的代码适用于5.14+,因为push已更改为也接受引用。 (但这种变化“被认为是高度实验性的”,因此您也应该在新版本中使用上述代码。)

答案 1 :(得分:3)

$updatevars{'datapoints'}是一个数组引用,正如您指定的那样:[]push将数组作为参数,而不是数组引用。所以你需要取消引用你的参考:

push @{ $updatevars{'datapoints'} }, ...

在Perl v5.14中,您可以使用引用,如文档中所述。但这听起来并不像是推荐的做法。

  

从Perl 5.14开始,“push”可以采用标量EXPR,必须使用   保持对未经处理的数组的引用。争论将是   自动解除引用。这种“推动”方面被认为是高度的   实验。确切的行为可能会在将来的版本中发生变化   的Perl。

答案 2 :(得分:2)

试试这个:

push @{$updatevars{'datapoints'}}, [$updatestart+$i, $bandwidth];

由于push采用数组且$updatevars{'datapoints'}是数组引用,因此您必须将@{}放在前面来取消引用它。