我想弄清楚是否可以动态创建一个 Perl 包,所以我写了一个简单的测试程序。
eval "package foobar;";
$foobar::baz = 4;
print $foobar::baz;
程序打印4
。然后我试了一下
use strict;
use warnings FATAL => 'all';
eval "package foobar;";
$foobar::baz = 4;
print $foobar::baz;
程序没有崩溃也没有被拒绝(并且仍然打印 4
),尽管 foobar
包直到运行时才知道存在.
然后我试了一下
use strict;
use warnings FATAL => 'all';
$foobar::baz = 4;
print $foobar::baz;
并且 Perl 仍然愉快地打印 4
我现在彻底糊涂了。我一直认为包必须明确创建,而不是突然出现。它们究竟是如何工作的?当一个包被“使用”而不是通过 package
被“声明”时,是否有 pragma 可以发出警告?
最佳答案
从某种意义上说,包只不过是恰好是符号表的散列中的键。在示例代码中设置 $foobar::baz
后,您可以通过检查散列 %foobar::
来查看这一点。之后,您可以开始查看 %::
。通过直接弄乱符号表,可以做一些有趣的(以及难以理解和调试的)事情。
要阅读所有这些的文档页面是 perlmod
。
关于perl - perl 包是自动生成的吗?它们究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34505847/