我试图将perl6中的匹配对象转换为字符串。匹配对象上的方法Str定义如下:
method Str(Match:D: --> Str:D)
我认为可以使用Str($match)来完成此操作。它似乎将其转换为字符串,但是在使用以下代码的字符串时出现错误:
my $searchme = "rudolph";
my $match = $searchme ~~ /.*dol.*/;
say $match.WHAT;
my $test1 = Str($match);
say $test1.WHAT;
say $test1;
使用下面的输出:
(Match)
(Str)
出现以下错误:
找不到方法'gist':没有方法缓存,也没有在代码块中找到.^find_method,位于.code.tio的第6行
但是,如果我运行:
my $searchme = "rudolph";
my $match = $searchme ~~ /.*dol.*/;
say $match.WHAT;
my $test1 = $match.Str;
say $test1.WHAT;
say $test1;
我没有收到任何错误信息,结果如下:
(Match)
(Str)
rudolph
这是一个Bug还是我对它的工作原理存在误解?感谢您的阅读。
dd $test1;
而不是say $test1;
有助于显示BOOTStr $test1 = (BOOTStr without .perl method)
。基于此,我在rakudo repo中搜索了BOOTStr
,并找到了上述问题。我将尝试进一步压缩它,但同时想发布此评论。 - raiph~
来将匹配强制转换为字符串。my $text = ~$match
- donaldh