嗨我正在使用另一个不再在公司的人写的perl脚本.如果我将脚本作为独立运行,那么输出就像预期的那样.但是当我重复从另一个代码调用脚本时,输出错误,除了第一次.
我怀疑一些变量没有正确初始化.当它被称为独立时,每次退出时,所有变量值都初始化为默认值.但是当从另一个perl脚本调用时,模块和变量值可能会转移到下一次调用脚本.
在下次调用之前,有没有办法从内存中清除被调用的脚本?
我尝试启用警告,它抛出了1000行警告......!
编辑:我如何调用其他脚本:
代码如下所示:
do "processing.pl";
...
...
...
process(params); #A function in processing.pl
...
...
...
Run Code Online (Sandbox Code Playgroud)
fri*_*edo 11
如果要强制重新加载模块,请从中删除其条目%INC,然后重新加载.
例如:
sub reload_module {
delete $INC{'Your/Silly/Module.pm'};
require Your::Silly::Module;
Your::Silly::Module->import;
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果此模块依赖于正在设置的其他模块中的全局变量,则可能还需要重新加载这些模块.没有在代码中达到高峰就没有简单的方法可以知道.
嗨我正在使用另一个不再在公司的人写的perl脚本.我尝试启用警告,它抛出了1000行警告......!
那里有你的问题.脚本编写不正确,应该重写.
问自己这个问题:当你启用严格检查时,如果它有1000个警告,你怎么能确定它正在做正确的事情?你如何确定它不是破坏文件,破坏数据集,弄乱你的文件系统?有可能是故意或偶然地做所有这些事情.
我不相信运行由不再与公司合作的人编写的错误填写的脚本.我会重写它,并确保它正在做我需要它做的事情.
卸载模块比简单地删除模块的%INC条目更困难.看看CPAN 中的Class :: Unload.
如果您不想重写/修复脚本,我建议通过exec()或其变体之一调用脚本。虽然这样做不是很优雅,但它肯定会解决你的问题。