• ベストアンサー

Perlでの改造方法

とほほHPでPerlについて勉強し始めたのですが、わからない箇所があり困っております。 フォームaに「1」と記入した場合はフォームbに「2」と記入しないとエラーが起こるようにしたいのですが、どうしてもわかりません。 if ($in{'a'} =~ /1/だった場合に$in{'a'} !~/2/) {&error("エラー文字");} こんな感じにしたいのですが、どうすればいいのでしょうか。 また、Perlの勉強をするにお勧めの本などありましたら教えていただけると助かります。宜しくお願いいたします。

  • Perl
  • 回答数3
  • ありがとう数10

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> if ($in{'a'} == a1 and $in{'b'} == b1) { >   # OK > } else { >   # エラー > } ==演算子を使った場合、数値として比較され、 数字を含まない文字列はすべて数値の0として扱われます。 文字列として比較する場合は ==演算子ではなく eq演算子を使ってください。 > if ($in{'a'} eq "word1" and $in{'b'} eq "word2") { あと、a1やb1は"a1"や"b1"という文字列のつもりでしょうか? 文字列なら、それと分かるようにダブルコーテーションなどで囲んだ方が良いです。 もしまだうまくいかない場合は、どのような不都合なのかの具体的な補足をお願いします。 ($in{'a'}に文字列"xxx"が入っているとき、if($in{'a'} eq "xxx"){#OK}でOKにならない、などのように) なお、あえて正規表現をつかって完全一致を調べるなら > $a =~ /^word1$/ とする方法があります。 (これくらいなら正規表現を使わなくてもeqで良いですが。)

cocolink
質問者

お礼

ご回答有難うございました。 お返事いただく前に思考錯誤して以下の内容で修正しておりましたが、その事をお伝えするためのスペースがありませんでした。このような感じでよろしいのでしょうか。 if ($in{'a'} =~ /^(a1)$/ and $in{'b'} !~/^(b1)$/) { エラー } if ($in{'a'} =~ /^(a2)$/ and $in{'b'} !~/^(b2)$/) { エラー } 教えていただいた方法でもいろいろ試してみます。大変勉強になるご回答を本当に有難うございました。

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

$in{'a'} =~ /1/ だと、 123 や 52147 や あああ1あああ 等でも通ってしまうので、 if ($in{'a'} == 1 and $in{'b'} == 2) { # OK } else { # エラー } とすればいいのではないでしょうか。

cocolink
質問者

お礼

ご回答有難うございます。大変勉強になりました。

cocolink
質問者

補足

あれから教えていただいた方法でいろいろ試してみましたが、上手くいきませんでした。 > $in{'a'} =~ /1/ > だと、 123 や 52147 や あああ1あああ 等でも通ってしまうので、 指定された文字列が含まれるでなく、指定された文字列以外はエラーが起こるようにするにはどうすればいいのでしょうか。お手数をおかけしますが、宜しくお願いいたします。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

ifの中に「条件Aかつ条件B」という条件を書きたい場合は、 && または and を使ってください。 > if ($in{'a'} =~ /1/ && $in{'a'} !~/2/) &&などの詳しいことは、 http://www.rfs.jp/sb/perl/02/03.html の「論理演算子」を見てください。 またそれ以外の書き方として、ifを2つ使うことも考えられます。 > if ($in{'a'} =~ /1/){ >   if($in{'a'} !~/2/){処理} > }

cocolink
質問者

お礼

ご回答有難うございました。おかげさまで解決できました。

cocolink
質問者

補足

何度も申し訳ございません。No.2でのmoon nightさんへの「この回答への補足」では説明不足でした。 教えていただいた方法で条件が一つだけでしたら問題なく動作致しました。ですが私の場合は以下のように使用しており、このように複数指定した場合はうまく動作しませんでした。また数字ではなく、文字列の場合も不具合が起こるようです。勉強不足で大変恐縮ですが、宜しくお願いいたします。 if ($in{'a'} == a1 and $in{'b'} == b1) { # OK } else { # エラー } if ($in{'a'} == a2 and $in{'b'} == b2) { # OK } else { # エラー } if ($in{'a'} == a3 and $in{'b'} == b3) { # OK } else { # エラー }

関連するQ&A

  • 電話番号かどうかを判断したい(Perl)

    フォームに入力された文字が電話番号かどうかを判断したいと考えています。 ハイフンは使いません。 if ($$in{tel} =‾ /¥-/) { &error("電話番号はハイフン( - )なしの10桁または11桁でご記入ください"); } if ($$in{tel} =‾ /^\d{10,}+$/) { &error("電話番号はハイフン( - )なしの市外局番からご記入ください"); } このようにしてみたのですが、うまく動きません。 どうすればいいんでしょうか... よければ教えてください。

    • ベストアンサー
    • Perl
  • Perlを改造してエラーチェックできるようにするには

    Perl超初心者です。 フリーのアンケートフォームを変えたいと思っています。 名前などを必須項目に変えて、記入がなかった場合に チェックがかかるようにするにはどのように変えたらよいでしょうか? すみませんが、どなたか教えてください。

    • ベストアンサー
    • Perl
  • perlでデータベース

    こんばんは。 現在perlを用いてHPの管理システムができるよう勉強しております。 次に、HP上にアクセスした人のログをデータベース化して保管する事をしたいのですが、 持っている本ではデータベースの事に触れておりません。 perlにデータベースの機能が備わっていると聞きましたが、 それについて勉強するのに、段階的に読み進めれる・判り易いお勧めの本がありましたら教えて下さい。 宜しくお願いします。 現在perlの入門的な本を2冊程読んだレベルです。

  • Perlで長音

    無謀なのかもしれませんが、Perl3日生(勉強しはじめて3日目)の分際で、フリーのスクリプトを改造しています。 そのスクリプトは検索エンジンなのですが、タグが無効になっていたため、いくつかのサイトを参考にして、指定したタグだけを許可するように改造しました。 しかし、何故か登録する文字列(html)に、長音"ー"が入った時だけエラーとなってしまいます。 Perlでは長音というのは何か特別な働きをするものなのでしょうか? ソースは以下のページを参考にしてますので、以下のページに書かれているものとほぼ同じです。 http://cuo.press.ne.jp/cgi/b04_1.html フォームから送信?する文字列が、 <a href=xxx>yahoo</a> であれば問題ないのですが、 <a href=xxx>ヤフー</a> とするとエラーになります。 また、不思議なことに、文字列でも <b>ヤフー</b> <img src=xxxx>ヤフー<br> といった、他のタグでは問題がありません。 何故でしょうか? どなたかお詳しい方、ヒントだけでも結構ですので、 何か思い当たることがございましたら、お教え下さい。 よろしくお願い致します。m(_ _)m

    • ベストアンサー
    • Perl
  • perl if文 助けて~

    perl初心者ながら暇見て住所CGIフォームを作っています。 だんだん完成してきましたが今一歩です(T_T)ご指導下さい! 名前、電話、都道府県、住所、の4つの項目があります。 {'nam'} {'tel'} {'pre'} {'add'} {'pre'}はSELECToption 他はtextFORM 全部記入した時には、次に進めてOKなのです。 if ((($in{'nam'}) && ($in{'tel'}) && ($in{'add'}) && ($in{'pre'} > "0")) { print 全部未記入時でも、次に進んでも無記入なのでOKです。 エラー時に&errorのエラー画面に飛ばす事も出来ました。 ただ、書き忘れ時が困るので {'nam'} {'tel'} {'pre'} {'add'}の内、1~3つとか記入して 他が抜けてたりした時だけエラーにしたいのです。 でも間違って空スペースとかでエラーが出て欲しくないし・・・ まずは下記でやってもまだダメです、($in{'pre'} > "0")が未選択時がダメです(T_T) 色々やってみたのですが、何か良い方法ありませんか? #### ($in{'pre'} > "0")は、"1"以上が「真」の条件です。 if ((($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "")) && ($in{'pre'} > "0")) { &error("エラー"); }

    • ベストアンサー
    • Perl
  • Perlを勉強したいのですが…

    タイトルの通りPerlを勉強したいと思っています。 その為に本を購入しようと思っているのですが、いろいろあってどれがいいのか判りません。 勉強したい理由は ●商用のホームページを作るのに注文フォームを作りたい。 ●後々は掲示板も作成したい。 ですが、プログラムについてはまったくの初心者です。(HTML、スタイルシートはなんとか理解しています。) プログラム初心者でも解かりやすいお勧めの本があったら教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlでのcsvファイルの比較・上書き

    はじめまして、今回初めて質問させていただきます。 今、perlでAとBという2つのCSVファイルを比較して、マッチしない箇所がある場合はAの情報がBに上書きされるというスクリプトを作成しようとしています。 OPEN関数と比較演算子を利用するのはわかっているのですが、上書きさせる方法がわかりません... ネットで調べたりしたのですが、参考になるHPがなかなか見つからなかったので、こちらに質問させていただきました。 サンプルとなるプログラムやHP等を教えていただければ、勉強になりますのでとても助かります。 よろしくお願いします。 追記 Bのcsvファイルには住所録情報が格納されておりまして、AのcsvファイルにはBの住所録情報の中から変更箇所がある新しい住所録情報が格納されております。

  • perlのif文で・・・・・

    こんにちは。 お聞きしたいのですが、perlのif(A eq B)文で、crypt関数で暗号化した文字列の比較をしているのですが、画面に双方の変数をテスト表示をしてみて、AとBは一致しているにもかかわらず、このif文を飛ばしてしまいます。 暗号化した変数を使うのは初めてなんですが、何か可能性として考えられることはありますか? 自分でも考えられるチェックはしたつもりなんでが・・・

  • VBA 2つのセルの両方に記入しないと空欄

    お世話になります。 VBAでの質問です。 (1)下記でA1が空欄ならメッセージボックスで"未記入箇所があります。"とでますが、  A1、B1のどちらかに文字が入っていれば  メッセージボックスを表示させたいです。 ※どちらも未記入、どちらも記入の場合はメッセージなしです。 If Application.CountBlank(Range("A1")) Then MsgBox "未記入箇所があります。" Exit Sub End If もしくは (2)A1に『111』B1に『』と、どちらか未記入の場合C1は空欄になる  計算式を教えて頂きたいです。  どちらも未記入、どちらも記入の場合は何かC1に文字が入る計算式  (C1への入力は何でも良いです) ((1)が不可能な場合、(2)のC1を(1)のメッセージボックスにあてます) ※A1,B1の入力文字は数字や文字など多種 ※A1,B1,C1のセルは離れています。 ※『』は空欄の意味です。 よろしくお願い致します。

  • perlの引数でオプションとオプションなしの両者を扱える方法

    test.pl -a -b opt file.txt のようにオプション付きの引数とそうではない場合の引数を準備したいのですが、どの様にしたら良いのでしょうか? イメージ use Getopt:Std; getopts('ab:); if($opt_a){...} if($opt_b){...} open(IN, "$ARGV[0]") || die "error"; ... 上手くいかなかったです↑↑↑

専門家に質問してみよう