Perl:如何将ASCII艺术转换为使用x运算符的精简字节形式
用Perl的
x运算符压缩ASCII艺术字符串 嘿,这问题很实用!我们可以把原字符串里连续重复的字符块拆解出来,用Perl的x重复运算符逐个替换,最终拼成单行的代码。
先看你的原字符串:my $string = ' ██ ████ █';,我们先把里面的连续字符分组:
- 开头1个空格:
" " x 1 - 紧接着2个█:
"█" x 2 - 中间1个空格:
" " x 1 - 然后4个█:
"█" x 4 - 又1个空格:
" " x 1 - 最后1个█:
"█" x 1
把这些用字符串连接符.拼起来,放到print语句里,就是你要的单行形式:
print " " x 1 . "█" x 2 . " " x 1 . "█" x 4 . " " x 1 . "█" x 1;
如果你觉得x 1有点冗余,Perl里完全可以省略(毕竟"字符" x 1和直接写"字符"效果一样),简化后更简洁:
print " " . "█" x 2 . " " . "█" x 4 . " " . "█";
要是你需要处理更长的ASCII艺术字符串,手动拆解太麻烦,可以用一段小Perl代码自动生成目标代码:
my $original = ' ██ ████ █'; my $output_code = 'print '; # 匹配连续重复的字符块,替换成对应的x运算符格式 $original =~ s/(.)\1*/"$1" x length($&) . /g; chop $output_code; # 移除最后多余的连接符 $output_code .= ';'; print $output_code;
运行这段脚本,就能直接输出压缩后的单行print语句,批量处理超省心。
内容的提问来源于stack exchange,提问作者Abdul Ahmed
相关产品推荐
相关产品推荐

