我在perl代码中收到警告,不知道为什么......
警告:
Odd number of elements in anonymous hash at /Users/../Tree.pm line 56.
这给了我那条线:
$dic->{$firstLetter}={$letra};
实施有问题吗?
我的意思是,它通过了所有的测试,但它给了我这些错误......就像在同一条线上的10次! 请接受一些建议! :)
sub add_word{
my ($self,$word) = @_ ;
my $dic = $self->{'dic'};
my @array = split(//,$word);
my $firstLetter = shift @array;
for my $letra(@array){
if(!$dic->{$firstLetter}){
$dic->{$firstLetter} = {$letra};
$dic = $dic->{$firstLetter};
}
else{
if($dic->{$firstLetter}){
$dic = $dic->{$firstLetter};
}
}
$firstLetter = $letra;
}
$dic->{$firstLetter} = {"\$" => "\$"};
}
答案 0 :(得分:4)
= {$letra}
正在创建一个带有键但没有值的hashref并试图分配它。
您可能只想分配您拥有的标量:
$dic->{$firstLetter} = $letra;
虽然你可能想要:
$dic->{$firstLetter} = { someKey => $letra };
或
$dic->{$firstLetter} = { $letra => "someValue" };
答案 1 :(得分:1)
开启warnings
是件好事。在{ ... }
等表达式中使用{$letra}
时,您构建的是匿名哈希引用。哈希想用键/值对初始化。所以当你写
$dic->{$firstLetter}={$letra};
这与
几乎相同my %anon = ( $letra );
$dic->{$firstLetter} = \%anon;
该哈希将被搞砸,因为它有一个键但没有值。因此,哈希在构造时希望拥有一个偶数大小的列表,因此每个键都有一个值。如果你有一个奇数大小的列表,它会发出警告。
我的猜测是你可能只想分配一个简单的标量。所以试试
$dic->{$firstLetter} = $letra;
不要害怕空格键。 :)它使事情更容易阅读。