2017-09-04 44 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')