如何将元素推入作为哈希值保持的数组引用?

时间:2010-07-11 00:28:46

标签: perl

%data = (
    'digits' => [1, 2, 3],
    'letters' => ['a', 'b', 'c']
);

我如何push '4'加入$data{'digits'}

我是Perl的新手。那些$@%符号对我来说很奇怪;我来自PHP背景。

4 个答案:

答案 0 :(得分:14)

push @{ $data{'digits'} }, 4;

$ data {'digits'}返回数组引用。把@ {}放在它周围“取消引用它”。以同样的方式,%{}将取消引用哈希引用,$ {}将是一个标量引用。

如果您需要将某些内容放入哈希引用中,即

$hashref = { "foo" => "bar" }

您可以使用:

${ $hashref }{ "foo2" } = "bar2"

或箭头符号:

$hashref->{"foo2"} = "bar2"

以某种方式,将引用视为与变量名称相同的内容:

push @{ $arrayref   }, 4
push @{ "arrayname" }, 4
push    @arrayname   , 4

事实上,这就是“软引用”。如果你没有打开所有的严格性,你可以直截了当地说:

# perl -de 0
  DB<1> @a=(1,2,3)
  DB<2> $name="a"
  DB<3> push @{$name}, 4
  DB<4> p @a
1234

答案 1 :(得分:2)

push @{data{'digits'}}, 4;

@ {}从引用中生成一个数组(data{'digits'}返回一个数组引用。)然后我们使用我们得到的数组将值4推送到哈希数组中。

link有助于解释它。

我使用此link来解决有关Perl中哈希值的任何问题。

答案 2 :(得分:2)

对于异国情调但非常讨人喜欢的选项,请查看autobox::Core CPAN模块。

use autobox::Core;

my %data = (
    digits  => [1, 2, 3],
    letters => ['a', 'b', 'c'],
);

$data{digits}->push(4);

$data{digits}->say;   # => 1 2 3 4

答案 3 :(得分:1)

push @{ $data{digits} }, 4;

官方Perl文档网站有一个很好的数据结构教程:perldsc,尤其是Hashes-of-Arrays部分。

$,@和%被称为sigils。