- ベストアンサー
フォームからの値
今、pealで作成した CGIのフォームからの値を下記のように受け取っております。 $a = $in{"name"}; $b = $in{"pass"}; これを、配列で受け取りたいのですが、 $aを@aに変えただけでは、 $a[0]にすべての文字が入ってしまいます。 配列での受け取り方は、何か特殊な方法であるのでしょうか? また、一度変数にいれてしまった文字を、 配列に入れ替える、またはある1文字だけ抽出する方法など ありましたら、どうか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
@a = @in{"name", "pass"}; $a = $in{"name"}; $b = $in{"pass"}; @a = ($a, $b); $FirstLetterOfA = substr($a, 0, 1);
その他の回答 (3)
- lesstia
- ベストアンサー率45% (44/96)
$inがすでに配列になってるので入れ替える必要ないように見えます。 数字の添字で参照したいとのことでしたら、せっかく連想配列になってるので、設計を見直した方がよいかと。 でも一応foreachでループ回してカウンタ取ればできますね。 >ある1文字だけ抽出する どんなことがやりたいかちょっとわからないので「正規表現」を調べてみてください。
- kinoswita
- ベストアンサー率50% (4/8)
@pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } このようにデコードしてるのであれば @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; push(@a,$value) if $name eq 'name' ; #この部分 push(@b,$value) if $name eq 'pass' ; #この部分 } このように変更してみたらいかがでしょう? 回答の意味が違っていたらごめんなさい。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
≫配列に入れ替える、またはある1文字だけ抽出する方法など そのくらいの内容になると、マニュアルを購入しておいたほうが良いかと思います。下記↓ サーバーは、フォームのデータを、GETの場合はQUERY_STRINGか、POSTの場合は標準入力STDNから受け取ります。 それを順番に&で区切って、さらに=で区切り、エンコードしてデータを下の形に戻してから、それぞれを$[name]{'[data]}に入れるか、push で@namesと@valueに入れていくかです。 ライブラリやモジュールを使用されているなら、それらも自動的にできるはずです。そちらを確認してください。 Amazon.co.jp: CGI&Perlポケットリファレンス (Pocket reference): 藤田 郁, 三島 俊司: 本 http://www.amazon.co.jp/CGI-Perl%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-Pocket-reference-%E8%97%A4%E7%94%B0/dp/4774107557/ref=sr_1_19?ie=UTF8&s=books&qid=1228983211&sr=8-19