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

Perl6 split function adding extra elements to array

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

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

我必须在每次分割后进行 shift 和 pop 来纠正这个问题。

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

如果您在空字符串上拆分,您在返回列表的开头和结尾处得到一个空元素,因为在和之前也有一个空字符串在字符串之后。

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

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

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

原因是当您使用空的 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' )