3

可能是一个奇怪的问题,但请耐心等待(-:当 Perl 使用 'use' 加载模块时,这是一个编译时指令,假设这个模块在这个模块的任何地方都没有使用 'require',我可以启动一个脚本吗?哪个“使用”该模块,而脚本破坏了从硬盘驱动器中删除模块并确保模块全部加载到内存中?(可以调用它的所有方法等......)

谢谢,

4

2 回答 2

2

是的你可以。Perl 在运行之前将源代码编译成内部数据结构(解析树),并且在运行时它不适用于 .pm 文件。因此,在脚本编译并成功启动后,从磁盘中删除模块是安全的。

于 2012-05-23T08:08:06.593 回答
1

这适用于在启动时完全加载的简单模块。但是请注意,许多模块使用AUTOLOAD功能来延迟加载它们的重部分,直到真正需要某些特定功能。然后,这些模块可能会从几乎任何地方提取所需的源——按功能文件、它们自己的__DATA__部分等预先分割。尝试加载您已经删除的文件自然会失败。然而,访问 own__DATA__仍然可以工作(尽管我不能确定是因为它被加载到内存中还是因为 perl 持有脚本的打开句柄,防止它在完成之前完全消失)。

于 2012-05-23T09:48:47.583 回答