Первоначально я разместил это в другом вопросе, а затем кто-то указал на это как на «связанный пост», поэтому я размещу его здесь, чтобы высказать свое мнение по этому вопросу, предполагая, что люди столкнутся с этим в будущем.
Я собираюсь опровергнуть принятый ответ и сказать, что я предпочитаю, чтобы мои данные возвращались в виде простого хэша (ну, в виде списка равного размера, который, вероятно, будет интерпретирован как хеш). Я работаю в среде, где мы, как правило, делаем такие вещи, как следующий фрагмент кода, и гораздо проще комбинировать, сортировать, нарезать и нарезать кубиками, когда вам не нужно разыменовывать все остальные строки. (Также приятно знать, что кто-то не может повредить ваш hashref, потому что вы передали все по значению - хотя кто-то указал, что если ваш хеш содержит больше, чем простые скаляры, это не так просто.)
my %filtered_config_slice =
hashgrep { $a !~ /^apparent_/ && defined $b } (
map { $_->build_config_slice(%some_params, some_other => 'param') }
($self->partial_config_strategies, $other_config_strategy)
);
Это приблизительно соответствует тому, что может делать мой код: создавать конфигурацию для объекта на основе различных объектов стратегии конфигурации (некоторые из которых объект знает изначально, плюс некоторый дополнительный парень), а затем отфильтровывает некоторые из них как несущественные.
(Да, у нас есть хорошие инструменты, такие как hashgrep
, hashmap
и lkeys
, которые делают полезные вещи с хешами. $ A и $ b устанавливаются на ключ и значение каждого элемента в списке соответственно). (Да, у нас есть люди, которые могут программировать на этом уровне. Наем - это неприятно, но у нас есть качественный продукт.)
Если вы не собираетесь делать что-то похожее на функциональное программирование, подобное этому, или если вам нужна более высокая производительность (вы профилировали?), Тогда, конечно, используйте hashrefs.
person
Community
schedule
06.01.2010