使用散列和数组的组合的Perl表达式

Roy*_*ion 3 perl reference

我很难理解一段代码.声明是:

push(@{$errorfile{$var}}, $filepath);
Run Code Online (Sandbox Code Playgroud)

我相信push用于将值附加到数组的末尾.但上面的表达让我很困惑.有一个哈希值,并且使用了@符号(通常与数组名称一起使用).在代码的开头,"errorfile"声明为:

my %errorfile;
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

pts*_*pts 8

%errorfile 哈希.

$errorfile{$var}是散列中的(标量)值,对应于键$var.该值恰好是数组引用.

@{$errorfile{$var}} 是引用引用的数组.

示例初始化:my %errorfile = (foo => [12, 34], bar => [56]);.$var = "bar"; $filepath = "my/file.txt"; push(@{$errorfile{$var}}, $filepath); %errorfile变成之后(foo => [12, 34], bar => [56, "my/file.txt"]).

在David W.发布的Perl References链接中查看更多详细信息.

一些亮点:

  • 一个$scalar变量保存的标量值,其可以是为undef,和整数,浮点数字,字符串或参考.
  • 一个@array变量保存的阵列,这是标量值的可转位列表.
  • 一个%hash变量保存从字符串到标量值的映射.

因此,将数组放入散列的唯一方法是将数组引用放入散列中的值.