URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9865
[ Назад ]

Исходное сообщение
"Perl, как правильно сделать '@EXPORT = имена из массива;'?"

Отправлено Asc , 28-Май-14 15:47 
Есть хеши: %en_US, %ru_RU. Делаю их экспорт. Простой вариант вот:

our @ISA = qw(Exporter);
our @EXPORT = qw(%en_US, %ru_RU, %pt_PT);


1 - Как можно более красиво/правильно/элегантно написать вот такое - экспортировать не прямо список, а на ходу список склеить из массива? Рабочий вариант вот, но режет глаз:


my @langsIdPool = ('%en_US', '%ru_RU');
our @ISA = qw(Exporter);
our @EXPORT = split(' ', join(" ", @langsIdPool));

2 - Вопрос аналогичный: можно ли элегантнее переписать вот это:


my @langsIdPool = ('%en_US', '%ru_RU');
map {
    my %hash = eval $_;
    Hash::Util::lock_hash_recurse( %hash);
} @langsIdPool;

3 - Супер вопрос: а как в модуле собрать в массив все имена хешей из этого модуля?

У меня есть некая задумка: есть модуль с хешами переводов ифейса на разные языки. И я хеши не только экспортирую, но и ещё, перед экспортом, делаю с каждым хешем несколько однотипных действий. Отсюда и вопросы.


Содержание

Сообщения в этом обсуждении
"Perl, как правильно сделать '@EXPORT = имена из массива;'?"
Отправлено XAnder , 28-Май-14 17:45 
Чую ошибки проектирования.


> our @EXPORT = qw(%en_US, %ru_RU, %pt_PT);

А если их будет штук двести, тоже все экспортировать? Не проще ли обойтись хешем, где ключи - коды языков, а значения - ссылки на ваши хеши? Тогда и остальные вопросы отпадут сами собой.


"Perl, как правильно сделать '@EXPORT = имена из массива;'?"
Отправлено Asc , 03-Июн-14 14:19 
> А если их будет штук двести, тоже все экспортировать?

А всё равно остаётся два места, где язык добавляется, удаляется. Т.е. хеш с именами=>ссылками-контентом и сами хеши с контентом . Всё равно два раза по "двести".


> Не проще ли обойтись хешем, где ключи - коды языков, а значения - ссылки
> на ваши хеши? Тогда и остальные вопросы отпадут сами собой.

Но, спасибо, хеш хешей более правильно, т.к. код из головного поста потребует фокусов с use strict.

P.S. Как в анекдоте, со временем я заметил, что "our @EXPORT = ..." - это массив, куда можно делать push() в разных местах. В т.ч. делая обход ключей (id языков) в, позднее предложенном, хеше хешей.