アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問させていただきます。

メールヘッダに対して以下のプログラムを実行します。

~略
$file_data_str = join("", @file_data);
@received_datas = split(/Received:/, $file_data_str);
@received_datas = reverse(@received_datas);
foreach $sorted(@received_datas){
if(($sorted =~ /by\s\w+.abc.jp/) and ($sorted =~ /(\[\d+\.\d+\.\d+\.\d+\])/)){
$& =~ /(\d+\.\d+\.\d+\.\d+)/;
$ipadd = $1;
print $ipadd;
print "\n";
}
}
}
exit;

すると、by\s\w+.abc.jpを含むReceived行のIPアドレスが全て抽出され、複数出力されます。(以下実行結果)
114.114.96.20
158.217.208.15

私はこの初めの"114.114.96.20"のみを出力したいのですが、どうしたらいいでしょうか?
助言のほどをお願いいたします。

A 回答 (1件)

114.114.96.20


158.217.208.15

この2つの違いは?
具体的、どんなものは出力したくて、どんなものは出力したくないのですか?
前回の続きだとして

・最初に見つかったものだけを出力したい

1つ出力したところで、lastとかでループから抜ける。
出力したかどうか、何番目かを記憶する変数を用意して、1つめのときだけ出力する 等

・( IPアドレス [IPアドレス])になっている行だけを出力したい
→ ifで判定する条件を、これだけがマッチするようにする

・IPアドレスが特定の範囲だったら
→抜き出したIPアドレスから値を取り出し、その範囲かどうかを判定する

など、目的が違えば、やり方も変わります

この回答への補足

kmee様、続けてありがとうございます。

"初めに見つかったものだけを出力したい"、ということでした。
目的がはっきりしていませんでした、申し訳ありません。

アドバイスとおりにすこしやってみます。
ありがとうございました。

補足日時:2012/12/21 23:37
    • good
    • 0
この回答へのお礼

lastをつければ一発でした。。。
なぜこんなことにきがつかなかったのか、猛省してます。

本当にお世話になりました。
ありがとうございました。

お礼日時:2012/12/21 23:39

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