我遇到了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)
严肃地说......我不明白为什么它会给我这样的结果......显然,对我而言,这几乎是一回事! 感激,
达明
答案 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所述