延续
this question,可能更奇怪.
我可以吗使用sub连接两个正则表达式?
(当然,我明白了,如何使用正则表达式)
my Regex sub s12 ( $c,$v) { return / <{$c}> <{$v}> / } my regex consonant { <[a .. z] -[aeIoU]> } my regex vowel { <[aeIoU]> } my regex open_syllable { &s12( &consonant,&vowel ) } "bac" ~~ m:g/ <open_syllable> /; say $/; # should be 'ba'
解决方法
你写的内容基本上是正确的,但你需要稍微调整一下语法.首先,您应该像任何其他子声明您的组合功能.接下来,似乎将正则表达式插入另一个,< $r>是正确的语法,并将函数调用插入正则表达式,< {my-sub(args)}>是正确的语法. (当调用它时,不需要在sub前面添加一个&符号 – &主要用于当你想要在不调用它时引用Callable时.)结合这些小修复和你的代码工作:
sub combine(Regex $a,Regex $b --> Regex) { / <$a> <$b> / } my regex consonant { <[a .. z] -[aeIoU]> } my regex vowel { <[aeIoU]> } my regex open_syllable { <{combine(&consonant,&vowel)}> } "bac" ~~ m:g/ <open_syllable> /; say ~$/; # output: ba