2010-07-15 2 views
5

로컬 복사본을 만들 필요없이 해시 배열에 대한 참조를 반복하고 싶지만 ARRAY ref로 문자열 ("1")을 사용할 수 없습니다. "strict 심판 "오류. 왜? 어떻게 수정해야합니까?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 메서드 호출에서 단일 arg를 전달하므로 길이가 1이므로 "1"에 대한 오류 메시지가 표시됩니다.

당신은

my ($garage) = @_; 

혹은

my $garage = shift; 

대신 작성할 수 있습니다.

@garage 할당 후 게시에 누락 된 세미콜론이 있습니다.

자세한 내용은 perldoc perlsub을 참조하십시오.

+0

이 일반적인 오류는 상황을 이해하지 못해 발생합니다. 스칼라에 대입하면 스칼라 문맥이 만들어 지므로'@ _ '은 스칼라 (길이를 산출)로 평가됩니다. – daotoad