空白 - perl 置換 変数



区切り文字の前または後に空白のテキストを含むPerl分割 (1)

私は、Perlの分割コマンドで、特に結果の配列に空の文字列が含まれていると思うようなときに気になる動作に気づいていましたが、実際はそうではありません。

たとえば、文字列の最後(または最初)に区切り文字がある場合、結果の配列には最後の(または最初の)要素として空の文字列 ''がありません。

例:

@s = split(/x/, 'axb')

2要素配列['a'、 'b']を生成する

@s = split(/x/, 'axbx')

同じ配列を生成する

@s = split(/x/, 'axbxxxx')

同じ配列を生成する

しかし、最後に何かを置くとすぐに、それらの空の文字列はすべて要素として表示されます。

@s = split(/x/, 'axbxxxxc')

6要素配列['a'、 'b'、 ''、 ''、 ''、 'c']を生成します

区切り文字が最初にあれば、動作は似ています。

区切り文字の前、後、または区切りの後に空白のテキストがあると、分割内の要素が常に生成されます。 誰も私にスプリットがなぜこのようにPerlで動作するのか説明できますか? 私はPythonで同じことを試したところ、期待どおりに動作しました。

注:Perl v5.8


ドキュメントから:

既定では、空の先頭のフィールドは保持され、後続の空のフィールドは削除されます。 (すべてのフィールドが空の場合、それらは末尾と見なされます)。

これは、後続のフィールドで見ている動作を説明しています。 人々はしばしば末尾の空白について非常に不注意なので、これは一般的に意味があります。 ただし、必要に応じて後続の空白のフィールドを取得することができます。

split /PATTERN/,EXPR,LIMIT

LIMITが負の場合は、任意に大きなLIMITが指定されたかのように扱われます。

したがって、すべての後続の空のフィールドを取得するには:

@s = split(/x/, 'axbxxxxc', -1);

(私は、あなたが間違った空白のフィールドを見て、間違っていると仮定しています - 彼らは間違いなく保存されています。





perl