use v5.12.0; use warnings; # Check if key exist in hash but not exact match # https://perlmonks.org/?node_id=11151448 my %prices = ("coke" => 1.25, "sandwich" => 3, "pizza" => 12); my $concat = join $; => keys %prices; for my $pat (qw/cok oke ok a/) { my @keys = $concat =~ m/([^$;]*${pat}[^$;]*)/g; say "--- pattern: /$pat/"; say "$_ => $prices{$_}" for @keys; say "."; } #### --- pattern: /cok/ coke => 1.25 . --- pattern: /oke/ coke => 1.25 . --- pattern: /ok/ coke => 1.25 . --- pattern: /a/ sandwich => 3 pizza => 12 .