咨询Perl6中简单高效分割字符串为等长部分的实现方法(参考PowerShell)
在Perl 6中按固定长度分割字符串的简洁方案
当然有啦!Perl 6其实提供了好几种简洁高效又优雅的方式来实现你想要的按固定长度分割字符串的需求,完全不输PowerShell的写法。下面给你介绍最实用的两种:
方法一:用comb(最简洁直接)
Perl 6的comb方法天生就是干这个的——它可以按指定长度把字符串拆分成子串列表,自动处理最后一段不足指定长度的部分,代码超级简洁:
my $str = 'abcdefghijklmnopqrstuvwxyz'; my @parts = $str.comb(8); # 结果:("abcdefgh", "ijklmnop", "qrstuvwx", "yz")
这个方法不仅代码短,效率也很高,而且原生支持Unicode字符(比如中文、表情符号),完全不用额外处理编码问题,非常省心。
方法二:用split(适配正则场景)
如果你更习惯用split,其实也能写出简洁的代码,之前觉得官方文档繁琐可能是没用到:skip-empty参数。默认情况下split会保留分隔符前后的空字符串,加上这个参数就能过滤掉它们,实现和PowerShell一致的效果:
my $str = 'abcdefghijklmnopqrstuvwxyz'; my @parts = $str.split(/(.{8})/, :skip-empty); # 结果:("abcdefgh", "ijklmnop", "qrstuvwx", "yz")
这种方式适合你需要用正则做更多定制化分割的场景(比如分割时顺便做一些匹配校验),如果只是单纯按固定长度拆分,comb无疑是更优的选择。
小提示
两种方法返回的都是列表,你可以直接遍历、打印或者做其他处理,比如用join把结果拼成带空格的字符串:
say @parts.join(' '); # 输出:abcdefgh ijklmnop qrstuvwx yz
内容的提问来源于stack exchange,提问作者user9171470
相关产品推荐
相关产品推荐

