以下代码是动态生成哈希。如果我不在子程序的return
部分中给出else
语句,我会得到
$VAR1 = {
'fruit' => { 'apple' => 'skin' } };
但是如果我得到return
声明
$VAR1 = {
'fruit' => {
'apple' => {
'red' => 'skin'}
}
};
这就是我想要的。
是什么造就了这一点。有人可以教育我。
sub construct_hash{
my ($hash, $value, $head, @tail ) = @_;
if(@tail){
$hash = { $head => construct_hash(\%{$hash}, $value, shift @tail, @tail)} ;
}else{
$hash->{$head} = $value;
return $hash;
}
}
my %h;
my @keys = qw (fruit apple red);
my $value = 'skin';
print Dumper construct_hash(\%h, $value, shift @keys, @keys);
答案 0 :(得分:1)
如果未指定从子例程返回的内容,Perl将返回所评估的最后一个表达式的值(请参阅return)。在这种情况下,这意味着子例程返回$hash->{$head}
分支中的else
。