在脚本位于数组中的情况下,从Perl脚本调用Perl脚本

时间:2016-04-25 07:08:10

标签: perl

我有一个perl脚本列表,如sample_1.pl,sample_2.pl& sample_3.pl。存储在数组中

my @Scripts (
     sample_1 => "This is script number 1 ",
     sample_2 => "This is script number 2 ",
     sample_3 => "This is script number 3 "
)

现在如何使用foreach循环调用这些脚本

2 个答案:

答案 0 :(得分:4)

首先,您不清楚是否要将命令存储在数组或散列中。 Perl中的两个数据结构不同。在您的代码中,您将命令存储在数组(@Scripts)中,但您使用类似哈希的语法((key => value, ...))初始化该数组。你的语法会起作用,但它不会做你想做的事情(我想!)。你也最终得到了数组中的键,很难跳过它们。

如果要将命令存储在数组中,请执行以下操作:

my @Scripts = (
  "This is script number 1 ",
  "This is script number 2 ",
  "This is script number 3 "
);

system($_) for @Scripts;

如果由于某种原因想要将它们存储在哈希中,那么将它们存储在一个has中并使用哈希函数来获取所需的值。

my %Scripts = ( # %, not @ for a hash
  sample_1 => "This is script number 1 ",
  sample_2 => "This is script number 2 ",
  sample_3 => "This is script number 3 "
);

system($_) for values %Scripts;

但请注意,哈希是无序的,因此您无法控制执行命令的顺序。

答案 1 :(得分:2)

my @scripts = ("print 'Hello, omg'", "print 42");
eval $_ for @scripts

如果您打算在单个脚本运行中多次使用它们,则最好存储已编译的版本而不是源代码:

my @scripts = map eval "sub { $_ }", "print 'Hello, omg'", "print 42";
$_->() for @scripts

它会快一个数量级。