in reply to Turning regex capture group variables into arrays, then counting the number of objects in the array
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:
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:$output = `program args`; # collect output into one multiline string @output = `program args`; # collect output into array, one line per +element
#!/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!
|
---|