Aby nieco wyjaśnić the excellent answer z Сухой27:
Jak widać, nie można użyć zmiennej w sekcji Opcje operatora s///
(dobrze, jeśli można stosować eval
ale to byłoby bardzo zły pomysł).
Jednak to nie jedyny sposób, aby uzyskać opcje dopasowania do wyrażenia regularnego. Można również użyć ciągu regex z (?...)
wewnątrz . Na przykład m/(?i)foo/
jest dokładnie taki sam, jak m/foo/i
. Zauważ, że /g
to nieco inna klasa opcji, więc nie możesz użyć tej opcji w ten sposób.
Ale ponieważ ten ciąg (?...)
jest tylko częścią wyrażenia regularnego, można użyć zmiennej do osadzenia jej w swoim regex.
my $opt = $IgnoreCase ? "(?i)" : "";
$string =~ s/$opt$source/$replace/g;
Aby uzyskać więcej informacji, zobacz numer "Extended Patterns" in perldoc perlre.
Czy mógłbyś wyjaśnić trochę? – ssr1012
Dziękuję za szybką odpowiedź. Ono doskonale mnie kształtuje. – Horst
Rzeczy takie jak 'i' mogą być dostarczane w czasie wykonywania za pomocą nawiasów, aby je ponownie włączyć i wyłączyć. Nie można tego zrobić za pomocą 'g' chociaż, ponieważ zasadniczo zmienia zachowanie silnika regex. – Sobrique