Assuming that the big regex you posted is *actually* tested against one
line of command output and bug free, I'm gonna give you a skeletal example of
one simple way to proceed.
But first, Perl is influenced by something called context:
$output = `program args`; # collect output into one multiline string
@output = `program args`; # collect output into array, one line per
+element
So your code probably end up in an infinite loop, because $output is a
string which is evaluated as having the true boolean value inside the while()
test.
Try to start with something like this instead:
#!/usr/bin/perl
#
use strict;
use warnings;
my @output = `bpdbjobs`;
for my $line (@output) {
chomp $line;
my @matches = $line =~
/(\d+)?\s+((\b[^\d\W]+\b)|(\b[^\d\W]+\b\s+\b[^\d\W]+\b))?\s+((Done)|(A
+ctive)|(
\w+\w+\-\w\-+))?\s+(\d+)?\s+((\w+)|(\w+\_\w+)|(\w+\_\w+\_\w+))?\s+((b[
+^\d\W]+\
b\-\b[^\d\W]+\b)|(\-)|(\b[^\d\W]+\b))?\s+((\w+\.\w+\.\w+)|(\w+))?\s+((
+\w+\.\w+
\.\w+)|(\w+))?\s+(\d+)?/g; ## <<--- Beware of the global modifier g h
+ere!
if (@matches) {
# @matches now is an array containing the captured matches
# Pretty printing time ?
}
}
It now should be a matter of double checking the regex correctness and
maybe using some modules to help with printing, e.g.: Text::Table
?
Good luck!
-
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.
|