並び順。
お仕事中に同僚さんから
例えば checkbox とかで、同じ name で、value がいくつも渡される場合
perl だと、どういう順番で値を取得するのか?という質問を受ける。
つまり、<input type="checkbox" name="test" value="2" /> の次が
<input type="checkbox" name="test" value="1" /> と並んでた場合、
両方をチェックしてGET/POSTした時、
この出現順というか、並び順通りに 2 1 の順番で
例えば、配列に格納したり出来るのか?って事なんですが。
GET なり、POST なり、どちらにしても
キー=値&キー=値 の文字列で送られる訳なので、
つまりは、test=2&test=1 と送信されて
これを素直に左から右に順に1つ1つ処理していけば、
ちゃんと 2 1 の順で格納出来るものの。
この格納した値を、順番を意識せず、
なんやかんやと、ハッシュに入れなおしたり
foreach なんかしちゃうと、
勿論、それは保証出来ないのでして。
かくして、そういやぁ、Catalyst ではどうなの?と思い、
家に帰ってからテスト。
<html>
<body>
<form method="post" action="/">
<input type="checkbox" name="test" value="B" />
<input type="checkbox" name="test" value="2" />
<input type="checkbox" name="test" value="11" />
<input type="checkbox" name="test" value="a" />
<input type="checkbox" name="test" value="1" />
<input type="checkbox" name="test" value="b" />
<input type="checkbox" name="test" value="3" />
<input type="checkbox" name="test" value="A" />
<input type="submit" />
</form>
</body>
</html>
んで、これで submit ボタン押下すれば、
POSTされる値は当然、
test=B&test=2&test=11&test=a&test=1&test=b&test=3&test=A となりまして。
Controller で $c->req->param('test') の値を
グルグル順に見てみたところ、期待通りに
B 2 11 a 1 b 3 A の順で配列のリファレンスとして格納されていたのでした。
えがったえがった。
って、いや、家だと FastCGI 入れてないから、
職場の環境と、ちょっと動きが違ったら嫌だなぁ。
明日会社でも、一応実験してみるかー。