use strict; use Data::Dumper; open(FILE, "<", "file.txt"); my $active_file; my %files_with_bad_media; while () { if (m/^checking image file <(.*?)>/) { $active_file = $1; } elsif (m/checking files file/) { $active_file = undef; } else { if (m/media does not exist/) { if (defined($active_file)) { $files_with_bad_media{$active_file} = 1; } } } } close(FILE); print Dumper(\%files_with_bad_media);