我需要在perl中构建可变深度散列数据结构。最终我发现这段代码:在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是如何工作的。在这段代码中,我没有看到\%哈希值被重置,并且$ 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,\%哈希将如何生成?
非常感谢。这也有助于清理事情 – fflyer05 2010-07-21 19:02:40