从一个 Perl 脚本调用另一个,传递一个 CGI 参数
Calling one Perl script from another, passing a CGI parameter
我有两个 Perl 脚本。我们称它们为 one.pl
和 two.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 中的代码重构到一个模块中,然后在两个脚本中使用它。
我有两个 Perl 脚本。我们称它们为 one.pl
和 two.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 中的代码重构到一个模块中,然后在两个脚本中使用它。