我的主要perl项目有一系列需要调用其他perl脚本的require语句。主程序中的示例代码段:
#!/usr/bin/perl
require "./test1.pl";
require "./test2.pl";
require "./test3.pl";
require "./test4.pl";
如果我对test3.pl进行了更改,如何将其重新加载到内存中并将其更改反映到当前正在运行的项目实例中?目前,如果我对test3.pl进行了一些小改动,我必须重新启动整个项目。如果可能的话,我想把它放到子程序中。
谢谢。
答案 0 :(得分:5)
有两种方法可以从模块加载代码 - use
这样做是为了编译时间。
require
在运行时这样做。
执行此操作时,它包含%INC
中的模块。
如果您:
,您可以看到这种情况use Data::Dumper;
print Dumper \%INC;
所以重新加载 - 从%INC
删除它并重新运行require
。
delete ( $INC{'./test3.pl'} );
require './test3.pl';
您可能还会觉得有用:
no warnings 'redefine';
您可以使用它暂时关闭“子程序重新定义”警告。 (您正在使用strict
和warnings
吗?)
答案 1 :(得分:0)
您可以使用Module::Reload或again。但是,也许是时候重新考虑你的设计了。