なんか誤読されていた感じなので.
my $str = "ababab"; print "マッチした個数は ", scalar( () = $str =~ /abab/g ), " 個です\n";
これは "abab" という正規表現にマッチした数を出力させていますが,オーバーラップしている "abab" はカウントされません."ababab" の中には "abab" が二つありますが,上記の形ではそれをカウントすることはできません.
マッチした個数は 1 個です
オーバーラップを数えたい場合には,look-ahead assertion を使います.
my $cnt; $cnt++ while ( $str =~ /(?=abab)/g ); print "マッチした個数は $cnt 個です\n";
マッチした個数は 2 個です
参考図書としてはこのへん.
ISBN:4-87311-037-8:detail