G'day seismofish,
Welcome to the Monastery (at least with respect to posting).
You can use constants to avoid:
-
The need to reference capture variables; e.g. ($1,$2,$3,$4,$5,$6,$7).
-
The need to declare and define a list of variables;
e.g. ( $mon, $day, $time, $interface, $rate, $duplex, $lpa ).
-
The use of named captures requiring a multitude of ?<NAME> added to your regexes.
Here's an example:
#!/usr/bin/env perl
use strict;
use warnings;
use constant {
MON => 0,
DAY => 1,
TIME => 2,
INTERFACE => 3,
RATE => 4,
DUPLEX => 5,
LPA => 6,
};
use Test::More tests => 12;
my $re_dn = qr{^(\w+) (\d+) (\d{2}:\d{2}:\d{2}) .*: eth(\d): link down
+};
my $re_up = qr{^(\w+) (\d+) (\d{2}:\d{2}:\d{2}) .*: eth(\d): link up,
+(\d+)Mbps, ([^,]+), lpa (\w+)};
my @logs = (
'May 19 13:58:01 foo: eth0: link down',
'May 19 13:58:11 foo: eth0: link up, 100Mbps, bar, lpa quux',
'# some comment in the logfile',
);
for (@logs) {
my @matches;
if (@matches = /$re_dn/) {
is $matches[MON], 'May';
is $matches[DAY], 19;
is $matches[TIME], '13:58:01';
is $matches[INTERFACE], 0;
}
elsif (@matches = /$re_up/) {
is $matches[MON], 'May';
is $matches[DAY], 19;
is $matches[TIME], '13:58:11';
is $matches[INTERFACE], 0;
is $matches[RATE], 100;
is $matches[DUPLEX], 'bar';
is $matches[LPA], 'quux';
}
else {
is 0+@matches, 0;
}
}
Output:
1..12
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10
ok 11
ok 12
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.