Скрывать тот факт, что вы делаете что-то, что не является строго безопасным, если вы находите способ делать это со строгим включением, только обманывает себя и своих читателей. И это плохая идея.
Прежде всего, это не очень распространено. Это сделано несколькими низкоуровневыми модулями. Обычный программист Perl никогда не будет манипулировать таблицей символов напрямую.
И да, это можно сделать без отключения strict
. Таблица символов доступна через %::
, так что вы можете проанализировать пакет и таким образом перемещаться по таблице символов. Например, \%{'Foo::Bar::'}
становится \%{ $::{"Foo::"}{"Bar::"} }
, хотя это предполагает существование пакета. Вы также можете сгенерировать Perl-код и использовать eval
.
НО, нет причин делать это. Нужно включить строгое, чтобы предотвратить случайное поступление. Замаскирование того факта, что вы делаете что-то, что не является строго безопасным, обманывает только вас и ваших читателей. И это плохая идея. Нужно стремиться написать самодокументированный код, и ничто не говорит «это сложный, опасный код», такой как no strict 'refs';
.