perl 将数字替换为字母,与 for 一起使用

标签 perl substitution

Perl 将所有数字替换为字母

abc4xyz5u

abcdxyzeu

我尝试了这个,但它不起作用:

echo 'abc4xyz5u' | perl -pe'@n=1..9;@a=a..j;@h{@n}=@a;s#$n[$_]#$h{$&}#g for 0..$#n'

我知道 y/[1-9]/[a-j]/,但我想使用替代品。

最佳答案

您的问题在

之内
s#$n[$_]#$h{$&}#g for 0..$#n

您期望 $_ 作为您的输入(以便将 s### 应用到其上),但也 $n[$_] 使用 for 循环中的 $_(0$#n)。如果您要添加打印,您会注意到此循环中 $_ 的值是 0$#n,而不是比你的输入。

您可以采取以下措施来修复它:

$r=$_; $r=~s#$n[$_]#$h{$&}#g for 0..$#n; $_=$r

但这比实际情况要复杂得多。我会这样做:

s#([1-9])#$h{$1}#g

或者,不使用 %h (因为,让我们面对现实吧,带有 0 => a1 => b 等的哈希.应该是一个数组):

perl -pe '@a="a".."j"; s#([1-9])#$a[$1-1]#g'

或者,根本不需要数组(我会让你决定你是否发现它更容易或更难阅读;我个人对此很满意),

perl -pe 's/([1-9])/chr(ord("a")+$1-1)/ge'

关于perl 将数字替换为字母,与 for 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58022670/

相关文章:

perl - 调用 Perl 方法

C++ 模板特化冗余减少

sed - sed 如何替换 "\"(反斜杠 + 空格)?

python - 用 Pandas 替换数据框中不同列的值

python - Sphinx 中尖括号旁边的替换

perl - 开始 Perl <STDIN>

perl - 当没有遇到 return 语句时,Perl 从子例程返回什么?

regex - 分组是否在 Perl 正则表达式字符类中工作?

string - LUA 中是否有函数可以替换字符串上的值但保留部分原始值?

Perl:静态方法与包方法