It looks like the output is block oriented. Each block begins with
/^AMQ8409/ and ends with
end.
Can you read all of the output in at once? If so, you can use the /g regular expression modifier like this:
while ($output =~ m/...re.../sg) {
... process block ...
}
The regular expression could be something like:
$re = qr{AMQ8409.*?QUEUE\((.*?)\).*?RQMNAME\((.*?)\).*?RNAME\((.*?)\).
+*?end};
Note, this assumes that all blocks will have QUEUE, RQMNAME and RNAME in them and in that order. A more general approach is to break it up into blocks and then parse out anything that looks like IDENT(...) into a hash:
while ($output =~ m/(AMQ8409.*?end)/gs) {
my $block = $1;
my %hash;
while ($block =~ m{(\w+)\((.*?)\)}g) {
$hash{$1} = $2;
}
# process block
# use $hash{QUEUE}, $hash{RQMNAME}, $hash{RNAME}, etc.
}
Finally, for a line-oriented processing solution, try something like:
my %hash;
while (<>) {
if (m/^AMQ8904/) { # start of block found
%hash = ();
} elsif (m/end/) { # end of block found
... process block ...
} else {
$hash{QUEUE} = $1 if m/QUEUE\((.*)\)/;
$hash{RNAME} = $1 if m/RNAME\((.*)\)/;
# ... add more variables of interest ...
}
}
-
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.