使用参数在perl脚本中执行perl脚本

时间:2015-01-16 22:34:31

标签: perl arguments

当我尝试在perl脚本中执行perl脚本时遇到了问题。这是我正在开展的大型项目的一小部分。

以下是我的perl脚本代码:

use strict;
use warnings;
use FindBin qw($Bin);

#There are more options, but I just have one here for short example
print "Please enter template file name: "
my $template = <>;
chomp($template);

#Call another perl script which take in arguments
system($^X, "$Bin/GetResults.pl", "-templatefile $template");

“GetResults.pl”接受多个参数,我只提供一个参数。基本上,如果我单独使用GetResults.pl脚本,在命令行中我会输入:

perl GetResults.pl -templatefile template.xml

我遇到了上面系统函数调用的两个问题。首先,当我运行perl脚本时,它似乎删除了我的参数前面的破折号,导致GetResults.pl中的参数无效。

然后我尝试了这个

system($^X, "$Bin/GetResults.pl", "/\-/templatefile $template");

似乎没关系,因为它没有抱怨早期的问题,但是现在它说它找不到template.xml,尽管我的文件和perl脚本以及GetResults.pl脚本在同一个位置。如果我只是单独运行GetResults.pl脚本,它可以正常工作。

当我使用变量$ template和我的PC上的真实文件名(我使用的是Window 7)时,我想知道字符串比较是否存在问题。

我是Perl的新手,希望有人可以提供帮助。提前谢谢。

1 个答案:

答案 0 :(得分:4)

将参数作为数组传递,就像使用任何其他程序一样(Perl脚本不是特殊的;它是Perl脚本是一个实现细节):

system($^X, "$Bin/GetResults.pl", "-templatefile", "$template");

您可以在数组中排列所有内容并使用它:

my @args = ("$Bin/GetResults.pl", "-templatefile", "$template");
system($^X, @args);

甚至可以将$^X添加到@args。等