全球符号" @ list"需要显式包名称错误

时间:2014-04-06 19:38:45

标签: perl syntax scope perl-data-structures

普通而简单的“新手perl代码不起作用,作者不知道为什么”问题:

sub print_hash {
    our %hash;
    my @list = sort {$hash{$a} <=> $hash{$b} keys %hash;            
    foreach my $name (@list) {
        printf "$name $hash{$name}";
    }   
}

错误:

syntax error at ./freq line 27, near "my "
Global symbol "@list" requires explicit package name at ./freq line 27.
BEGIN not safe after errors--compilation aborted at ./freq line 27.

我认为我以某种方式搞砸了我的范围。将our %hash添加到排序eval根本没有帮助(抛出更多错误),并将其外包给sub也是如此。此代码几乎直接从哈希排序教程中窃取。我真的很感激我的错误解释!

2 个答案:

答案 0 :(得分:5)

两个错误:

our %hash; # a semicolon missing
my @list = sort {$hash{$a} <=> $hash{$b}} keys %hash; 
                                        ^ a curly bracket!

答案 1 :(得分:1)

our %hash之后你错过了一个分号。