一度作成した正規表現を大文字小文字区別しないようにしたい。例えば
my $re = qr/^(get|head)$/;
とすると、これは
(?-xism:^(get|head)$)
となり、iオプションを付けてないので「-i」が含まれ、case-sensitiveな正規表現になる。これを後からiオプションを付けたいと思ったんだけど良い方法がなさそうなので、正規表現を正規表現で書き換えるという暴挙にでてみた。
$re =~ s/\(\?([^-]*)(\-[^i]*)i([^:]*?:)/?i$1$2$3/g;
これで、$re は
(?i-xsm:^(get|head)$)
と変更される。使う時は
$ENV{HTTP_METHOD} =~ m!$re!; (ここでiオプションは必要ない
こんな事しねぇよという突っ込みも含め、もっと良い方法はないのだろうか。。
追記:
lcでもいけるか
$re = lc($re);
lc($ENV{HTTP_METHOD) =~ m!$re!;