从Perl传递Args到子脚本

时间:2017-02-10 15:34:30

标签: perl arguments parent-child

我有一个perl脚本,我在其中使用它作为包装器。 perl脚本从用户收集参数,然后使用参数作为数组调用子脚本。

我遇到的问题是,当执行子脚本时,所有参数都在ARGV [1]中。我可以使用一些特殊的分隔符吗?我真的不想在子脚本中循环一个数组;有点打败了目的。

[KSH脚本]

Your Args
ARG1: foo bar
ARG2:

然而,我期待的结果是

Your Args
ARG1: foo
ARG2: bar

我已将参数推入数组并将参数作为数组提供。

[Perl Script]

 print "Enter $arg_array[$i]: ";
 my $value = <STDIN>;
 chomp $value;
 if (defined $value) {
     push (@arg_entry, "$value"); #create args array to pass to selectd script

  }
  .... sometime later, in another function ......

  system("$select_script", "@arg_entry");

1 个答案:

答案 0 :(得分:2)

使用system传递单个字符串,将使用shell进行解释(并遵循空格分隔参数):

system 'command arg1 arg2';

或者您使用多个参数,就像您一样。在这种情况下,第一个参数是程序,以下每个参数都是一个参数。

system 'command', 'arg1', 'arg2';

所以,既然你通过在字符串中插入它们来加入所有的参数(用“@arg_entry”),那么它们就是一个。解决方案很简单,只是不进行插值,它们将在参数列表中正常插入。

system 'command', @args;
system($select_script, @arg_entry);