在Perl哈希中访问数组

Kev*_*vin 0 arrays perl hash

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

my %updatevars = (datapoints => []);
Run Code Online (Sandbox Code Playgroud)

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

push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

ike*_*ami 6

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

push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ];
Run Code Online (Sandbox Code Playgroud)

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