last-modified: 29th/July/'01;
since: 1st/June/2001;
前節では基本的なハッシュの使い方を見てきました。本節ではハッシュを処理するために必要な文字列処理の函数をまとめて紹介します。
文字列操作の基本は検索と置換です。従って、 m/.../ と s/.../ を利用すれば全て実現できます。しかし、 Perl では便利な機能が簡単に実現できる組み込み函数が沢山用意されています。
これらの函数の利用に慣れると共に、検索と置換でどのように再現するかも考えてみると勉強になります。
split, joinsplit は、「特定のパターン」で区切られているスカラー文字列を切断して、各々の部分文字列を要素とする配列にします。join は、配列の要素間に「特定の文字列」を区切り文字として挿入して結合し、スカラー文字列にします。
#【join の基本書式】
$value = join("区切り文字列", 配列);
#join の利用例
$value = join(" ]:[ ", a, b, c); #$value = "a ]:[ b ]:[ c"
#【split の基本書式】
@array = split(/正規表現/, 文字列);
#split の利用例
@array = split(/:/, "a ]:[ b ]:[ c"); #@array = ("a ]", "[ b ]", "[ c")
@array = split(/ ]:[ /, "a ]:[ b ]:[ c"); #@array = ("a", "b", "c")
詳しくは配列操作を参照ください。
chomp何度も使ってきましたが、文字列の最後の改行文字(\n)を削除します。改行文字が含まれていない場合は何もしません。
配列やリストに対しては、個々の要素全てに対して chmod を作用します。スカラーコンテキストでは、削除した改行文字数です。
$string = "hogehoge\n";
chomp $string;
#$string = "hogehoge" になる。
#chomp($string = "hogehoge\n") としても同じ。
@array = ("hogehoge", "foo\n", "hoo", "piyo\n");
$i = chomp @array;
#@array = ("hogehoge", "foo", "hoo", "piyo") になる。
#$i = 2 になる。
length文字列の長さをバイト数で返します。
ファイルに対する入出力時などにデータのバイト数を求めて、このバイト数だけ読み込んだら読み込みを終了するように工夫すると良いでしょう。実際は、 substr や パターンマッチなどと併用します。
$string = "こんにちは。";
$size = length $string;
#$size = 12 になる。日本語は 2 バイト文字。
substr文字列の任意の部分の文字列を返します。 splice と同様に文字列を挿入することもできます。
#【substr の基本書式】
$sub_string = substr(string, offset, length);
#利用例
$string ="I have a dream.";
$a = substr($string, 3, 4);
#$a = "ave " になる。
$b = substr($string, -4,3);
#$b = "eam" になる。
$c = substr($string, 0, 6);
#$c = "I have" になる。
$d = substr($string, 7);
#$c = "a dream." になる。
substr($string, 9, 0) = "BIG ";
#$string = "I have a BIG dream." になる。
substr($string, -5,4) = "car";
#$string = "I have a BIG car." になる。
index, rindexindex は、文字列から、パターンにマッチする部分の最初の位置をバイト数で返します。逆に、 rindex は最後の位置を返します。
#【index の基本書式】
$position = index(string, substring, offset);
#利用例
$position = index("Howdy, world!", "H");
#$position = 0 になる。
$position = index("Howdy, world", "o");
#$position = 1 になる。
$position = index("Howdy, world!", "o", 3);
#3 バイト目以降の "o" は 8 バイト目だから、
#$position = 8 になる。
全ての部分文字列をヒットさせる場合は、 offset にカウントのための変数をおいて、 while ループさせるのが良いでしょう。
実際には、 substr, length などと併用します。