在Perl中用逗号分隔的列表替换字符串的一部分

mar*_*son 4 string perl

如果我有逗号分隔的长度为10号的字符串(的文件0001010101为例),并想重新格式化字符串每个字符串的最后两个字符为字母,其中替代01A,并依此类推,直到26Z什么拍的方式做在Perl?

示例文件内容:

0109150103,1807111225,0305102306
Run Code Online (Sandbox Code Playgroud)

输出将是:

01091501C,18071112Y,03051023F
Run Code Online (Sandbox Code Playgroud)

假设我将字符串拆分为数组,然后评估每个数字以查看带有substr的最后2位数字并替换为相应的字母.想知道什么是最有效的方法来做这个副看看是否01然后设置A,等等.

我会做的蛮力方式如下:

$data=<file.txt>;
@tokens=split /,/,$data;
while(@tokens)
{
 print substr($_,0,7)."A," if(substr($_,8,2)=='01');
 print substr($_,0,7)."B," if(substr($_,8,2)=='02');
#.
#.
 print substr($_,0,7)."Z," if(substr($_,8,2)=='26');
}
Run Code Online (Sandbox Code Playgroud)

zdi*_*dim 7

可以用chr

echo "0109150103,1807111225,0305102306" | 
    perl -wnE'@t = split /,/; s/(..)$/chr(64+$1)/e for @t; say for @t'
Run Code Online (Sandbox Code Playgroud)

其中/e改性剂使得在正则表达式的更换部件作为代码进行评价.