Цикл по массиву, полученному из хеш-таблицы - PullRequest
1 голос
/ 28 марта 2012

У меня есть хеш-таблица со следующим содержимым:

my %hash = (
  'a' => 1,
  'b' => 2,
  'c' => [3, 4, 5],
);

А позже я добавляю $hash{'c'} в @array_c как часть функции извлечения, такой как:

sub getVar {
  my $id = shift;
  return $hash{$id};
}

my @array_c = getVar('c');

Затем позже я пытаюсь перебрать @array_c и напечатать каждую строку:

foreach (@array_c){
  print "$_";
}

Однако вместо желаемого результата 345 я получаю ARRAY(0x100804ed0)

Пожалуйста, помогите: D

EDIT:

Если я сделаю print @array_c[0]->[0], тогда я получу 3, так что, думаю, я немного запутался, как мне удалось создать вложенный массив.

РЕШИТЬ:

Пошёл с отсылкой массива:

my @array_c = @{getVar('c')};

Ответы [ 4 ]

2 голосов
/ 28 марта 2012

sub getVar возвращает ссылку на массив, просто разыменуйте его:

my @array_c = @{getVar('c')};

или изменить саб:

sub getVar {
  my $id = shift;
  return @{$hash{$id}};
}
1 голос
/ 28 марта 2012

Просто используйте ссылку на массив в качестве ссылки:

my $array_c = getVar('c');
...
foreach (@$array_c){
    print "$_";
}

Или разыменуйте ссылку на массив, сохраненную в хэше, либо в getVar:

sub getVar {
    my $id = shift;
    return @{ $hash{$id} };
}

, либо в его вызывающей стороне:

my @array_c = @{ getVar('c') };
1 голос
/ 28 марта 2012

[3, 4, 5] - это ссылка на массив, а не массив.Измените ваш код соответственно:

my $c_arrayref = getVar('c');

foreach (@{ $c_arrayref }) {

Чтение perlreftut и perlref .

0 голосов
/ 28 марта 2012

Многоцелевой возврат для вашего getVar

return wantarray ? map { ref() eq 'ARRAY' ? @$_ : $_ } $hash{ $id }
     :             $hash{ $id }
     ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...