为什么 perl6 正则表达式 ~~ 试图分配给不可变容器?

Why is perl6 regex ~~ trying to assign to immutable container?

我正在尝试在正则表达式中提取名字,但 ~~ 似乎想分配给一个不可变的容器。为什么这样?我做错了什么?

my $test= ' "DOE , JOHN" ';

grammar findReplace {
    regex TOP            { \s* <ptName> \s* }
    regex ptName         { <aName> }
    regex aName          { \" .+? \" }
}

class rsAct {
    method TOP ($/) { make "last name is: " ~ $<ptName>.made; }
    method ptName ($/) { 
        my $nameStr = $/.Str; 
        if $nameStr ~~ m/ \" (<alpha>+) .* \, .* \" / { 
            my $lastName = $/[0];   # I want $/[0] sub-string of outer $/
            make $lastName; 
    }
    }
}

my $m = findReplace.parse($test, actions => rsAct.new);
say $m.made;

我得到的错误是:

Cannot assign to a readonly variable or a value
  in method ptName at shit.pl line 13
  in regex ptName at shit.pl line 5
  in regex TOP at shit.pl line 4
  in block <unit> at shit.pl line 20

我正在尝试获取与模式匹配的外部 $/ 的子字符串;为什么 ~~ 是作业?

感谢您的帮助!!!

您正在一个已经将 $/ 定义为参数的函数中使用 ~~ 运算符。默认情况下参数是只读的,因此赋值失败。

使用 if $nameStr.match(/your regex/) -> $/ { ... } 代替 ~~ 运算符应该就足够了。您将在块内获得一个新的 $/,其中包含您想要的匹配结果。