2013-11-23 45 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