一度作成した正規表現を大文字小文字区別しないようにしたい。例えば

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!;

このブログ記事について

このページは、Masahiro Naganoが2011年1月27日 19:13に書いたブログ記事です。

ひとつ前のブログ記事は「PSGIアプリケーションをリバースプロキシ下で使う際の静的コンテンツの配信方法について」です。

次のブログ記事は「HTTPコンテンツ圧縮はどのレイヤーで行うのがいいか」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja