我一直想知道是否有一种更好,更简洁的方法将字符串拆分为字符
@characters = split //,$string
并不难读,但不知何故,使用正则表达式对我来说太过分了.
我想出了这个:
@characters = map { substr $string,$_,1 } 0 .. length($string) - 1
但我发现它更丑陋且不太可读.将字符串拆分为字符的首选方法是什么?
解决方法
为什么使用正则表达式会“过度杀伤”?许多人担心Perl中的正则表达式过度,因为他们认为运行它们涉及高度复杂和缓慢的正则表达式算法.这并非总是如此:实现是高度优化的,并且特别处理了许多简单的情况:看起来像正则表达式实际上可以执行的操作与简单的子字符串搜索一样.如果这种类型的拆分也得到优化,我也不会感到惊讶.在我运行的某些测试中,split比你的地图更快. unpack似乎比split更快.
我建议拆分,因为它是“惯用”的方式.你可以在perldoc,很多书中找到它,任何优秀的Perl程序员都应该知道它(如果你不确定你的读者会理解它,你总是可以像有人建议的那样在代码中添加注释.)
OTOH,如果正则表达式“过度杀伤”只是因为语法难看,那么对我来说这太过主观了.