use strict; use warnings; sub check_strings { my ($file, $r_stringsNeeded, $r_stringsToAvoid) = @_; open my $fh, '<', $file or die "Can't open '$file': $!\n"; my %foundNeeded = map { $_ => 0 } @{$r_stringsNeeded}; my %foundToAvoid = map { $_ => 0 } @{$r_stringsToAvoid}; while (<$fh>) { for my $string (@{$r_stringsNeeded}) { ++$foundNeeded{$string} if /\Q$string/; } for my $string (@{$r_stringsToAvoid}) { ++$foundToAvoid{$string} if /\Q$string/; } } my $foundAllNeeded = 0 == scalar grep { $_ == 0 } values %foundNeeded; my $foundNoneOfAvoided = 0 == scalar grep { $_ != 0 } values %foundToAvoid; return $foundAllNeeded && $foundNoneOfAvoided; } if (!check_strings('search.txt', ['first_neededString', 'second_neededString'], ['firstStringToAvoid', 'secondStringToAvoid'])) { die "file did not contain all needed Strings or contained forbidden strings\n"; }