文字列を文字列の配列に分割し、その配列を返す。
(配列のコンテキストでない場合は、フィールドの数を返し、
分割の結果を @_ に格納する。
(配列のコンテキストでも、パターン delimiter に ?? を指定することで
@_ への代入を強制することができるが、
返り値は配列値のままである。))
EXPR を省略すると、文字列 $_ を分割する。
PATTERN も省略すると、
whitespace (/[ \t\n]+/) で分割する。
PATTERN にマッチする文字は、
全てフィールドを分ける delimiter であると解釈される
(注意: delimiter は 1 字を超えてもよい)。
LIMIT を指定すると、それを超えない数に分割する(少ない場合もある)。
LIMIT を指定しない場合は、余分なヌルフィールドが除かれる
(pop() を使おうというユーザはこのことを覚えておいた方が良いのでは?)。
ヌル文字列にマッチするパターン(ヌルパターン // と混同しないように。
// はヌル文字列にマッチするパターン群の一つにすぎない)は
そのパターンがマッチする全ての点で EXPR の値を文字に分割する。
print join(':', split(/ */, 'hi there'));
は `h:i:t:h:e:r:e' を出力する。
LIMIT パラメータは行の一部を分割するのに使用できる。
($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 で分割するが、
文字列の始めに whitespace があっても一番目にヌルフィールドを作らない。
すなわち、
split(' ') は awk のデフォルトの動作をエミュレートするのに使える。
しかし、
split(/ /) は文字列の最初のスペースの数だけヌルフィールドが得られる。
open(passwd, '/etc/passwd');
while (<passwd>) {
($login, $passwd, $uid, $gid, $gcos, $home, $shell)
= split(/:/);
...
}
注意: 上の例で $shell は改行文字を含む。chop を参照。
また、join も参照のこと。
See section chop, および See section join.