我有一个文件名数组。名称的格式为company_ID_timestamp
。
如何在不运行循环的情况下在阵列上应用替换?
for ( my $i=0; $i < scalar @todayFiles; $i++ ) {
$todayFiles[$i] = s/_20[0-9]{10}//;
}
答案 0 :(得分:3)
除非你想要一个丑陋的黑客,否则你会想要某种循环,即使它隐藏了map
或for
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;
这仍然遍及整个数组,但代码更紧凑