gpt4 book ai didi

regex - 为什么 perl6 regex ~~ 试图分配给不可变容器?

转载 作者:行者123 更新时间:2023-12-03 02:53:30 25 4
gpt4 key购买 nike

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

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/) -> $/ { ... }应该就够了而不是 ~~运算符(operator)。你会得到一个新鲜的$/将在其中包含您想要的匹配结果的块内。

关于regex - 为什么 perl6 regex ~~ 试图分配给不可变容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com