***HPクリエイターのためのCGI講座 第28回***
5.3 その他

文字列操作に関わる、その他演算子について解説します。


<split演算子>
正規表現を区切り記号として文字列を分割します。
=例=
$str = "abc,123,def,456";
@arry = split(/,/,$str);
# ,(コンマ)を区切り記号として文字列を分割する
$arry[0]、$data1 には "abc"
$arry[1]、$data2 には "123"
$arry[2]、$data3 には "def"
$arry[3]、$data4 には "456"
が格納される
($data1,$data2,$data3,$data1) = split(/,/,$str); # このような使い方もできる


<join演算子>
split演算子の逆で、複数の文字列を指定した文字列で連結します。
@arry = qw(abc 123 def 456);
$data = join ("*",@arry);
# $dataは "abc*123*def*456"がセットされる


<tr演算子>
検索文字列に含まれる文字を、対応する置換文字列 の文字に変換します。
例えば、ある文字列のAとBを入れ換えようとすればどうすれば良いでしょうか?
前項の置換演算子(s/.../.../)で可能でしょうか?
s/A/B/g;
s/B/A/g;
とすれば一見可能なように見えますが、最初のステップで、全てのAがBに変わります。
次のステップで全てのBがAに変わります。
つまり、Bは無くなり、Aだけになってしまいます。
=例=
$str='ABCABC';
$str =~ s/A/B/g;
# $str は'BBCBBC'
$str =~ s/B/A/g; # $str は'AACAAC'

このような場合次のように記述すれば文字が交換されます
=例=
$str='ABCABC';
$str =~ tr/AB/BA/;
# $str は'BACBAC'

tr演算子は文字を一対一で変換します。
例えば
tr/12345/ABCDE/;
とすると
Aが1に、Bが2に、Cが3に・・・・と変換します。

次の例だと、小文字のアルファベットを大文字に変換します。
=例=
$str = "abcdef";
$str =~ tr/a-z/A-Z/;
# 小文字を大文字に変換 $strは"ABCDEF"になる


演習プログラムの虫食いのところを、色々変えて確認してみてください。


********************************************************************************
講師:ALK alk@arkland.co.jp
運営:アークランド(株) http://www.arkland.co.jp