Perl の新機能。
次のようなレポートを解析する必要があります。
2012-05-29@emaillocalpart@emaildomain@customerid@errormessage@messageid
私が使用した:
my @fields = split(/@/, $line, 6);
ほとんどの場合は問題なく動作しますが、エラー メッセージに電子メール アドレスと、その電子メールの @ 記号の後のすべてのテキストが含まれ、文字列の最後がメッセージ ID で終わることがあります。
@s の量をチェックして条件付き解析を行うことを考えましたが、より良い方法はありますか?
編集:
目的の出力は文字列のリストであり、エラー メッセージには含まれているものはすべて含まれています (場合によっては電子メール アドレスも含まれます)。
同じレポートを使用する他のアプリケーションがあるため、セパレーターを変更したり、出力をエスケープしたりすることはできません。
レポートのサンプル行:
2012-05-29@joedoe@example.com@AB99-5@440 4.4.1 Some error occurred@XYZ35
2012-05-29@foobar@invalid.com@ZZ88-6@550 5.1.1 <foobar@invalid.com>... User Unknow@GGH93
2012-05-29@barfoo@invalid.com@YY88-0@550 5.1.1 barfoo@invalid.com no such user@GGH93
行 1 を解析した後の @fields の予期される内容:
2012-05-29
joedoe
example.com
AB99-5
440 4.4.1 Some error occurred
XYZ35
そして2行目を解析した後:
2012-05-29
foobar
invalid.com
ZZ88-6
550 5.1.1 <foobar@invalid.com>... User Unknow
GGH93