Perl中的引用:哈希数组

syk*_*ker 5 arrays perl hash reference perl-data-structures

我想迭代一个哈希数组的引用,而不必制作本地副本,但我一直得到不能使用字符串("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;
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ton 7

这条线

my $garage = @_;
Run Code Online (Sandbox Code Playgroud)

指定@_车库的长度.在对testDriveCars方法的调用中,您传递一个arg,因此长度为1,因此您的错误消息"1".

你可以写

my ( $garage ) = @_;
Run Code Online (Sandbox Code Playgroud)

也许

my $garage = shift;
Run Code Online (Sandbox Code Playgroud)

代替.

在发布之后,帖子中也缺少一个分号@garage.

有关详细信息,请参阅perldoc perlsub.