Это не точно ваш вопрос, но ... если вы на самом деле строите структуру данных таким образом, вы можете рассмотреть более чистый «литерал» синтаксиса:
#!/usr/bin/perl
use strict;
use warnings;
my %VAR = (
SCALAR => 'test scalar',
ARRAY => [
'test array',
],
HASH => {
NAME => [
'test hash array 1',
'test hash array 2',
{
SOMEHASH => 'test hash array hash 1',
ANOTHERHASH => 'test hash array hash 2',
},
],
},
);
Основные две причины - читаемость и ошибки autovivification. Это не неправильно Perl, но это может привести к проблемам труднодоступных отладки, например, случайно набрав:
$VAR{HASH}{NAME}[1] = "test hash array 1";
$VAR{HASH}{NAME}[2] = "test hash array 2";
$VAR{HASH}{NAME}[2] = "test hash array 3";
$VAR{HASH}{NAME}[4] = "test hash array 4";
вместо
$VAR{HASH}{NAME}[1] = "test hash array 1";
$VAR{HASH}{NAME}[2] = "test hash array 2";
$VAR{HASH}{NAME}[3] = "test hash array 3";
$VAR{HASH}{NAME}[4] = "test hash array 4";
Какие не может быть проблемой, если вы используете
$VAR{HASH}{NAME} = [
undef,
'test hash array 1',
'test hash array 2',
'test hash array 3',
'test hash array 4',
];
Что происходит, когда вы запускаете его с помощью 'use strict; использовать предупреждения; – Ether
У вас есть пример этих проблем со значениями, исчезающими, о которых вы упоминаете? – CanSpice
Если структура лучше всего представляет ваши данные, и она работает, то почему бы и нет? (Мне, похоже, не нравится, как крик ко мне.) Поскольку это, очевидно, тестовые данные, мы никак не можем помочь вам в том, хорошо ли это подходит для * ваших * данных. Итак, вы должны быть судьей. – Axeman