0

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

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

我后来尝试像这样向它添加元素:

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

我收到此错误:

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

4

3 回答 3

6

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

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

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

于 2013-10-10T20:40:49.003 回答
3

$updatevars{'datapoints'}是一个数组 ref,正如您分配的那样:[]. push将数组作为参数,而不是数组引用。因此,您需要取消引用您的参考:

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

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

从 Perl 5.14 开始,"push" 可以采用标量 EXPR,它必须包含对 unblessed 数组的引用。该参数将被自动取消引用。“推动”的这一方面被认为是高度实验性的。在 Perl 的未来版本中,确切的行为可能会改变。

于 2013-10-10T20:40:40.167 回答
2

试试这个:

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

由于push需要一个数组并且是一个数组引用,因此您必须通过将其放在前面$updatevars{'datapoints'}来取消引用它。@{}

于 2013-10-10T20:39:49.837 回答