不想引用哈希的哈希值

时间:2013-11-23 17:46:58

标签: perl hash reference

我遇到了perl的问题,我真的不知道它为什么会发生...... 问题是:

sub rem_word{
    my ($self,$word) = @_;
    my $dic = $self;

    my @word = split(//,$word);
    my $count ; 
    my $first = 1;

    for my $letter(@word){
            $count = scalar (keys %$dic);

            #$dic = $dic->{$letter};

            if($dic->{$letter}){
                    print "ELEMENTOS KEYS : $count\n";
                    $dic = $dic->{letter};
            }
            print "WOOT COUNT: $count HASH: $dic\n";
    }
}

如果我把“$ dic = $ dic-> {letter}”的说明放在我的“if”中...似乎它没有添加......但是,如果我把它放在我的if之前将添加并继续我的循环......

结果(如果之前):

WOOT COUNT: 3 HASH: HASH(0x7f88308361b8)
WOOT COUNT: 2 HASH: HASH(0x7f883088eb28)
WOOT COUNT: 2 HASH: HASH(0x7f8830832648)
WOOT COUNT: 2 HASH: HASH(0x7f88308f8060)
WOOT COUNT: 1 HASH: HASH(0x7f88308ff6f0)

结果(内部如果):

WOOT COUNT: 3 HASH:
WOOT COUNT: 0 HASH: HASH(0x7fb6918018c8)
WOOT COUNT: 0 HASH: HASH(0x7fb6918018c8)
WOOT COUNT: 0 HASH: HASH(0x7fb6918018c8)
WOOT COUNT: 0 HASH: HASH(0x7fb6918018c8)

严肃地说......我不明白为什么它会给我这样的结果......显然,对我而言,这几乎是一回事! 感激,

达明

1 个答案:

答案 0 :(得分:0)

首先,不要这样做:

my @word = split(//,$word);

然后,有以下内容,这就是为什么这段代码不能满足您的需求:

$dic = $dic->{letter};

所以$dic是对哈希的引用,现在你给它一个哈希值。

不要为不同的变量赋予相同的名称,即使它们的类型不同。这会导致混乱。

sub rem_word{
    my ($self,$word) = @_;
    my $dic = $self;

    my @lword = split(//,$word);
    my $count ; 
    my $first = 1;

    for my $letter(@lword){
            $count = scalar (keys %$dic);
            my $found ; 
            if($dic->{$letter}){
                    print "ELEMENTOS KEYS : $count\n";
                    $found = $dic->{$letter};
            }
            print "WOOT COUNT: $count HASH: $found\n";
    }
}

编辑:固定$ letter,如@FMc所述