2017-09-04 47 views
3
my @r = split("", "hi"); 
say @r.elems; 
--> output: 4 

split是增加两个额外的元素到所述阵列,一个在开始,另一个在结尾。Perl6分割功能添加额外的元件,以阵列

为了纠正这个问题,我必须在每次拆分之后进行移位和弹出。

有更好的方法来拆分字符串吗?

回答

6

如果你正在拆分空字符串,那么在返回列表的开始和结束处得到一个空元素,因为在字符串之前和之后还有一个空字符串。

你想要的是.comb不带参数,写出来的完全功能:

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

更多信息,请参见https://docs.perl6.org/routine/comb#(Str)_routine_comb

2

这样做的原因是,当您使用空海峡“”为分隔符是一样的,如果你用了这一个相匹配的字符正则表达式/<|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')