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

时间:2018-01-04 17:40:19

标签: perl cgi require

我有两个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只应该被调用一次

1 个答案:

答案 0 :(得分:1)

如果 one.pl 不在CGI环境中

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

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

key=value格式非常重要。 local keyword确保@ARGV仅在块内设置,确保脚本的其他可能参数不会永久丢失,而是 two.pl 不可见。< / p>

如果 one.pl 在CGI环境中

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

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

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