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!