my ($pat, $repl, $mods) = $substitution =~ m{ ^s/ ( (?:[^/\\]+|\\.)* ) / ( .* ) / ( [a-z]* ) \z }xs or die("Bad substitution\n"); my %mods = map { $_ => 1 } $mods =~ /./sg; my $global = delete($mods{g}); $mods = join('', delete(@mods{qw( i m s x )})) and $pat = "(?$mods:$pat)"; die("Unknown modifiers \"", keys(%mods), "\"\n") if %mods; no re 'eval'; if ($global) { $candidate =~ s/$pat/$repl/g; } else { $candidate =~ s/$pat/$repl/; }