Получить хэш содержимого массивов внутри подпрограммы

У меня есть хэш массива, как этот, который я хочу использовать внутри подпрограммы. Я передаю это ссылкой на эту подпрограмму, как &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 ответ

Решение

Не вызывайте подпрограмму с &, Это просто смущает вас в какой-то момент и не было необходимости в течение почти двадцати лет.

#!/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[$_]"
  }
}
Другие вопросы по тегам