我有一个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循环调用这些脚本
答案 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
它会快一个数量级。