dポイントプレゼントキャンペーン実施中!

たびたび質問すいません。

エラーチェックについて質問です。
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がなかったら登録してません。と
はきだす処理の記述はどのようにしたらいいのでしょうか?

A 回答 (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 は登録されていません");
}
    • good
    • 0

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 は登録されていません");
ぐらいでいいんじゃないかな
    • good
    • 0

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