/java(script)?/と書けばよいわけだけど
括弧を使うと自動的に$1にメモリされる。
$_ = "javascript";
print "\$1=$1\n" if(/java(script)?/);
この場合
$1=script
と表示される。
でも、この手のシチュエーションで括弧内の
情報が知れると嬉しいなんてことはまずない。
つまり、使いもしないのに$1としてメモリを消費したことになる。
この無駄なメモリ消費を回避するにはどうすればよいかと言うと
最初の括弧の後に?:(クエスチョンマークとコロン)を並べるとメモリしなくなるそうな。
試してみる。
$_ = "javascript";
print "\$1=$1\n" if(/java(?:script)?/);
print "\$1=$1\n" if(/java(script)?/);
実行結果
確かにメモリされてないですね。
コードが短けりゃ、このわずかなメモリ消費なんて気にする必要はないでしょうし
コードが長けりゃ、どこかしらに正規表現を使っていて$1等で呼び出しを一度でも
していれば、?:なんて記述はする意味がないのかなぁー
と思ってみたり。
EffectivePerlを見る限りだと相当時間にシビアな時に使うみたいですねぇ。
頭の片隅に入れときましょ。
0 件のコメント:
コメントを投稿