Я не уверен, какова ваша цель, но есть несколько вещей, которые следует учитывать.
Во-первых, если вы собираетесь хранить массив, хотите ли вы сохранить ссылку на исходное значение иликопия оригинальных значений?В любом случае я предпочитаю избегать синтаксиса разыменования и использовать ссылки, когда могу:
$hash{key} = \@array; # just a reference
use Clone; # or a similar module
$hash{key} = clone( \@array );
Далее, вы хотите добавить к уже существующим значениям, даже если это одно значение?Если вы собираетесь иметь значения массива, я бы сделал все массивы значений, даже если у вас есть один элемент.Тогда вам не нужно решать, что делать, и вы удаляете особый случай:
$hash{key} = [] unless defined $hash{key};
push @{ $hash{key} }, @values;
Это может быть ваш ответ «наилучшей практики», который часто убирает столько особых случаев и лишних.логика по возможности.Когда я делаю подобные вещи в модуле, у меня обычно есть метод add_value
, который инкапсулирует это волшебство, где мне не нужно его видеть или вводить его более одного раза.
Если у вас уже естьнереферентное значение в хеш-ключе, это тоже легко исправить:
if( defined $hash{key} and ! ref $hash{key} ) {
$hash{key} = [ $hash{key} ];
}
Если у вас уже есть не-ссылочные значения, которые вы хотите видеть в массиве, вы делаете что-то подобное.Может быть, вы хотите, чтобы анонимный хеш был одним из элементов массива:
if( defined $hash{key} and ref $hash{key} eq ref {} ) {
$hash{key} = [ $hash{key} ];
}