child 进程从 Perl 中的 parent 进程继承的模块
Modules inherited by child process from parent process in Perl
- 我正在将一个日志记录框架集成到我的 perl 项目中,该项目具有
大约 300 个 Perl 文件。
- 所以我写了一个模块
Logging.pm
覆盖了 die
,
say
, warn
功能,因为 print
不能被覆盖,所以我将它绑定到我的自定义句柄。
- 我有一个主脚本
execute.pl
,它通过system
/qx
/exec
. 执行所有脚本
- 我想将
Logging.pm
包括在 execute.pl
和所有
Logging.pm
的功能应该在 child 中可用
execute.pl 通过 system()
或 qx()
或
exec()
.
执行示例:
execute.pl -> system("test1.pl") -> system("test2.pl")
所以 test1.pl
和 test2.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";
- 我正在将一个日志记录框架集成到我的 perl 项目中,该项目具有 大约 300 个 Perl 文件。
- 所以我写了一个模块
Logging.pm
覆盖了die
,say
,warn
功能,因为print
不能被覆盖,所以我将它绑定到我的自定义句柄。 - 我有一个主脚本
execute.pl
,它通过system
/qx
/exec
. 执行所有脚本
- 我想将
Logging.pm
包括在execute.pl
和所有Logging.pm
的功能应该在 child 中可用 execute.pl 通过system()
或qx()
或exec()
.
执行示例:
execute.pl -> system("test1.pl") -> system("test2.pl")
所以 test1.pl
和 test2.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";