in reply to Parsing output from a command
Ahh, the power of regular expressions:
For information on these marvels of modern science, read perlretut. What I've done in the above is:use strict; use warnings; my $data; { local $/; $data = <DATA>; } my %drives = (); while ($data =~ /^(\w+)\s*.*?Serial Number\.*(\w*)\s/smg) { $drives{$1} = $2; } while ( my ($key, $value) = each %drives) { print "$key $value\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
- ^(\w+) - Find a line that starts with alphanumeric characters
- \s*.*? - Advance past the smallest amount of arbitrary text until:
- Serial Number - I encounter the phrase 'Serial Number'
- \.* - Advance past an arbitrary number of '.' characters
- (\w*)\s - Find a series of alphanumerics followed by whitespace
In Section
Seekers of Perl Wisdom