use strict; sub make_regex_list{ my %regexes; foreach my $strings (@_) { my($regex_string,$options)=@$strings; if ($options =~ /g/) { $regexes{qr/(?$options)$regex_string/} = 1; } else { $regexes{qr/(?$options)$regex_string/} = 0; } } return %regexes; } my $string = "Jack Jack John"; # in real code this array would be constructed # from a file my @reStrings = (["jack","ig"],["john","i"]); my %regexes = make_regex_list(@reStrings); foreach my $regex (keys %regexes) { if ($regexes{$regex}) { print "Using $regex in global mode\n"; $string =~ s/$regex/name/g; print $string."\n"; } else { print "Using $regex\n"; $string =~ s/$regex/name/; print $string."\n"; } } #### Using (?-xism:(?i)john) Jack Jack name Using (?-xism:(?ig)jack) in global mode name name name