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 "."; }