電気ウナギ的○○

About Home

何故か環境変数 QUERY_STRING の値が変化してしまう謎

shinoda (2011年11月 9日 17:44)
誰か、このブログを見たエロい、いや、偉い人がコメントを残してくれるかもしれないので書いとく。

今日、お客さんのところのサーバに Perl で書いたちょっとしたプログラムを置いた。
まあ、仕組みを考えるところに時間が取られた案件で、プログラム自体は大したことはない。ちょいプロのレベル。

その中で、URL の引数として渡された値(環境変数 QUERY_STRING にセットされる)を使う。具体的に言うと、「123xHgm78YYtz」のような文字列が来たら、頭の数字 3桁と、その後の文字列を取り出して別々の変数にセットしている。

Perl で正規表現を使って書くと、

if ($ENV{'QUERY_STRING'} =~ /^(\d{3})(.+)$/) {
($a, $b) = ($1, $2);
}

こんだけの話だ。
これで、変数 $a には「123」が、$b には「xHgm78YYtz」がセットされる。

・・・はずだったのに、何か上手くいかない。(^^;

上記の if 文の前で、$ENV{'QUERY_STRING'} の値を表示してみると、「xHgm78YYtz」になってしまっている???
前の 3桁が見事に消えてしまっているのだ。これでは上記の if 文で「真」にならない。
言っておくが、上記の if 文を通る前に $ENV{'QUERY_STRING'} を表示しているのに・・・だ。

謎すぎる(^^;;;

もちろん、上の if 文を見ていただければわかるのように、もし if 文を通った後だとしても、$ENV{'QUERY_STRING'} には何の編集もしていないので、値が変わってしまうなんてあり得ないのだ!

どうにも謎すぎる・・・(^^;;;

で、上記 if 文をコメントにすると、$ENV{'QUERY_STRING'} には正しく「123xHgm78YYtz」がセットされるようになるので、何かこの if 文が関係している可能性はあるのだが、上記のようにまったく問題無い if 文である。

ちなみに、正規表現の部分を /^(.{3})(.+)$/ にしてみたら、$ENV{'QUERY_STRING'} の値は「m78YYtz」になった。頭 6桁が消えちゃったようだ・・・

まあ、結局この怪しい動きの原因はわからなかったので、正規表現をやめ、

$a = substr($ENV{'QUERY_STRING'}, 0, 3);
$b = substr($ENV{'QUERY_STRING'}, 3);

のように substr を使って値を抜くようにしたら正常な動きになったので、(Perl で substr なんか、格好悪う(^^;)取り敢えずヨシとしたのだが、なんなんかねぇ?これ。

もし、たまたまこのページを読まれた Perl の偉い人がいらっしゃれば、ぜひともご教示くださいませ。
ちなみに、Apache は 1.3系です。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1843

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE