为什么 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/) -> $/ { ... }
代替 ~~
运算符应该就足够了。您将在块内获得一个新的 $/
,其中包含您想要的匹配结果。
我正在尝试在正则表达式中提取名字,但 ~~ 似乎想分配给一个不可变的容器。为什么这样?我做错了什么?
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/) -> $/ { ... }
代替 ~~
运算符应该就足够了。您将在块内获得一个新的 $/
,其中包含您想要的匹配结果。