【发布时间】:2020-03-03 02:31:43
【问题描述】:
在 Perl 中,以下代码非常常见。你甚至可以在constant.pm 之类的地方看到它。
my $symtab;
{
no strict 'refs';
$symtab = \%{$pkg . '::'};
}
如果我只是删除严格,我得到
在使用“严格引用”时不能使用字符串 (
main::) 作为 HASH 引用
有没有可能在不关闭strict的情况下做到这一点?
【问题讨论】:
-
嗯,你必须做到这一点没有严格。你的意思是我为什么要严格?因为我想我喜欢严格,我需要访问符号表,我只是想知道是否有一种不那么 hacky 的方法来做到这一点?
-
在我看来,在一个小的词法范围内禁用
strict是完全正确的做法。它是为了阻止你做这些事情,所以明确禁用这部分严格政策是支持这一点的,并告诉代码的读者你知道你在做什么。 -
您当然可以使用 XS 代码来实现。也许有一个基于
B的解决方案也可以在strict下运行。