Perl 不';我不想引用散列的散列
我对perl有一个问题,我真的不知道为什么会发生这种情况。。。 问题在于:Perl 不';我不想引用散列的散列,perl,hash,reference,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);
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之前,它将添加并继续我的循环
结果(在if之前):
结果(如有):
说真的。。。我不明白为什么它会给我这个结果。。。显然,对我来说,这几乎是一样的事情!
感激地
达米恩首先,不要那样做:
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";
}
}
edit:fixed$letter,正如@FMc所指出的,这段代码应该做什么?@Hynek Pichi Vychodil我认为OP正在尝试构建一个trie,但你是对的:一个预期数据结构的转储+相应的测试用例将是最有帮助的。取而代之的是:$dic=$dic->{letter}
。你的意思是:$dic=$dic->{$letter}
?美元符号不见了。我想我得出去一下。。。谢谢你的回复!:)如果perl在出现问题时什么都不说(顺便说一句,这是显而易见的),那就更难了:f
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)
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";
}
}