http://qs321.pair.com?node_id=752912


in reply to Re: Parsing output from a command
in thread Parsing output from a command

Another approach would be to join the lines of the result and match against that. For example:

#!/usr/bin/perl use strict; use warnings; # Slurp! my @results = <DATA>; my $results_string = join '', @results; # Note: Direct assignment to hash works due # to exactly two matches. Error checking would # not be a bad idea, either (what happens if the # match fails?) my %matches = $results_string =~ /(hdisk\d+).+?Serial Number\.+(\w+)/g +s; for my $device (keys %matches) { print "$device $matches{$device}\n"; } __DATA__ hdisk0 P1/Z1-Aa 16 Bit LVD SCSI Disk Drive (18200 MB) Manufacturer................IBM Machine Type and Model......ST318305LC FRU Number..................09P4437 Serial Number...............0009E05B Part Number.................09P4436 hdisk1 P1/Z1-Ab 16 Bit LVD SCSI Disk Drive (18200 MB) Manufacturer................IBM Machine Type and Model......ST318305LC FRU Number..................09P4437 Serial Number...............0004A0D2 Part Number.................09P4436

Output:

hdisk1 0004A0D2 hdisk0 0009E05B