Как вставить значение в хэш-массив Perl? - PullRequest
13 голосов
/ 23 сентября 2010
%TEST ; 

... 
for  {
   sub atest
   }
 sub atest {
 ...
    push $TEST { TEST1 }[0] = "some value " 
}

Как мне вставить значения в хэш массивов, ничего не зная об индексе?

Как мне этого добиться?

Ответы [ 3 ]

34 голосов
/ 23 сентября 2010

Это добавит значение в конец массива, сохраненного в хэше с помощью ключа "TEST1".

push( @{ $TEST { TEST1 } }, "some value "); 

Я использовал @{...} для разыменования ссылки на массив. Perl автоматически создает внутреннюю ссылку на массив.

8 голосов
/ 23 сентября 2010

Функция push принимает массив, поэтому вы должны вернуть его обратно в массив:

push @{$TEST{TEST1}}, "some value";

Кроме того, ваш стиль заставляет меня думать, что вы не используете прагму strict. Лучший способ написать этот код:

#!/usr/bin/perl

use strict;
use warnings;

sub atest {
    my $test = shift;
    push @{$test->{TEST1}}, "some value";
}

my %test;
atest(\%test);

use Data::Dumper;

print Dumper \%test;
1 голос
/ 23 сентября 2010

Я думаю, что вы хотите:

%TEST;
$TEST{TEST1}[0] = "some value"
push @{ $TEST{TEST1} }, "some other value"

Теперь, $ TEST {TEST1} должен быть эквивалентен ["some value", "some other value"].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...