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

sid*_*com 9 regex interpolation subst perl6

为了使它正常工作,我必须更改什么?

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

tim*_*imo 9

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

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

这两个都应该工作正常。