my %slot_lkup = reverse map /^Slot address (\d+).*\n +Volume Tag[ .]+([^\n]+)/s, split /(?<=\n)(?! )/, $inventory; ... $slot_lkup{$vol} ... #### my %slot_lkup; { my $slot; while (<$fh>) { if (/^Slot address (\d+)/) { $slot = $1; } elsif (/^ *Volume Tag[ .]+([^\n]+)/) { $slot_lkup{$1} = $slot; } } } ... $slot_lkup{$vol} ...