如果脚本位于数组中,则从Perl脚本调用Perl脚本

如果脚本位于数组中,则从Perl脚本调用Perl脚本,perl,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循环调用这些脚本 my @scrip

我有一个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循环调用这些脚本

my @scripts = ("print 'Hello, omg'", "print 42");
eval $_ for @scripts
如果您打算在单个脚本运行中多次使用它们,则最好存储编译版本,而不是源代码:

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

它会快一个数量级。

首先,不清楚是要将命令存储在数组中还是散列中。这两种数据结构在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;

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

调用这些脚本是什么意思?您可以使用use$file在foreach循环中包含它,并调用这些文件的子例程。use在
my@Scripts
之后缺少一个
=
。另外,为什么需要这些值(“这是脚本编号…”)?该代码看起来像是分配给数组的哈希文字。它将为数组
@Scripts
分配六个字符串元素。虽然它是有效的Perl,但它可能不是您的意思,而且很难说出您的真正意思。请帮助我们,我不知道这有什么帮助。从这个问题来看,我认为OP更可能打算将
system$\uu用于map“$\uu.pl”,键%Scripts
。无论哪种方式,当需要更多信息时,你都会给出一个推测性的答案,大概是希望获得农业点。我希望人们不要这样做。我的答案肯定不是为了收集积分而发布的。我有很多要点,我真的不需要了。我认为我的答案值得发布有两个原因——首先,澄清数组和散列之间的混淆很重要,其次,它演示了
system()
的使用,这将是这个问题任何答案的核心。的确,我们需要数组(或散列)内容的更多细节才能给出真正准确的答案,但我认为我的答案与我们目前掌握的信息非常接近。很抱歉你不同意。