如何在替换的正则表达式部分中将变量插值到正则表达式模式中?

时间:2019-04-19 11:08:14

标签: regex interpolation perl6 subst

要使其正常运行,我必须在此处进行哪些更改?

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

1 个答案:

答案 0 :(得分:9)

问题在于通过<$regex>语法将一个正则表达式插入另一个正则表达式不会在match变量中安装结果。解决此问题的方法有两种:

  • 最简单的方法是直接在替换中使用正则表达式,即$str .= subst($regex, { $0 });
  • 为插值的正则表达式指定一个明确的名称,然后通过该名称访问结果,即$str .= subst( / <foo=$regex> /, { $<foo>[0] });

这两种方法都可以正常工作。