- ベストアンサー
Perlモジュールのparam()を使って
ネットでいろいろ調べていたらPerlモジュールのparamですべてのパラメーターを得る場合引数をいれずに param()とすればいいとかかれていたので、すべてのパラメーターから,カンマがあればエラーにするという構文を書こうとしましたがうまくいきません。 @params = param(); foreach $param (@params) { if($param =~ /\,/){&error('フォーム内に「,」は入力できません。');}; } 上のようにしてもスルーします。 間違っているのだと思いますが、すべてのパラメーターからマッチングさせたい場合どのようにすればいいのでしょうか? よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
CGI.pmを利用している場合、各キーに対する値は param(キーワード)で取り出せます。 なので元のスクリプトの修正は $param を利用して if(param($param) =~ /\,/){&error('フォーム内に「,」は入力できません。');} でよいかと思います。 ちょっと長いですが参考URLにCGI.pmの説明を載せています。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
param(); の前に全角スペースがあります。 このために全体がエラーになっているのではないでしょうか? ついでに、if(){}の後に;は必要ありません。(書いてもいいですが) foreachの部分自体は間違っていないと思いますが、 どのフィールドでエラーがあったのか表示すると良いかと思います。 どのフィールドでということをしないのであれば、 1つエラーがあれば、抜けるようにした方がいいかもしれません。
お礼
No1の補足でも答えましたが値のほうを取得したいので当然カンマはでてきません・・・ どうすれば・・
- steel_gray
- ベストアンサー率66% (1052/1578)
param()で得られるのはパラメータのキーワードの一覧です。 クエリがabc=123&def=456だとしたら @paramsにはabcとdefが入ります。
お礼
まったくもって勘違いしていました。 私が得たいのは123のほうです。 パラメーター値を得たい場合はどうすればいいのですか?
お礼
@params =param(); foreach $param (@params) { if(param($param) =~ /\,/){&error('フォーム内に「,」は入力できません。');}; } としたらばっちりうまくいきました。 いわれればそうだなーと思うのですが、おもいつきませんね・・・ 助かりました。