【发布时间】:2010-07-21 17:50:22
【问题描述】:
我需要在 perl 中构建一个可变深度的哈希数据结构。最终我找到了这段代码:
#!/usr/bin/perl -w
use strict;
my %hash;
my $value = "foo";
my @cats = qw(a b c d);
my $p = \%hash;
foreach my $item (@cats) {
$p->{$item} = {} unless exists($p->{$item});
$p = $p->{$item};
}
我的问题是它如何以及为什么起作用。我以为我知道 perl 是如何工作的。在这段代码中,我没有看到 \%hash 值被重置,并且似乎 $p (这是一个局部变量)在每个循环中都被重置。我什至可以通过数据转储器看到它: 运行:
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my %hash;
my $value = "foo";
my @cats = qw(a b c d);
my $p = \%hash;
foreach my $item (@cats) {
print "BEFORE:\n";
print Dumper(\%hash);
#print Dumper($p);
$p->{$item} = {} unless exists($p->{$item});
$p = $p->{$item};
print "AFTER:\n";
print Dumper(\%hash);
#print Dumper($p);
}
然后用
取消注释该行#print Dumper($p) 清楚地表明 $p 每次都是一个新变量。
如果 $p 每次都重置,\%hash 是如何构建的?
【问题讨论】:
标签: perl