ご存じのとおり、Perlのsplit関数は、指定したセパレーターで文字列を分割してリストにします。
使い方とサンプルは下記の通り。
■使い方
■サンプル
@listの内容は、下のようになっています。※Data::Dumperを使用した出力。
そして、この逆の処理をしてくれるのが、join関数です。
$var_afterの内容は、下のようになって$var_beforeと同じになりました。
でも、splitしてjoinして元に戻すのは、はたしてこの方法で良いのでしょうか?
使い方とサンプルは下記の通り。
■使い方
split /PATTERN/, EXPR, LIMIT
split /PATTERN/, EXPR
split /PATTERN/
split
$var_before = "Sato:Suzuki:Kimura";
@list = split(/:/, $var_before);
@listの内容は、下のようになっています。※Data::Dumperを使用した出力。
$VAR1 = 'Sato'; $VAR2 = 'Suzuki'; $VAR3 = 'Kimura';
そして、この逆の処理をしてくれるのが、join関数です。
$var_before = "Sato:Suzuki:Kimura";
@list = split(/:/, $var_before);
$var_after = join(":", @list);
$var_afterの内容は、下のようになって$var_beforeと同じになりました。
$VAR1 = 'Sato:Suzuki:Kimura';
でも、splitしてjoinして元に戻すのは、はたしてこの方法で良いのでしょうか?
$var_beforeの値をちょっと変えてみると。
$var_before = "Sato:Suzuki:Kimura::";
@list = split(/:/, $var_before);
$var_after = join(":", @list);
$var_afterの内容は下のようになって$var_beforeと違う値になりました。末尾の":"が無くなっています。
$VAR1 = 'Sato:Suzuki:Kimura';
実はsplit関数は、この例のように使うと末尾の空フィールドは捨てられます。
$var_beforeには、セパレーターの":"(コロン)が末尾に連続しているので、splitの際、空フィールドとして捨てられてしまったわけです。ちなみに先頭や中間の空フィールドは保持されます。
splitの際、末尾の空フィールドを保持するためには、『■使い方』で示した"LIMIT"に負の値を入れます。
$var_before = "Sato:Suzuki:Kimura::";
@list = split(/:/, $var_before, -1);
$var_after = join(":", @list);
$VAR1 = 'Sato';
$VAR2 = 'Suzuki';
$VAR3 = 'Kimura';
$VAR4 = '';
$VAR5 = '';
$VAR1 = 'Sato:Suzuki:Kimura::';
これにて$var_beforeと$var_afterは同じ値になります。
Leave a comment