任何人都可以push
向我解释以下Perl代码中的声明吗?我知道perl如何工作但我无法理解跟随push命令的第一个参数代表什么.我试图解释某人的剧本.我试过,print "@a\n";
但它只打印ARRAY(0x9aa370)
,这让我觉得推动没有做任何事情.任何帮助表示赞赏.谢谢!
my @a = ();
my $b = 10;
my $c = 'a';
push(@{$a[$b]}, $c);
Run Code Online (Sandbox Code Playgroud)
zdi*_*dim 14
让我们分解吧.
该@{...}
从理解在perlref"使用引用"
在您将标识符(或标识符链)作为变量或子例程名称的一部分放置的任何地方,您可以使用BLOCK替换标识符,返回正确类型的引用.
那么内部{ ... }
块有什么更好的工作到数组引用.你有$a[$b]
一个@a
at索引$b
元素,所以元素必须是一个arrayref.
然后@{...}
取消引用它并为它添加push
一个新元素$c
.总而言之,$c
将其复制到匿名数组的(唯一)元素中,该数组的引用位于数组的索引$b
处@a
.
并且是一个关键部分:因为实际上没有arrayref †,自动生成启动并且它被创建.由于在$b
它们之前的索引处没有元素,因此它们也是有价值的undef
.
现在请完成
教程perlreftut和
数据结构cookbook perldsc
同时perlref
在开头使用链接进行完整参考.
对于复杂的数据结构,能够看到它们很有用,并且有工具可用.最常用的是Data :: Dumper核心,下面是Data :: Dump的示例
perl -MData::Dump=dd -wE'@ary = (1); push @{$ary[3]}, "ah"; dd \@ary'
Run Code Online (Sandbox Code Playgroud)
与输出
[1, undef, undef, ["ah"]]
其中[]
inside表示一个arrayref,其唯一元素是字符串ah
.
†更确切地说,undef
标量被解除引用,并且因为这发生在左值上下文中,所以自动归一化.感谢ikegami的评论.例如,请参阅此帖子及其链接.