my @r = split("", "hi");
say @r.elems;
--> output: 4
split
は、先頭に1つ、最後にもう1つの余分な要素を配列に追加しています。Perl6スプリット関数は、配列に余分な要素を追加します。
これを修正するには、すべての分割後にシフトとポップを行う必要があります。
文字列を分割するより良い方法はありますか?
my @r = split("", "hi");
say @r.elems;
--> output: 4
split
は、先頭に1つ、最後にもう1つの余分な要素を配列に追加しています。Perl6スプリット関数は、配列に余分な要素を追加します。
これを修正するには、すべての分割後にシフトとポップを行う必要があります。
文字列を分割するより良い方法はありますか?
空の文字列で分割する場合は、は、文字列の前後に空の文字列があるため、返されたリストの先頭と末尾に空の要素を取得します。何をしたい
は完全に機能的に書き出され、パラメータなしの.comb
です:
"hi".comb.elems.say; # 2
は、詳細はhttps://docs.perl6.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')
をしたいかを指定することを許可しています