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

Calling one Perl script from another, passing a CGI parameter

我有两个 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 脚本,您可以在调用 require 之前设置 @ARGV。这会滥用 CGI 的模式来处理命令行参数。 arg 需要是参数名称等于值。

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

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

如果one.pl是在CGI环境下

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

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

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