ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

Perlの謎挙動

※ 解決してません。

QUERY_STRINGまわりの挙動がよくわからないって話。

環境

本文

GETで値を受け取って、そのまま画面に書き出すだけの簡単なPerl/CGIを書いた。

test.pl

use utf8;
use strict;

print "Content-type: text/plain; charset=utf-8\n\n";

my $get = $ENV{QUERY_STRING};

print $get;
print "\n";

&result;

sub result {
	print $get;
}

これを
http://localhost/test.pl?hello
として呼び出した。
想定では、以下の表示がされるはず・・・

hello
hello

確かにその通り表示された。
f:id:AyeBee_TY:20140927023314j:plain

しかし、次に
http://localhost/test.pl?bye
として呼び出した。もちろん、

bye
bye

となることを予想したが、実際には下記のようになった。
f:id:AyeBee_TY:20140927023443j:plain

!?
なぜか、最初に指定した値を保持したままになっている。

http://localhost/test.pl?hoge にアクセスするも、
f:id:AyeBee_TY:20140927024011j:plain

・・・・・わけがわからないよ!


試しに、下記のように書き換えてみた。

use utf8;
use strict;

print "Content-type: text/plain; charset=utf-8\n\n";

print $ENV{QUERY_STRING};
print "\n";

&result;

sub result {
	print $ENV{QUERY_STRING};
}

http://localhost/test.pl?hello
f:id:AyeBee_TY:20140927024328j:plain

http://localhost/test.pl?bye
f:id:AyeBee_TY:20140927024429j:plain

http://localhost/test.pl?hoge
f:id:AyeBee_TY:20140927024531j:plain

ちゃんと表示されてるし!
こんなの絶対おかしいよ!


どうやら、ファイルを書き換えた時に、2行目が更新されるらしいことはわかった。

実はすごい初歩的なことなのかもしれない。

さて、どうしたもんでしょう。