child 进程从 Perl 中的 parent 进程继承的模块

Modules inherited by child process from parent process in Perl

执行示例:

execute.pl -> system("test1.pl") -> system("test2.pl")

所以 test1.pltest2.pl 应该选择被覆盖的 die/warn/say/print 如果我只是在 excute.pl.

中包含 Logging.pm

据我所知,system/qx/exec 将被 OS 调用,而 Logging.pm 在 child 过程中将不可用,有什么方法可以实现这个因为我不想编辑 300 个文件?

由于子进程是完全独立的进程,因此它们不会保留父进程加载的任何模块。

解决此问题的一种可能性是设置 PERL5OPT 环境变量。这个变量可以为 Perl 解释器保存额外的命令行标志。但是,这将影响所有由您的脚本直接或间接启动的 Perl 进程,而不仅仅是那些属于您项目的脚本。

要自动 use Logging,您需要将 -MLogging 添加到 PERL5OPT。在 shell:

$ export PERL5OPT="$PERL5OPT -MLogging"
$ ./execute.pl

$ PERL5OPT="$PERL5OPT -MLogging" ./execute.pl

或在execute.pl内:

$ENV{PERL5OPT} .= " -MLogging";