Perl脚本在更改磁盘代码时不更新



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

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

在我的test.pl中,我有以下语句

use mypackage;

现在,为什么当我在mypackage中进行更改时,这些更改在运行test.pl脚本时没有反映出来?

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

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

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


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

其中一个模块是模块::重新加载。它已经存在了一段时间,最近也发生了一些变化。它的另请参阅部分指向进一步的实现,即Module::Reload::Selective和again pragma。

这两种我都没用过,也不能说它们是否有效或如何发挥作用。

最新更新