子进程从Perl中的父进程继承的模块

时间:2017-10-04 09:22:08

标签: perl exec child-process qx

  • 我正在将日志框架集成到我的perl项目中 大约300个Perl文件。
  • 所以我写了一个模块Logging.pm,它覆盖了diesaywarn功能以及由于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.pldie/warn/say/print如果我在Logging.pm中加入excute.pl,则会选择被覆盖的system/qx/exec

据我所知,Logging.pm将是OS调用而<tag class="">将无法在子进程中使用,有什么方法可以实现这一点,因为我不想编辑300个文件?

1 个答案:

答案 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";
相关问题