我需要在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