在 Perl 6 中将正则表达式作为参数传递

Passing regexes as arguments in Perl 6

的延续,而且可能更奇怪。

我可以吗?使用 sub 连接两个 regexes? (我当然明白,怎么用一个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'

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