use strict; use warnings; my $data; { local $/; $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