アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、pealで作成した
CGIのフォームからの値を下記のように受け取っております。

$a = $in{"name"};
$b = $in{"pass"};

これを、配列で受け取りたいのですが、
$aを@aに変えただけでは、
$a[0]にすべての文字が入ってしまいます。

配列での受け取り方は、何か特殊な方法であるのでしょうか?

また、一度変数にいれてしまった文字を、
配列に入れ替える、またはある1文字だけ抽出する方法など
ありましたら、どうか教えてください。

A 回答 (4件)

@a = @in{"name", "pass"};



$a = $in{"name"};
$b = $in{"pass"};
@a = ($a, $b);

$FirstLetterOfA = substr($a, 0, 1);
    • good
    • 0

$inがすでに配列になってるので入れ替える必要ないように見えます。


数字の添字で参照したいとのことでしたら、せっかく連想配列になってるので、設計を見直した方がよいかと。
でも一応foreachでループ回してカウンタ取ればできますね。

>ある1文字だけ抽出する
どんなことがやりたいかちょっとわからないので「正規表現」を調べてみてください。
    • good
    • 0

@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' ; #この部分
}

このように変更してみたらいかがでしょう?
回答の意味が違っていたらごめんなさい。
    • good
    • 0

≫配列に入れ替える、またはある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% …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!