perl - 如何强制卸载 Perl 模块?

标签 perl module

嗨,我正在使用由不再在公司的另一个人编写的 perl 脚本。
如果我单独运行脚本,则输出符合预期。但是当我从另一个代码重复调用脚本时,除了第一次之外,输出都是错误的。

我怀疑有些变量没有正确初始化。当它被独立调用时,每次它退出并且所有变量值都被初始化为默认值。但是当从另一个 perl 脚本调用时,模块和变量值可能会被转移到脚本的下一次调用。
有没有办法在我下次调用它之前从内存中清除被调用的脚本?

我尝试启用警告,它抛出了 1000 行警告......!

编辑:我如何调用另一个脚本:

代码如下所示:

do "processing.pl";
...
...
...

process(params); #A function in processing.pl
...
...
...

最佳答案

如果要强制重新加载模块,请从 %INC 中删除其条目。然后重新加载它。

例如:

sub reload_module { 
    delete $INC{'Your/Silly/Module.pm'};
    require Your::Silly::Module;
    Your::Silly::Module->import;
}

请注意,如果此模块依赖于正在设置的其他模块中的全局变量,则可能还需要重新加载这些全局变量。如果不看代码,就没有简单的方法可以知道。

关于perl - 如何强制卸载 Perl 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1222143/

相关文章:

html - 如何格式化 Multimarkdown 表格?

perl - Perl 如何解析打印 ""。 ($x, $y) ."\n"?

Perl:检查套接字选项的存在

regex - perl 正则表达式查找并替换为 bash 中的变量

regex - 在正则表达式中重用后向字符进行多次连续替换

python - 有哪些 Pythonic 方式可以与模块中定义的对象共享变量?

javascript - 如何在运行时重新加载 ES6 模块?

linux - Sugarcrm 模块加载器扫描包错误

java - 为什么 getClass().getName() 对未打开的模块类起作用?

python - 如何使用 python 模块的多个 git 分支?