in reply to Re: Not able to capture information
in thread Not able to capture information
I would have written the code very slightly differently.
(1) Rather than using $1,$2,$3, I would use list assignment of the variables. The match "worked" if the last one is "defined".
(2) A complex regex of the date/time is not needed
(3) In the substitution, I would use "|" as the separator to reduce the number of "leaning toothpicks" although some folks figure that this is a bad idea. mileage varies.
#!/usr/bin/perl -w use strict; my @lines; while (<DATA>) { chomp; next if /^\s*$/; my ($date, $err_no, $err_msg) = m{\[(.*)\]\s+\[(.*)\]\s+ERRORMSG\s+(.*)}; if (defined $err_msg) # the match "worked"! { push @lines, $date.' === '.$err_no.' === '.$err_msg."\n"; } else { $lines[@lines-1] =~ s|\n$| $_\n|; } } print @lines; =prints 2012/02/16 00:08:34 === 29 === unknown error Can't insert into price t +able Please check Valueprice.pm line 52. 2012/02/16 00:08:34 === 39 === Invalid User 2012/02/16 00:14:52 === 105 === missing conversion rate 2012/02/16 00:14:52 === 29 === Can't use an undefined value as a HASH +reference at Value.pm line 77. =cut __DATA__ [2012/02/16 00:08:34] [29] ERRORMSG unknown error Can't insert into pr +ice table Please check Valueprice.pm line 52. [2012/02/16 00:08:34] [39] ERRORMSG Invalid User [2012/02/16 00:14:52] [105] ERRORMSG missing conversion rate [2012/02/16 00:14:52] [29] ERRORMSG Can't use an undefined value as a +HASH reference at Value.pm line 77.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Not able to capture information
by Don Coyote (Hermit) on Feb 18, 2012 at 09:14 UTC | |
by Marshall (Canon) on Feb 18, 2012 at 23:04 UTC |