2010-07-15 84 views
5

我想通過對散列數組的引用進行迭代,而不必製作本地副本,但我一直收到不能使用字符串(「1」)作爲ARRAY引用,而「嚴格參考「錯誤。爲什麼?我如何解決它?Perl中的引用:散列數組

sub hasGoodCar { 
    my @garage = (
       { 
       model => "BMW", 
       year => 1999 
       }, 

       { 
       model => "Mercedes", 
       year => 2000 
       }, 
       ); 

    run testDriveCars(\@garage); 
}  

sub testDriveCars { 
    my $garage = @_; 

    foreach my $car (@{$garage}) { # <=========== Can't use string ("1") as an ARRAY ref while "strict refs" error 
    return 1 if $car->{model} eq "BMW"; 
    } 
    return 0; 
} 

回答

7

my $garage = @_; 

分配的@_到車庫長度在調用testDriveCars方法時,您傳遞單個參數,因此長度爲1,因此您的錯誤消息約爲"1"

你可以寫

my ($garage) = @_; 

或許

my $garage = shift; 

代替。

在發佈中也有一個缺失的分號 - 在@garage的賦值之後。

查看perldoc perlsub瞭解詳情。

+0

這個常見的錯誤來自不理解的上下文。賦值給一個標量產生一個標量上下文,因此'@ _'被評估爲一個標量(這會產生長度)。 – daotoad 2010-07-16 05:11:42