• ベストアンサー

Perlモジュールのparam()を使って

ネットでいろいろ調べていたらPerlモジュールのparamですべてのパラメーターを得る場合引数をいれずに param()とすればいいとかかれていたので、すべてのパラメーターから,カンマがあればエラーにするという構文を書こうとしましたがうまくいきません。 @params = param(); foreach $param (@params) { if($param =~ /\,/){&error('フォーム内に「,」は入力できません。');}; } 上のようにしてもスルーします。 間違っているのだと思いますが、すべてのパラメーターからマッチングさせたい場合どのようにすればいいのでしょうか? よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

CGI.pmを利用している場合、各キーに対する値は param(キーワード)で取り出せます。 なので元のスクリプトの修正は $param を利用して if(param($param) =~ /\,/){&error('フォーム内に「,」は入力できません。');} でよいかと思います。 ちょっと長いですが参考URLにCGI.pmの説明を載せています。

参考URL:
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
titikun00
質問者

お礼

@params =param(); foreach $param (@params) { if(param($param) =~ /\,/){&error('フォーム内に「,」は入力できません。');}; } としたらばっちりうまくいきました。 いわれればそうだなーと思うのですが、おもいつきませんね・・・ 助かりました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

param(); の前に全角スペースがあります。 このために全体がエラーになっているのではないでしょうか? ついでに、if(){}の後に;は必要ありません。(書いてもいいですが) foreachの部分自体は間違っていないと思いますが、 どのフィールドでエラーがあったのか表示すると良いかと思います。 どのフィールドでということをしないのであれば、 1つエラーがあれば、抜けるようにした方がいいかもしれません。

titikun00
質問者

お礼

No1の補足でも答えましたが値のほうを取得したいので当然カンマはでてきません・・・ どうすれば・・

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

param()で得られるのはパラメータのキーワードの一覧です。 クエリがabc=123&def=456だとしたら @paramsにはabcとdefが入ります。

titikun00
質問者

お礼

まったくもって勘違いしていました。 私が得たいのは123のほうです。 パラメーター値を得たい場合はどうすればいいのですか?

関連するQ&A