可能是一个奇怪的问题,但请忍受我( - : 当Perl使用'use'加载模块时,这是一个编译时指令,假设这个模块在这个模块中的任何地方都没有使用'require',我可以启动一个'使用'该模块的脚本,当脚本遗址擦除时来自硬盘的模块,并确保模块全部加载到内存中? (可以调用它的所有方法......)
谢谢,
答案 0 :(得分:2)
是的,你可以。 Perl在运行之前将源代码编译为内部数据结构(parse tree),并且在运行时它不能与.pm文件一起使用。因此,在编译并成功启动脚本后,从磁盘中删除模块是安全的。
答案 1 :(得分:1)
这适用于在启动时完全加载的简单模块。但请注意,许多模块使用AUTOLOAD
功能来推迟加载重型部件,直到确实需要某些特定功能。然后,这些模块可以从几乎任何地方拉出所需的源 - 按功能文件预分割,自己的__DATA__
部分等。自然地尝试加载已经删除的文件将失败。然而,访问自己的__DATA__
仍然可以工作(虽然我不能肯定是因为它是在内存中加载还是因为perl保持脚本的开放句柄,防止它在完成之前完全消失)。