« Search Keywords の集計を正確に | メイン | お茶漬けを食べた »

2004年11月02日

マッチ演算子 or index

Perl である文字列が変数内に存在するかどうかをチェックするには、マッチ演算子を使うのが手っ取り早いのですが(僕だけ?)、他にも index という関数があることを思い出した。どっちを使った方が早いのかなぁ。とか思ったので、適当に比べてみた。

マッチ演算子を使う場合

if ($_ =~ /$key/) {

index を使う場合

if (index($_, $key) != -1) {

てな感じ。 $_ を 100通り と $key を 100通り の計10000パターンで比べたところ、後者の方が半分くらいの処理時間(CPU時間)で処理できる。ということで index を使うことにした。微々たる時間なんだけどね。

ちなみに、マッチ演算子を用いる場合、大文字小文字を区別しない i のオプションを使う方が、若干ながら早く処理が終わった。これには、ちょっと意外。大文字小文字を区別する方が遅いのか。

ちなみに、

$a =~ /$b/

$a =~ $b

は、等価です。でも、実際に処理すると、後者の方が早いらしい。誤差範囲かもしれないけど。

2004年11月02日 23:37 | Programming

トラックバック

コメント

マッチよりIndexのほうが、処理が絞られている分高速なんでしょうね。
大文字と小文字に関しては、区別しないほうが早く一致する文字列を見つける可能性が早いからかもしれません。

投稿者 uda : 2004年11月03日 15:16

>> uda さん
確かに、区別しない方が早く見つけて処理から抜けるという感じかもしれません。

投稿者 ceekz : 2004年11月03日 18:24