Нет, это невозможно. Но это:
use strict;
use warnings;
use Symbol qw<qualify_to_ref>;
my $pakVar = 'pack_hash';
my $var1 = *{ qualify_to_ref( 'hashInfo', $pakVar ) }{HASH};
qualify_to_ref
берет имя переменной пакета и имя пакета и возвращает указатель ссылки GLOB , затем вы просто получаете доступ к слоту HASH GLOB. Вы также можете сделать это следующим образом:
my $var1 = \%{ qualify_to_ref( 'hashInfo', $pakVar ) };
Но так же легко отключить strict
в очень узком do
;
my $var1
= do {
no strict;
\%{ $pakVar . '::hashInfo' };
};
Я понимаю, что некоторые культуры кодирования считают отключение strict
или warnings
"обманом". Я знаю, что у меня были вопросы о проверке кода на отключение одного класса предупреждений в таком маленьком блоке, как этот. Я знал, какие предупреждения я собирался получить, поэтому мне это не нужно. Рецензент не видел это таким образом.
По этой причине некоторые опытные сотрудники ничего не думают о строгом отключении. Но если вы не можете, потому что это делает местных жителей беспокойными - вы можете использовать Symbol
. Однако в некоторых магазинах действуют правила против переменных пакета, поэтому это никогда не становится проблемой.