ここまで正規表現に関する基本的なところを見てきましたが、この章の最後に、文字列の分解と結合について紹介します。
split関数は、引数として受け取った正規表現にマッチする物を全て見つけ出し、マッチした部分で文字列を分割し、マッチしなかった部分をリストにして返します(リストコンテキストで評価した場合)。 またスカラーコンテキストで評価すると、分割した文字列の個数を返します。
$data = "name=can";
($name, $value) = split(/=/, $data);
$items = split(/=/, $data);
上のスクリプトの最初の物は、$dataの中の文字列を=で分割し、分割したそれぞれを左辺のリストに代入します。 ですから$nameには文字列"name"が格納され、$valueには"can"が格納されます。 また次の例ではsplit関数をスカラーコンテキストで評価しているので、$itemsには2が格納されます。
split関数は、2番目の引数を省略すると特殊変数$_に対して処理を行います。
split(/=/);
#$_に対して処理をする
また第1引数も省略すると、$_に対して、/\s+/(空白文字が1個以上続くようなパターン)で分割をします。
split;
split関数によって分割される項目の数を制限することも出来ます。 それには次のように、split関数の3番目の引数として、制限したい項目の数を書きます。
$data = "can,sendai,Japan,012-3456,022-987-6543";
($name, $city, $sonota) = split(/,/, $data, 3);
上のようにして、分割する項目の数を3に限定すると、$nameには"can"が格納され、$cityには"sendai"が格納され、$sonotaには"Japan,012-3456,022-987-6543"が格納されます。 split関数で分割したデータのうちの一部分だけが必要な場合に使えそうですね。
join関数は、split関数とは反対に、引数で受け取った文字列を、同じく引数で受け取った文字列のリストの間にはさんで、1つの文字列にしてくれます。
$data = join('=', "name", "can");
上の例では"name"と"can"を=でつなげています。 $dataには"name=can"が格納されます。 join関数の第1引数は正規表現ではなく、普通の文字列だということに注意してください。
これで第7章はおしまいです。 正規表現にはもっと細かく難しい物がたくさんありますので、いろいろと実験を繰り返してみてください。 次の章ではファイルの読み書きやファイルロックなど、ファイルの操作に関する基本的なところを見て行きます。