in reply to pattern matching words in any order

Another approach that solves the overlap problem:
++$seen{lc($_)} for split /\s+/, $zipFile; if ($seen{this} && $seen{$that}) { .... }
gives the same results as
if ($zipFile =~ /\bthis\b/i && $zipFile =~ /\bthat\b/i) { .... }