Ссылки в Perl: массив хэшей - PullRequest
5 голосов
/ 16 июля 2010

Я хочу перебрать ссылку на массив хешей без необходимости делать локальные копии, но я продолжаю получать Невозможно использовать строку ("1") в качестве ссылки ARRAY, в то время как ошибки "строгих ссылок"Зачем?Как мне это исправить?

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;
}

1 Ответ

7 голосов
/ 16 июля 2010

Линия

my $garage = @_;

назначает длину @_ для гаража.При вызове метода testDriveCars вы передаете один аргумент, следовательно, длина равна единице, следовательно, ваше сообщение об ошибке о "1".

Вы можете написать

my ( $garage ) = @_;

или, возможно,

my $garage = shift;

.

В публикации также отсутствует пропущенная точка с запятой - после присвоения @garage.

См. perldoc perlsub длядетали.

...