使用函数创建哈希

时间:2014-09-29 03:32:13

标签: 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";
}

麻烦的是,当我打印原始哈希时,数据键被我传递给newhash函数的任何内容所取代。输出:

left:
right:
data:2
left:
right:
data:1
left:
right:
data:1

为什么数据密钥会被取代?

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分:0)

以下是在BT结构中添加元素的代码。

使用严格;

使用List :: Util qw(first);

my(@ input,$ data);

print&#34;输入BST结构中的数据:&#34 ;;

$数据= LT;取代;

格格($数据);

my $ root = $ data;

推(@输入,$数据);

while($ data = ~m / \ b - ?\ d {1,3} \ b /){

my $idx=first { $input[$_] == $root } 0..$#input;

    if($data<$root) {

        for(my $i=0;$i<=$idx;$i++) {

            next if($data>$input[$i]) ;

            if($data<$input[$i]) {

                splice(@input,$i,0,$data);

            }

            last;

        }

    }

    if($data>$root) {

        for(my $i=$idx;$i<=$#input;$i++) {

            if($data>$input[$i]) {

                if(($i+1==scalar(@input)) or ($data<$input[$i+1] && $i+1 != 

标量(@input))){

                    splice(@input,$i+1,0,$data);

                    last;

                }

                else  {

                    next;

                }

            }               

            last;

        }

    }

print "Enter the number for being in a BT structure: ";

$data=<>;

chomp($data);   

}

打印&#34;最终BT阵列:\ n&#34;,加入(&#39;,&#39;,@输入),&#34; \ n&#34;;