my $main_re = do { local $" = ')|)(?=.*?('; my @REs = map $_->{from}, @conversions; qr/^(?=.*?(@conversions)|)/; }; #### my @scan = $entry{$k} =~ $main_re; for my $i (0..$#scan) { next unless defined $scan[$i]; $entry{$k} =~ s/$conversions[$i]{from}/$conversions[$i]{to}/g; conversions[$i]{count}++; }