任何人都可以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]一个@aat索引$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的评论.例如,请参阅此帖子及其链接.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |