- ベストアンサー
エラーチェック、ファイルに特定の文字列があったらエラーの処理を出したい。
たびたび質問すいません。 エラーチェックについて質問です。 sub err_check{ $data="data.txt"; open(LOG,"$data"); @readerlist = <LOG>; close(LOG); foreach $list (@readerlist) { $newlist = $list; $newlist =~ s/\n//g; $newlist =~ s/\r//g; if($newlist eq $mail) {&err("$mail は既に登録済みです");} } } という記述は動作しました。この逆、$mailは登録されていませんというエラー処理を吐き出すには、($newlist eq $mail)を($newlist ne $mail)とやればできるのかと思いましたがうまくいきませんでした。 data.txtの中身はメールアドレスですが、アドレスごとに改行コード↑が入ります。data.txtのファイルの中身を検索して、$mailがなかったら登録してません。と はきだす処理の記述はどのようにしたらいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リストに特定のデータが「ない」と言えるためには、リストの要素をすべて確認し終えてからでなくてはならないので、例えば、プログラムの一部を以下のように書きかえる必要があると思います # $flag: 見つかったか確認のためのフラグ。 # 0 ... 「まだみつかっていない」 # 1 (2, 3, ...) ... 「すでに見つかった」 $flag=0; foreach $list (@readerlist) { $newlist = $list; $newlist =~ s/\n//g; $newlist =~ s/\r//g; if($newlist eq $mail) {$flag++} # 見つかった場合、あるいは"$flag++; last;" } # 一度も以上の「見つかった場合」が実行されなかったとき: if(! $flag) { &err("$mail は登録されていません"); }
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
foreach $list (@readerlist) { $newlist = $list; $newlist =~ s/\n//g; $newlist =~ s/\r//g; if($newlist eq $mail) {&err("$mail は既に登録済みです");} } を foreach $list (@readerlist) { $newlist = $list; $newlist =~ s/\n//g; $newlist =~ s/\r//g; return if($newlist eq $mail); } &err("$mail は登録されていません"); ぐらいでいいんじゃないかな