【问题标题】:References in Perl: Array of HashesPerl 中的参考:哈希数组
【发布时间】:2011-03-16 16:27:46
【问题描述】:

我想遍历对哈希数组的引用,而不必制作本地副本,但我不断收到 Can't use string ("1") as an ARRAY ref while "strict refs" 错误。为什么?我如何解决它?

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

【问题讨论】:

    标签: arrays perl hash reference perl-data-structures


    【解决方案1】:

    线

    my $garage = @_;
    

    将@_ 的长度分配给garage。在对 testDriveCars 方法的调用中,您传递了一个 arg,因此长度为 1,因此您的错误消息是关于 "1"。

    你可以写

    my ( $garage ) = @_;
    

    或许

    my $garage = shift;
    

    改为。

    帖子中也缺少分号 - 在分配@garage之后。

    详情请见perldoc perlsub。

    【讨论】:

    • 这个常见错误来自于不理解上下文。分配给标量会产生标量上下文,因此 @_ 被评估为标量(产生长度)。
    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2017-11-24
    • 2018-12-07
    • 2020-07-19
    • 1970-01-01
    • 2012-08-22
    • 2013-04-16
    • 2011-07-26
    相关资源
    最近更新 更多