代码之家  ›  专栏  ›  技术社区  ›  JMac

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

  •  0
  • JMac  · 技术社区  · 7 年前

    我有两个Perl脚本。让我们给他们打电话 one.pl two.pl .

    一pl公司 处理一些数据并需要调用 二pl公司 ,传递变量。

    在里面 一pl公司 我可以

    require "two.pl"
    

    调用第二个脚本。

    这很好,但我想将一个CGI变量传递给 二pl公司 .

    有没有办法做到这一点而不重写 二pl公司 作为Perl模块?

    例如,我想要的是:

    一pl公司

    ...
    
    require "two.pl $number";
    

    二pl公司

    use CGI;
    
    my $cgi = new CGI;
    
    my $number = $cgi->param('number');
    
    ...
    

    编辑: 二pl公司 应该只调用一次

    1 回复  |  直到 7 年前
        1
  •  1
  •   simbabque    7 年前

    如果 一pl公司 不在CGI环境中

    如果您的 一pl公司 是一个shell脚本,可以设置 @ARGV 在调用之前 require . 这种滥用 CGI 的模式使用命令行参数。arg必须是与值相等的参数名称。

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

    这个 key=value 格式很重要。这个 local keyword 确保 @ARGV 仅在块内设置,以确保脚本的其他可能参数不会永久丢失,而是对 二pl公司 .

    如果 一pl公司 在CGI环境中

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

    请注意,对于这两种情况,您只能 要求 一次脚本。这就是 要求 . Perl跟踪已经加载的内容(在 %INC ). 如果你身处这样的环境 mod_perl ,或持久运行的现代Perl应用程序 do "two.pl" 相反,每次都会执行它。但如果 二pl公司 未设计为在同一进程中多次运行。

    最好的办法是重构内部代码 二pl公司 并在两个脚本中使用。