Logging.pm
,它覆盖了die
,
say
,warn
功能以及由于print
无法覆盖,我将其与自定义句柄捆绑在一起。execute.pl
,它通过system
/ qx
/ exec
执行所有脚本。Logging.pm
和所有的execute.pl
中加入Logging.pm
应在儿童中提供system()
的功能
由execute.pl通过qx()
或exec()
执行的流程
execute.pl -> system("test1.pl") -> system("test2.pl")
。执行示例:
test1.pl
因此,test2.pl
和die/warn/say/print
如果我在Logging.pm
中加入excute.pl
,则会选择被覆盖的system/qx/exec
。
据我所知,Logging.pm
将是OS调用而<tag class="">
将无法在子进程中使用,有什么方法可以实现这一点,因为我不想编辑300个文件?
答案 0 :(得分:2)
由于子流程完全是独立的流程,因此它们不会保留父流程加载的任何模块。
解决此问题的一种可能性是设置PERL5OPT
环境变量。此变量可以为Perl解释器保存额外的命令行标志。但是,这将影响脚本直接或间接启动的所有Perl进程,而不仅仅是那些属于项目的脚本。
要自动use Logging
,您需要将-MLogging
添加到PERL5OPT
。在shell中:
$ export PERL5OPT="$PERL5OPT -MLogging"
$ ./execute.pl
或
$ PERL5OPT="$PERL5OPT -MLogging" ./execute.pl
或execute.pl
内:
$ENV{PERL5OPT} .= " -MLogging";