在Perl 6

时间:2017-11-10 13:56:38

标签: perl6

this question的延续,可能更奇怪。

我可以吗使用regexes连接两个sub? (当然,我理解,如何使用regex

以下代码完全错误,但我希望它可以解释我想要做的事情:

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'

1 个答案:

答案 0 :(得分:5)

你写的内容基本上是正确的,但你需要稍微调整一下语法。首先,您应该像任何其他子声明您的组合功能。接下来,似乎将正则表达式插入另一个,<$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