获取子例程内的数组内容的哈希值

时间:2014-05-08 10:43:07

标签: perl perl-data-structures

我有一个像这样的数组的哈希,我想在子程序中使用它。我通过引用这个子例程来传递它,如&sub(\%hash)和内部子我执行此print Dumper $_[0],这是我的输出:

$VAR1 = {
      'key1' => [
                              'value1',
                              'value2'
                            ],
      'key2' => [
                                          'foo',
                                          'bar'
                                        ]
    };

正确的方法是将所有数组值的内容放入子例程中的2个独立数组中,如下所示:

my @ones ; my @tows ;
print "@ones" ;
print "\n"; 
print "@tows";

在输出中得到这个

value1 foo
value2 bar

1 个答案:

答案 0 :(得分:3)

请勿使用&调用子例程。它会让你在某个时候感到困惑,而且近二十年来一直没有必要。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

my %hash = (
  key1 => [
    'value1',
    'value2'
  ],
  key2 => [
    'foo',
    'bar'
  ]
);

print_vals(\%hash);

sub print_vals {
  my ($hashref) = @_;

  # $hashref->{key1} is a reference to an array
  # therefore @{$hashref->{key1}} is an array
  my @arr1 = @{$hashref->{key1}};
  my @arr2 = @{$hashref->{key2}};

  # $#arr1 is the last index in @arr1
  for (0 .. $#arr1) {
    say "$arr1[$_] $arr2[$_]"
  }
}