文字列を文字列の配列に split
し、その配列を返す。
(配列のコンテキストでない場合は、フィールドの数を返し、
split
の結果を @_
に格納する。
(配列のコンテキストでも、パターン delimiter に ??
を指定することで
@_ への代入を強制することができるが、返り値は配列値のままである。))
EXPR
を省略すると、文字列 $_
を split
する。
PATTERN
も省略すると、
whitespace (/[ \t\n]+/)
を split
する。
PATTERN
にマッチする文字は、
全てフィールドを分ける delimiter であると解釈される
(注意: delimiter は 1 字を超えてもよい)。
LIMIT
を指定すると、それを超えない数に split
する
(少ない場合もある)。LIMIT
を指定しない場合は、
余分なヌルフィールドが除かれる
(pop()
を使おうというユーザはこのことを覚えておいた方が良いのでは?)。
ヌル文字列にマッチするパターン(ヌルパターン //
と混同しないように。
//
はヌル文字列にマッチするパターン群の一つにすぎない)は
そのパターンがマッチする全ての点で EXPR
の値を文字に分割する。
print join(':', split(/ */, 'hi there'));
は `h:i:t:h:e:r:e' を出力する。
LIMIT
パラメータは行の一部を split
するのに使用できる。
($login, $passwd, $remainder) = split(/:/, $_, 3);
(リストに代入する時に LIMIT
が省略されていると、
perl はリスト中の変数の数より 1 多い数を LIMIT
とする。
これは不必要な作業を無くすためである。
上のリストでは、LIMIT
はデフォルトで 4 であったはずである。
時間にクリティカルなアプリケーションでは
本当に必要なフィールド以上に分割しないようにするべきである。)
PATTERN
が括弧を含んでいる場合、
delimiter 中でマッチする文字列からさらに配列要素が作り出される。
split(/([,-])/,"1-10,20");
が作る配列の値は
(1,'-',10,',',20)
/PATTERN/
は
実行時に変化するパターンを指定する expression であってもよい。
(実行時コンパイルを 1 回だけ行うには、/$variable/o
を用いる。)
特殊な場合として、スペース (' '
) を指定すると、
何も指定しない場合と同じように white space で split
するが、
文字列の始めに whitespace があっても一番目にヌルフィールドを作らない。
すなわち、
split(' ')
は awk のデフォルトの動作をエミュレートするのに使える。
しかし、
split(/ /)
は文字列の最初のスペースの数だけヌルフィールドが得られる。
open(passwd, '/etc/passwd');
while (<passwd>) {
($login, $passwd, $uid, $gid, $gcos, $home, $shell)
= split(/:/);
...
}
注意: 上の例で $shell
は改行文字を含む。chop()
を参照。
また、join
も参照のこと。
See section chop, and See section join.