Использование переменной Perl в качестве выражения замены - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу гибко читать замещающие выражения из внешних данных, поэтому моя проблема может быть сведена к следующему:

my $pattern = "s/a/b/g";
my $string  = "abcd";

$string =~ $pattern;
print("$string\n");

Это не работает, но где моя проблема?Или у него вообще нет решения?

1 Ответ

2 голосов
/ 21 сентября 2019

$pattern не содержит шаблон регулярных выражений;он содержит немного исходного кода Perl.Чтобы оценить код Perl, вам нужно eval EXPR (или do или require).

Однако запрашивать код Perl у пользователя - плохая идея.Вместо этого я рекомендую запрашивать шаблон и замену отдельно, как показано ниже:

my $pattern = 'a';
my $replacement = 'b';
my $string = 'abcd';

$string =~ s/$pattern/$replacement/g;

Используйте функцию из String :: Substitution , если вы хотите разрешить $1 итакое должно быть разрешено в выражении замены.

use String::Substitution qw( gsub_modify );

my $pattern = '(a)(b)';
my $replacement = '$2$1';
my $string = 'abcd';

gsub_modify($string, $pattern, $replacement);
...