frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

並び順。

お仕事中に同僚さんから

例えば 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 入れてないから、

職場の環境と、ちょっと動きが違ったら嫌だなぁ。

明日会社でも、一応実験してみるかー。