Go to the first, previous, next, last section, table of contents.

split

`split(/PATTERN/,EXPR,LIMIT)'
`split(/PATTERN/,EXPR)'
`split(/PATTERN/)'
`split'
文字列を文字列の配列に 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.

Go to the first, previous, next, last section, table of contents.