【问题标题】:Execute a perl script within a perl script with arguments在带有参数的 perl 脚本中执行 perl 脚本
【发布时间】:2015-03-15 15:25:45
【问题描述】:

当我尝试在我的 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 新手,希望有人能提供帮助。提前谢谢你。

【问题讨论】:

    标签: perl arguments


    【解决方案1】:

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

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

    您也可以将所有内容排列成一个数组并使用它:

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

    或者甚至将$^X 添加到@args。等等。

    【讨论】:

    • 能否请您也添加调用脚本的返回以捕获返回状态?
    • 我不确定你的意思。您可以通过my $rv = system(…);system 捕获返回值,这是微不足道且显而易见的,并且......您在寻求帮助后遇到的问题是什么? perldoc -f system 可以为您提供帮助。
    • perl 脚本“GetResults.pl”在完成后可能会返回一些内容。我想抓住那个回报。那么,$rv 将包含该 perl 脚本的返回值?
    • 是的 — 有关如何解释来自 system 语句/调用的返回值的指南,请参阅 perldoc -f system
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2018-09-18
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多