我有两个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 脚本,则可以在调用之前将@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中的代码重构为模块,并在两个脚本中使用它。