黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Perl - index関数とsubstr関数

初めてのPerlを読み直していると、以前は明らかに読み飛ばしていたであろう項目を見つけました。
文字列から特定のパターン抽出する方法なんて正規表現あるぜ〜と思っていたのですが、文字列処理に便利な関数があったのですね。
復習がてら書きます。

index関数

my $str = "My name is ryoana.";
my $n = index($str, "ryoana");

print $n;
# 11 と表示される

という感じで使うようです。
文字列全体から部分文字列の「開始位置」を探せます。

 

substr関数

index関数だけだと使いドコロが限定されそうですが、substr関数を使うと更に便利な感じになるっぽいです。
substr関数は、文字列全体から部分文字列をひっこぬいたり、部分的に書き換えたりしちゃいます。

my $str = "My name is ryoana.";
my $name = substr($str, 11, 6);

print $name;
# "ryoana"と表示される

substr関数に渡す第一引数は文字列全体、第二引数は引き抜く|書き換える文字列の「開始位置」、第三引数は文字列の「長さ」です。
第四引数に書き換えたい文字列を指定してあげることができます。(文字列全体を変数で指定した場合のみです。)

my $str = "My name is ryoana.";
substr($str, index($str, "ryoana"), 6, "Mr.glasses");

print $str;
# 「My name is Mr.glasses.」と表示される。

使えると便利な気がしないでもない関数達です。
上の例のようにindexsubstrを一緒に使うとはかどりそうです。