Ecco una combinazione di risposta e valutazione di Kinopiko.
eval
è qui utilizzato per generare la tabella di ricerca in modo controllato e sostenibile, e una tabella di ricerca viene utilizzato per salvare tutti i se .. elsif .. elsif che non sono troppo divertente da guardare.
(molto leggermente testato)
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;
essere pienamente utile questo deve:
- combinazioni di possibili modificatori
funzione
- sorta sulla tabella di ricerca così combinazione 'MSI' e 'mis 'la combinazione andrà alla stessa chiave.
Alcuni modificatori possono essere forniti all'interno della regex come '(? Modifier: pattern)' ma non cose che influenzano l'intera cosa come/g o/e. Questo è uno di quei momenti "perché stai facendo questo". Se ci hai detto a cosa serve, potremmo essere in grado di trovare un modo più semplice piuttosto che sfiorare i capelli di cammello (e aprire un buco di sicurezza). – Schwern
@Schwern: Ed è molto spiacevole se apri un buco nel tuo cammello – Borodin