jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj(j32)

vi使っていると、他アプリでjを連打していることがある。

[Perl]posについて

2014-12-30 22:53:58 | 日記
perldoc -f posしたところ、

Returns the offset of where the last "m//g" search left off for the variable in question(以下略)

とあった。

問題の変数について、前回の"m//g"検索をやめた場所のオフセットを返すってことかな。
その検索をやめた場所ってどこかな?

オフセットは0始まりだったよな。以下超適当なコードで検証。

my $str = 'abcdabcd'; 
#          01234567

while ($str =~ m/d/g) {
    my $position = pos $str;
    print 'pos:' . $position . "\n";
}

3と7が返ると思いきや、
pos:4
pos:8
4と8が返ってくる。
つまり、前回の"m//g"検索をやめた場所ってこういうことか。ステップごとに書くと、

前略

abcdabcd
^
|
マッチした!次。

abcdabcd
^
|
マッチしなかった。

ということで、2つ目のaのところで検索をやめた。故に4を返すってことかな。
以降同様に、

abcdabcd
^
|
マッチしなかった。次。

abcdabcd
^
|
マッチしなかった。次。

abcdabcd
^
|
マッチした!次。

abcdabcd
^
|
マッチしなかった(というか次なかった終わり)。



また来年。