=~ の構文を勘違いしてた

ラクダ本 p.167 によると、Perl の「=~」演算子は左側にスカラー式を、右側に指定された3つのクォート風の演算子 m//、s///、tr/// のどれかと結びつける。


だから、

my $string = "hoge";
print "match!\n" if m/hoge/ =~ $string;

は間違いで、以下が正しい。

my $string = "hoge";
print "match!\n" if $string =~ m/hoge/;


こんなことで30分ぐらいはまった俺って…。そもそも、CGI の場合に、warning がどこに吐かれているか知らないのが問題だな。普通の Perl プログラムだったら、use warnings しとけば「Use of uninitialized value in pattern match (m//) at hoge.pl line 9.」などと教えてくれるんだけど。後で分かったら追記することにしよう。