Как интерполировать переменную в регулярное выражение в части регулярного выражения подстановки? - PullRequest
9 голосов
/ 19 апреля 2019

Что мне нужно изменить здесь, чтобы это работало?

my $str = "start middle end";
my $regex = / start ( .+ ) end /;
$str.=subst( / <$regex> /, { $0 } ); # dies: Use of Nil in string context
say "[$str]";

1 Ответ

9 голосов
/ 19 апреля 2019

Проблема заключается в том, что интерполяция регулярного выражения в другое регулярное выражение с помощью синтаксиса <$regex> не приведет к установке результата в переменной соответствия. Есть два способа обойти это:

  • Самый простой способ - просто использовать регулярное выражение непосредственно в subst, т.е. $str .= subst($regex, { $0 });
  • Дайте интерполированному регулярному выражению явное имя и получите доступ к результату через него, т.е. $str .= subst( / <foo=$regex> /, { $<foo>[0] });

Оба из них должны работать нормально.

...