Хэш-элемент массива массивов - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу, чтобы "testhash" был хешем, с ключом "hashelm", который содержит массив или массив.

Я делаю это:

$testhash{hashelm}=(
        ["1A","1B"],
        ["2A","2B"]
);

print Dumper(%testhash);

Но яполучить это как вывод:

$VAR1 = 'hashelm';
$VAR2 = [
          '2A',
          '2B'
        ];

Я бы ожидал что-то вроде:

$VAR1 = 
   hashlelm => (
        [
          '1A',
          '1B'
        ];
        [
          '2A',
          '2B'
        ];
   )

Чего мне не хватает ??Я использую Perl в течение лет , и это действительно меня озадачило !!!

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Хэши могут хранить только скалярные значения;(["1A", "1B"], ["2A", "2B"]) является значением списка.При оценке в этом скалярном контексте вы получите только последний элемент в списке, а именно ["2A", "2B"].Вам необходимо сохранить ссылку на значение списка в хэше:

$testhash{hashelm} = [ ["1A","1B"], ["2A","2B"] ];

Подробнее о документации по perl конструкторы значений списка .

5 голосов
/ 23 февраля 2012

Это будет работать:

$testhash{hashelm}=[
        ["1A","1B"],
        ["2A","2B"]
];

Вы должны использовать квадратные скобки для анонимного массива.

...