my $r; while (<>) { if (/^Current software package status is: *(.*)/) { $r->{package_status} = $1; } elsif (/^(WORKSTATION\d+):/) { $r->{workstation} = $1; $r->{workstation_line} = $. } elsif (/^(User program exit code: .*)/) { $r->{exit_message} = $1; $r->{exit_line} = $. # process $r if ($r->{package_status} eq "IC--E") { print "$r->{workstation}(line $r->{workstation_line}) $r->{exit_message}(line $r->{exit_line}) } $r = {}; # clear variables for next record } }