68user's page 掲示板

Prev< No. 3889〜3892> Next  [最新発言に戻る] [過去ログ一覧]
No. 3889 # スナフキン 2004/07/24 (土) 17:48:01
書き忘れましたが perl でのお話です。

No. 3890 # 68user 2004/07/24 (土) 18:18:52
>>3888 スナフキン
$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=4&cbox2=5);
foreach (split(/&/, $query)){
        my($name, $value) = split(/=/, $_);
        print qq($name=[$value]\n);
        if (exists $FORM{$name}){
                push(@{$FORM{$name}}, $value);
                print "\@{$FORM{$name}}=@{$FORM{$name}}\n";
        } else {
                $FORM{$name} = $value;
        }
}
print "\@1=@1\n";


cbox1=[1]
cbox1=[2]
@{1}=2
cbox1=[3]
@{1}=2 3
cbox2=[1]
cbox2=[4]
@{1}=2 3 4
cbox2=[5]
@{1}=2 3 4 5
@1=2 3 4 5

というわけで、最初のループで $FROM{$name} には 1 が入り、
@{$FORM{$name}} はシンボリックリファレンスと解釈され、結局
@1 に push しているわけです。

結局は一度目のループとそれ以降のループを分けず、常に
        push(@{$FORM{$name}}, $value);
すればよいと思いますが、そもそも何をやりたかったのかによりますかね。

No. 3891 # スナフキン 2004/07/24 (土) 20:47:20
!!!なんとなるほど!シンボリックリファレンスと解釈されたとは・・・
すばやい回答大変助かりました。ありがとうございます。

このルーチンはいくつかある他のプログラムの一部なんですが、既に$FORM{〜}
でアクセスする箇所が沢山有ったので、それらを変更する事なくという部分に
こだわりすぎました。

cgi-lib.pl とかを見るとparse時に \0 をセパレータにしてスカラーに入れて
いますが、そうではなく同名変数の配列にぶち込んじゃおうと思ったのですが
他の方法をかんがえてみます。

No. 3892 # じぇぃじぇぃ 2004/07/24 (土) 23:00:26
超初心者の質問でごめんなさい。

コマンドを入力すると、Command not found って、表示されるんです。
スペルは間違っていないのに。何が原因なのでしょうか?

また、コマンドを入力した時に、値段のような文字が、ずらっと表示される事が
あります。例:\245\242\245\257\245\273\245\271\270\242\244\254\244\242。
このようなことが起きる原因は、何でしょうか?

対処方法を教えて下さい。お願い致します。

Prev< No. 3889〜3892> Next  [最新発言に戻る] [過去ログ一覧]