last-modified: 29th/July/'01;
since: 1st/June/2001;
前節では基本的なハッシュの使い方を見てきました。本節ではハッシュを処理するために必要な文字列処理の函数をまとめて紹介します。
文字列操作の基本は検索と置換です。従って、 m/.../
と s/.../
を利用すれば全て実現できます。しかし、 Perl では便利な機能が簡単に実現できる組み込み函数が沢山用意されています。
これらの函数の利用に慣れると共に、検索と置換でどのように再現するかも考えてみると勉強になります。
split
, join
split
は、「特定のパターン」で区切られているスカラー文字列を切断して、各々の部分文字列を要素とする配列にします。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
, rindex
index
は、文字列から、パターンにマッチする部分の最初の位置をバイト数で返します。逆に、 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
などと併用します。