Aquí hay una combinación de la respuesta y evaluación de Kinopiko.
eval
se usa aquí para generar la tabla de búsqueda de una manera controlada y mantenible, y una tabla de búsqueda se usa para guardar todos los if .. elsif .. elsif que no son muy divertidos de ver.
(muy ligeramente a prueba)
my @stuff = (
{
search => "this",
replace => "that",
modifier => "g",
},
{
search => "ono",
replace => "wendy",
modifier => "i",
}
);
$_ = "this ono boo this\n";
my @modifiers = qw{m s i x g e};
my $s_lookup = {};
foreach my $modifier (@modifiers) {
$s_lookup->{$modifier} = eval " sub { s/\$_[0]/\$_[1]/$modifier } ";
}
for my $h (@stuff) {
$s_lookup->{$h->{modifier}}->($h->{search},$h->{replace});
}
print;
Para ser totalmente útil esta necesita:
- combinaciones de posibles modificadores
función
- tipo en la tabla de consulta de modo combinación 'msi' y 'MIS 'combinación irá a la misma clave.
Algunos modificadores se pueden suministrar dentro de la expresión regular como '(? Modificador: patrón)' pero no son cosas que afectan todo como/g o/e. Este es uno de esos momentos de "por qué estás haciendo eso". Si nos dijiste para qué sirve, podríamos encontrar una forma más sencilla en lugar de cepillarnos el pelo de camello (y abrir un agujero de seguridad). – Schwern
@Schwern: Y es muy desagradable si abres un agujero en tu camello – Borodin