对数组的每个元素应用替换

时间:2018-03-12 09:47:54

标签: arrays regex perl

我有一个文件名数组。名称的格式为company_ID_timestamp。 如何在不运行循环的情况下在阵列上应用替换?

for ( my $i=0; $i < scalar @todayFiles; $i++ ) {
    $todayFiles[$i] = s/_20[0-9]{10}//;
}

2 个答案:

答案 0 :(得分:3)

除非你想要一个丑陋的黑客,否则你会想要某种循环,即使它隐藏了mapfor statement modifier

s/_20[0-9]{10}// for @todayFiles;

以下适用于Perl v5.14及更高版本(因为/r modifier)。如果您不想修改原始数组,那么这个有意义:

my @otherArray = map { s/_20[0-9]{10}//r } @todayFiles;

这是一个更短/更好的方式来编写你展示的C风格循环:

for my $filename (@todayFiles) {
    $filename =~ s/_20[0-9]{10}//;
}

后一个可行,因为for aka foreach循环实际上将变量$filename别名化为正在迭代的数组的元素。

答案 1 :(得分:0)

要将替换应用于数组的每个元素,除了迭代这些元素

之外别无他法

也就是说,通过使用for作为语句修饰符并使用$_默认变量

,您可以大量整理代码
s/_20[0-9]{10}// for @todayFiles;

这仍然遍及整个数组,但代码更紧凑