使用函数创建哈希

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)

任何想法为什么数据键被替换?

Jim*_*vis 6

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)