m//

パターンマッチは以前もやっているが、実は、"//"というのは"m//"の省略形らしい。

パターンマッチ演算子(m//) - 正規表現の基本 - Perlにおける正規表現

ここだとパターンマッチ演算子と言っているけど、"m//"は組み込み関数の1つと書いてあるところもあって、どっちが正解なんだか・・・。

今回は配列でやってみた。

$ vi m.pl
$ perl m.pl 
ABC
AbC
$ 

こんな風に取り出せるのは変わらない。

Sample/perl/m/m/src/m at master · bg1bgst333/Sample · GitHub

rindex

rindexは、指定された文字列の中で、指定された部分文字列があった場合に、最後に見つかった場所の位置(前から数えて)を返す。

rindex関数 - 文字列 - Perl関数のリファレンス

3番目の検索終了位置がわかりにくいけど、

として実行すると、

$ vi rindex.pl 
$ perl rindex.pl 
13
13
8
2
-1
$ 

$i1は、0から数えて13番目に、最後の"ABC"。
$i2は、13番目から始まる探索で終了なので、最後に見つかるカタチになる。
$i3は、そもそも12番目で探索を終了してしまうので、13番目より前の、8番目の"ABC"を最後とする。
$i4は、ここからは対象文字列を"CD"とし、複数は無いパターンに変えていて、2番目なら見つかるので2。
$i5は、1番目で終わってしまうので、そうすると見つからなかったということになるので、-1を返す。

Sample/perl/rindex/rindex/src/rindex at master · bg1bgst333/Sample · GitHub

index

indexは、指定された文字列の中で、指定された部分文字列がどこにあるか、位置を返す。

Perlの組み込み関数 index の翻訳 - perldoc.jp

3番目に渡す探索位置で結果が変わってくる。

指定しない場合は最初から、指定する場合はその位置からになるので、

$ vi index.pl
$ perl index.pl
0
6
$

上は最初から見つかるし、下は6番目までみつからない。

Sample/perl/index/index/src/index at master · bg1bgst333/Sample · GitHub

substr

substrは、指定された文字列の中から、指定された位置や長さの部分文字列を抜き出す。

Perlの組み込み関数 substr の翻訳 - perldoc.jp

3つのパターンでやってみる。

これで、

$ vi substr.pl
$ perl substr.pl
ABCDE
CD
CDE
$

このように抜き出せた。

Sample/perl/substr/substr/src/substr at master · bg1bgst333/Sample · GitHub

chop

chopは、指定された文字列の最後の文字を取り除く。

Perlの組み込み関数 chop の翻訳 - perldoc.jp

chompは、末尾が改行なら取り除き、そうでないなら何もしないのに対して、
chopは、条件なく最後の文字を取り除く。

これで、

$ vi chop.pl
$ perl chop.pl
ABCD
ABC
$

chompだと何も起きないが、chopだと'D'が取り除かれる。

Sample/perl/chop/chop/src/chop at master · bg1bgst333/Sample · GitHub