Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将哈希传递给Perl子例程?_Perl_Arrays_Hash_Reference_Arguments - Fatal编程技术网

如何将哈希传递给Perl子例程?

如何将哈希传递给Perl子例程?,perl,arrays,hash,reference,arguments,Perl,Arrays,Hash,Reference,Arguments,在我的一个主(或主)例程中,我有两个或更多的散列。我希望子例程foo()将这些可能的多个散列作为不同的散列接收。现在我没有偏好,如果他们去价值,或作为参考。在过去的几个小时里,我一直在努力解决这个问题,非常感谢您的帮助,这样我就不必把perl留给php了!(我正在使用mod_perl,或者将使用它) 现在我对我的要求有了一些答案,如图所示 从 我只想对其进行扩展,以便在dumpvals中可以执行以下操作: foreach my %k ( keys @_[0]) { # use $k an

在我的一个主(或主)例程中,我有两个或更多的散列。我希望子例程foo()将这些可能的多个散列作为不同的散列接收。现在我没有偏好,如果他们去价值,或作为参考。在过去的几个小时里,我一直在努力解决这个问题,非常感谢您的帮助,这样我就不必把perl留给php了!(我正在使用mod_perl,或者将使用它)

现在我对我的要求有了一些答案,如图所示

我只想对其进行扩展,以便在dumpvals中可以执行以下操作:

foreach my %k ( keys @_[0]) {
    # use $k and @_[0], and others
}
语法是错误的,但我想您可以看出我正在尝试获取第一个散列(hash1或h1)的键,并对它们进行迭代


如何在上面的后一个代码段中实现这一点?

我相信这就是您要寻找的:

sub dumpvals {
    foreach my $key (keys %{$_[0]}) {
        print "$key: $_[0]{$key}\n";
    }
}
  • 参数数组的一个元素是标量,因此可以作为
    $\u0]
    而不是
    @\u0]
    访问它

  • 键在散列上操作,而不是散列引用,因此您需要使用
    %

  • 当然,键是标量,不是散列,所以您使用的是
    my$key
    ,而不是
    my%key


要让
dumpvals
转储传递给它的所有哈希的内容,请使用

sub dumpvals {
  foreach my $h (@_) {
    foreach my $k (keys %$h) {
      print "$k: $h->{$k}\n";
    }
  }
}
在您的问题中调用时,其输出是

1: 2 3: 4 1: 7 3: 8 1: 5 3: 6 1: 2 3: 4 1: 7 3: 8 1: 5 3:6你应该总是有
严格使用;使用警告位于每个脚本和模块的顶部。
1: 2
3: 4
1: 7
3: 8
1: 5
3: 6