2013-11-23 44 views
0
我在用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 - > {}信”在我的“如果” ......看来,它不加入...但是,如果我在我的面前放,如果,这将增加,并继续我的循环...

结果(如前):

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

@希内克-Pichi-Vychodil我觉得* * OP是试图建立一个线索,但是你是对的:预期的数据结构+相应的测试用例的转储将是最有帮助的。 – amon

+2

取而代之的是:'$ DIC = $ DIC - > {}信'。你是不是这个意思:'$ dic = $ dic - > {$ letter}'?缺少美元符号。 – FMc

回答

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"; 
    } 
} 

编辑:固定的$信由@FMc

+0

我想我必须出去了一小...感谢您的答复! :) 当Perl不说什么时,有一个问题(这是很明显的方式)这是很难:F – Damiii