我有两个Perl脚本。我们称他们为one.pl
和two.pl
。
one.pl
处理一些数据,需要调用two.pl
,传递变量。
在one.pl
我可以
require "two.pl"
调用第二个脚本。
工作正常,但我想将CGI变量传递给two.pl
。
有没有办法在不重写two.pl
作为Perl模块的情况下执行此操作?
例如我想要的是:
...
require "two.pl $number";
use CGI;
my $cgi = new CGI;
my $number = $cgi->param('number');
...
编辑: two.pl
只应该被调用一次
答案 0 :(得分:1)
如果您的 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>
请注意,对于这两种情况,您只能require
一次脚本。这就是require
的想法。 Perl会跟踪它已经加载的内容(在%INC
中)。如果您处于mod_perl
之类的环境或持久运行的现代Perl应用程序中,则应使用do "two.pl"
代替,每次都会执行它。但是,如果 two.pl 不是设计为在同一进程中多次运行,则可能会破坏其他内容。
最好的办法是将 two.pl 中的代码重构为一个模块,然后在两个脚本中使用它。