Я хочу выполнить итерации через ссылку на массив хешей, не имея необходимость делать локальные копии, но я продолжаю добираться, не Может использовать строку ("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;
}
Строка
my $garage = @_;
назначает длину @_
гаражу. При вызове метода testDriveCars
вы передаете единственный аргумент, следовательно, длина равна единице, отсюда и ваше сообщение об ошибке «1»
.
Вместо этого вы можете написать
my ( $garage ) = @_;
или, возможно,
my $garage = shift;
.
В сообщении также отсутствует точка с запятой - после назначения @garage
.
Подробнее см. perldoc perlsub .