我在 perl 哈希中有一个数组,声明如下:
my %updatevars = (datapoints => []);
我后来尝试像这样向它添加元素:
push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]);
我收到此错误:
要推送的 arg 1 的类型必须是 dirlist.pl 第 61 行“]) 附近的数组(不是哈希元素)
散列(和数组)只能包含标量。这就是为什么我们必须在其中引用数组(和哈希)。$updatevars{datapoints}
包含对数组的引用。因此,您需要使用
push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ];
请注意,您的代码将在 5.14+ 上运行,因为push
已更改为也接受引用。(但是,此更改“被认为是高度实验性的”,因此您也应该在较新的版本中使用上述代码。)
$updatevars{'datapoints'}
是一个数组 ref,正如您分配的那样:[]
. push
将数组作为参数,而不是数组引用。因此,您需要取消引用您的参考:
push @{ $updatevars{'datapoints'} }, ...
在 Perl v5.14 中,您可以使用参考,如文档中所述。但这听起来不像是推荐的做法。
从 Perl 5.14 开始,"push" 可以采用标量 EXPR,它必须包含对 unblessed 数组的引用。该参数将被自动取消引用。“推动”的这一方面被认为是高度实验性的。在 Perl 的未来版本中,确切的行为可能会改变。
试试这个:
push @{$updatevars{'datapoints'}}, [$updatestart+$i, $bandwidth];
由于push
需要一个数组并且是一个数组引用,因此您必须通过将其放在前面$updatevars{'datapoints'}
来取消引用它。@{}