Пытаясь сгруппировать экспорт моего модуля, используя теги, я хочу избежать перечисления имен более одного раза, поэтому я попробовал это:
our %EXPORT_TAGS = (
'command_types' => [qw(ENQ ACK NAK)],
'commands' => [qw(A B C)],
'status_codes' => [qw(OK FAILED)],
'default' => [
qw(:status_codes :command_types :status_codes)
]);
our @EXPORT = @{$EXPORT_TAGS{':default'}};
our @EXPORT_OK = @{$EXPORT_TAGS{':default'}};
Но, к сожалению, Perl 5.18 говорит мне что-то о неопределенной ссылке на массив для @{$EXPORT_TAGS{':default'}}
(" Невозможно использовать неопределенное значение в качестве ссылки на массив ..."). Однако, когда я удаляю внешний @{...}
, Perl больше не жалуется, но результат (ссылка на массив вместо массива) неверен.
Что я пропустил?
Обновление:
Когда я удаляю двоеточия из :default
, сообщение об ошибке исчезает, но затем я получаю сообщение об ошибке Can't export symbol: :command_types
. Если я удаляю двоеточие из :command_types
, я больше не получаю сообщение об ошибке (на данный момент), но не попытается ли это экспортировать символ с именем command_types
вместо всех символов для тега command_types
Эффективный результат равен @EXPORT = qw(status_codes command_types status_codes)
.