perl:运行另一个没有exec / system的脚本

时间:2013-05-03 10:32:01

标签: perl

是否可以包含/获取另一个perl脚本,或将其作为“sub”启动? 这有效,但看起来很难看:

test2.pl:

print "I'm in test2.pl; args: @ARGV\n";

test.pl:

#!/usr/bin/perl

use File::Temp qw/tempdir/;
use File::Copy qw/copy/;

my $tmplib;

use lib ($tmplib = tempdir()) . (
  copy("./test2.pl", "$tmplib/test2.pm") ? "" : (die "$!")
  );

use test2;

X

$ ./test.pl a b c
I'm in test2.pl; args: a b c

2 个答案:

答案 0 :(得分:5)

听起来你想要do operator,虽然听起来也很糟糕。

这就是文档所说的内容。

do EXPR Uses the value of EXPR as a filename and executes the contents
        of the file as a Perl script.
            do 'stat.pl';

        is just like

            eval `cat stat.pl`;

答案 1 :(得分:1)

您可以使用do在同一个解释器中运行另一个Perl脚本:

do 'test2.pl';

这将重用外部脚本中的命令行参数。要传递不同的参数,您可以在本地覆盖@ARGV,例如:

{
    local @ARGV = qw(par1 par2 par3);
    do 'test2.pl';
}