Perl6拆分函数向数组添加额外元素

时间:2017-09-04 03:54:11

标签: perl6

my @r = split("", "hi");
say @r.elems;
--> output: 4

split在数组中添加了两个额外的元素,一个在开头,另一个在结尾。

我必须在每次拆分后进行移位和弹出以纠正此问题。

有没有更好的方法来分割字符串?

2 个答案:

答案 0 :(得分:6)

如果要拆分空字符串,在返回列表的开头和结尾处获取一个空元素,因为在字符串之前和之后还有一个空字符串。< / p>

你想要的是.comb没有参数,完全在功能上写出:

"hi".comb.elems.say;    # 2

有关详细信息,请参阅https://docs.perl6.org/routine/comb#(Str)_routine_comb

答案 1 :(得分:2)

这样做的原因是当你使用空的Str “”作为分隔符时,它就像你使用了匹配字符旁边的正则表达式/<|wb>/一样。所以它也在第一个字符之前和最后一个字符之后匹配。在这种情况下,Perl 5为你删除了这些“额外”字符串(仅在这种情况下),这可能是混淆所在的位置。

Perl 6的功能是允许您明确:skip-empty

'hi'.split('') :skip-empty
'hi'.split('', :skip-empty)

split("", "hi") :skip-empty
split("", "hi", :skip-empty)

或指定您真正想要的内容

'hi'.comb( /./ )
'hi'.comb( 1 )
'hi'.comb

comb( /./, 'hi' )
comb(   1, 'hi' )