你可以用下面的代码来实现。
my @word = qw /STA_DATA1 STA_DT STR_DATE TMP_DTE VAL1/;
my @converted_word = map {/DT|DATE|DTE/ ? "char($_)" : $_} @word;
这将会读取@word数组的每个元素,并且如果元素包含DT或DATE或DTE它将与包装它“炭()”并将其放置在@converted_word阵列英寸否则它只会将字符串放入@converted_word数组中。
下面的代码示例来显示它的工作。
use strict;
use Data::Dumper;
my @word = qw /STA_DATA1 STA_DT STR_DATE TMP_DTE VAL1/;
my @converted_word = map {/DT|DATE|DTE/ ? "char($_)" : $_} @word;
print Dumper(\@word,\@converted_word);
输出
$VAR1 = [
'STA_DATA1',
'STA_DT',
'STR_DATE',
'TMP_DTE',
'VAL1'
];
$VAR2 = [
'STA_DATA1',
'char(STA_DT)',
'char(STR_DATE)',
'char(TMP_DTE)',
'VAL1'
];
for循环也可以工作。然而,问题说**执行任何数组元素具有替代作为DTorDATE或DTE应该被转换并保存在新的数组如下**。所以你应该更新for循环以将数据放入新数组中而不是更新现有数组中的数据。 –
你说得对。最简单的方法就是将数组复制到新数组并循环到新数组中。这就是'map'非常好的地方(在复制的时候进行修改)问题在于map对于某些人来说可能很难理解,使用'for'循环时,必须小心不要触及索引项。 –