当我尝试在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的新手,希望有人可以提供帮助。提前谢谢。
答案 0 :(得分:4)
将参数作为数组传递,就像使用任何其他程序一样(Perl脚本不是特殊的;它是Perl脚本是一个实现细节):
system($^X, "$Bin/GetResults.pl", "-templatefile", "$template");
您可以在数组中排列所有内容并使用它:
my @args = ("$Bin/GetResults.pl", "-templatefile", "$template");
system($^X, @args);
甚至可以将$^X
添加到@args
。等