Hello,

is there any way to extract the queued ID (7BC5A446) from the first line and 
also match the second with only one regex??


#!/usr/bin/perl 
use strict;
use warnings;
use 5.010;

while(<DATA>){
    if 
(/^(?<Month>\S+?)\s+?(?<Day>\S+?)\s+?(?<Time>\S+?)\s+?(?<Host>\S+?)\s+?(?<Program>\S+?):\s+?(?<QueueNumber>\S+?):\s+?to=(?<To>\S+?),\s+?relay=(?<relay>\S+?),\s+?delay=(?<delay>\S+?),\s+?delays=(?<delays>\S+?),\s+?dsn=(?<dsn>\S+?),\s+?status=(?<status>\S+?)\s+?(?<statusMsg>(?:queued
 as (?<NextQueueID>.*))?.*)$/i) { 
        my $nextQueueID = $+{NextQueueID} || "None";
        say "LineType: \"To\" 1: $+{Month} 2: $+{Day} 3: $+{Time} 4: $+{Host} 
5: $+{Program} 6: $+{QueueNumber} 7: $+{To} 8: $+{relay} 9: $+{delay} 10: 
$+{delays} 11: $+{dsn} 12: $+{status} 13: $+{statusMsg} 14: $nextQueueID";
    } else {
        say "ERROR with line: ".$_
    }
}

__DATA__
Mar  5 10:05:45 antispam3 postfix/smtp[1595]: 4CE0081: 
to=<user...@example.com>, relay=clamav.example.com[1.1.1.1]:25, delay=0.31, 
delays=0.14/0/0.01/0.16, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 
7BC5A446)
Mar  5 10:06:37 antivir1 postfix/smtp[8193]: 7BC5A446: 
to=<user...@example.com>, relay=mail.example.com[2.2.2.2]:25, delay=52, 
delays=0.15/50/0.03/2.1, dsn=2.5.0, status=sent (250 2.5.0 Ok.)

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to