从一个 Perl 脚本调用另一个 Perl 脚本,传递一个 CGI 参数



我有两个Perl脚本。让我们称它们为one.pltwo.pl.

one.pl处理一些数据,需要调用two.pl,传递一个变量。

one.pl我可以

require "two.pl"

以调用第二个脚本。

这工作正常,但我想将 CGI 变量传递给two.pl.

有没有办法在不将two.pl重写为 Perl 模块的情况下做到这一点?

例如,我想要的是:

one.pl

...
require "two.pl $number";

two.pl

use CGI;
my $cgi = new CGI;
my $number = $cgi->param('number');
...

编辑:two.pl应该只调用一次

如果one.pl不在 CGI 环境中

如果您的one.pl是 shell 脚本,则可以在调用之前将@ARGV设置为require。这滥用了 CGI 的模式来处理命令行参数。arg 必须是等于值的参数名称。

{
my $number = 5;
local @ARGV = ( "number=$number" );
require "two.pl";
}

key=value格式很重要。local关键字确保仅在块内设置@ARGV,确保脚本的其他可能参数不会永久丢失,而是对two.pl不可见。

如果one.pl在 CGI 环境中

  • 如果参数已经存在,则无需执行任何操作。
  • 否则,请参阅上文。

请注意,对于这两个,您只能require一次脚本。这就是require的想法.Perl 会跟踪它已经加载的内容(在%INC年)。如果你在像mod_perl这样的环境中,或者一个持久运行的现代 Perl 应用程序,你应该改用do "two.pl",它每次都会执行它。但是,如果 two.pl不是设计为在同一进程中多次运行,这可能会破坏其他事情。

最好的办法是将two.pl中的代码重构为模块,并在两个脚本中使用它。

最新更新