use*_*151 0 perl perl-data-structures
我正在尝试使用perl中的函数创建哈希.实际上我正在研究在perl中创建二叉搜索树.以下是代码:
sub newhash {
$data = shift;
$left = undef;
$right = undef;
%node = ("data"=>$data,"left"=>$left,"right"=>$right);
return (\%node);
}
$firstele = newhash(2);
foreach ( keys %$firstele )
{
print "$_:$firstele->{$_}\n";
}
$node = newhash(1);
foreach ( keys %$node )
{
print "$_:$node->{$_} \n";
}
foreach ( keys %$firstele )
{
print "$_:$firstele->{$_}\n";
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,当我打印原始哈希时,数据键被我传递给newhash函数的任何内容所取代.输出:
left:
right:
data:2
left:
right:
data:1
left:
right:
data:1
Run Code Online (Sandbox Code Playgroud)
任何想法为什么数据键被替换?
use strict;会告诉你一堆未声明的变量; 用它们词汇化my它应该解决你的问题.就目前而言,只有一个%node,每次调用都会覆盖它newhash.
use strict;
sub newhash {
my $data = shift;
my $left;
my $right;
my %node = ( # <-- a brand new %node every time
data => $data,
left => $left,
right => $right,
);
return (\%node); # new %node, new reference
}
my $firstele = newhash(2);
print "firstele data: $firstele->{data}\n";
my $node = newhash(1);
print "node data: $node->{data}\n";
print "firstele data: $firstele->{data}\n";
Run Code Online (Sandbox Code Playgroud)