更改磁盘代码后,Perl脚本不更新

时间:2019-02-07 11:39:10

标签: perl

我有一个名为mypackage.pm的perl软件包(我在磁盘上)

我有一个名为test.pl的脚本

在我的test.pl中,我有以下声明

use mypackage;

现在,为什么在我的程序包内部进行更改时,运行test.pl脚本时这些更改没有反映出来?

1 个答案:

答案 0 :(得分:2)

否。

启动Perl程序时,perl编译器将从磁盘读取该程序中引用的所有模块,对其进行编译并将结果操作码存储在内存中。它还会记住它已经读取了哪些文件(在%INC中),因此不会再次读取它们。

读取这些文件的时间与 有所不同,但是在这里它们可能并不重要。如果您use一个模块,则它将在编译时加载,就像程序启动时一样。如果您require一个模块,则该模块可以位于条件语句中,并且在运行时执行该代码时将读取文件。可能是在程序启动时,或者是稍后启动,甚至从未启动。然后,Perl切换回该文件的编译时进行编译,然后返回运行时。

如果您想重新读取所使用的模块,通常必须重新启动程序。


话虽如此,有些黑魔法实现使您可以重新加载磁盘上已更改的模块。除非您要构建一个具有疯狂启动时间和高吞吐量的守护程序,否则可能不需要使用它。

这些模块之一是Module::Reload。它已经存在了一段时间,最近又发生了一些变化。其“另请参见”部分指向进一步的实现,即Module::Reload::Selectiveagain编译指示。

我都没有用过,也不能说它们是否有效或如何工作。