Ссылки в Perl: массив хешей

Я хочу выполнить итерации через ссылку на массив хешей, не имея необходимость делать локальные копии, но я продолжаю добираться, не Может использовать строку ("1") в качестве МАССИВА касательно в то время как "строгие судьи" ошибки. Почему? Как я фиксирую его?

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;
}
5
задан Axeman 8 October 2010 в 21:31
поделиться

1 ответ

Строка

my $garage = @_;

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

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

my ( $garage ) = @_;

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

my $garage = shift;

.

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

Подробнее см. perldoc perlsub .

7
ответ дан 14 December 2019 в 08:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: