【问题标题】:Why am i getting an "Odd number of elements in anonymous hash " warning为什么我会收到“匿名哈希中的奇数个元素”警告
【发布时间】:2013-11-24 21:56:42
【问题描述】:

我在 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} = {"\$" => "\$"};
}

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    = {$letra} 正在创建一个带键但没有值的 hashref 并尝试分配它。

    您可能只想分配您拥有的标量:

    $dic->{$firstLetter} = $letra;
    

    虽然你可能想要:

    $dic->{$firstLetter} = { someKey => $letra };
    

    $dic->{$firstLetter} = { $letra => "someValue" };
    

    【讨论】:

    • 我想要的是 $dic 对另一个散列的引用,但我只想从另一个散列中添加它们的键!你为什么要问我?因为我想以交互方式将散列添加到散列到散列!只有当没有其他东西可以放时,我才会在最后添加一个键和一个值!
    • 我完全不明白你的意思。
    • 我把我的功能贴出来也许会更好理解!
    【解决方案2】:

    很高兴您打开了warnings。当您在像{$letra} 这样的表达式中使用{ ... } 时,您正在构造一个匿名哈希引用。哈希希望使用键/值对进行初始化。所以当你写

    $dic->{$firstLetter}={$letra};
    

    这几乎是一样的

    my %anon = ( $letra );
    $dic->{$firstLetter} = \%anon;
    

    那个散列会被弄乱,因为它有一个键但没有值。因此,哈希在构造时希望有一个偶数大小的列表,因此每个键都有一个值。如果您拥有一个奇数大小的列表,它会发出警告。

    我猜你可能只想分配一个简单的标量。所以试试

    $dic->{$firstLetter} = $letra;
    

    不要害怕空格键。 :) 它使事情更容易阅读。

    【讨论】:

    • 啊哈哈是的,我不会害怕空格键! xD 但正如我所说,我想要的是 $dic 对另一个散列的引用,但我只想从另一个散列中添加它们的键!你为什么要问我?因为我想以交互方式将散列添加到散列到散列!只有当没有其他东西可以放时,我才会在最后添加一个键和一个值!
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    相关资源
    最近更新 更多