:foo
は、式コンテキスト(すなわち、引数リストの外側)でPair
オブジェクトを作成します。
このオブジェクトは、その後|
を使用して、引数リストに副詞として補間することができます。
my $adverb = :g;
say "a 1 b 2".match(/\d/, |$adverb);
残念ながら、.match
方法は:i
副詞をサポートしていません。 (間違いなく見落とし - おそらくRakudoのバグレポートを開きます)
副詞を正規表現に挿入する方法はありません。
あなたは文字列として、あなたの正規表現を格納し、2つの異なる「ラッパー」正規表現(:i
と1、および1なし)の一つに、実行時にそれをevalに<$foo>
構文を使用することができます。
use MONKEY-SEE-NO-EVAL;
my $string = "foo bar baz";
my @array = <OO AR AZ>;
my $case-sensitive = True;
my $regex = ' "@array[0]" ';
say ?$string.match($case-sensitive ?? /:i <$regex>/ !! /<$regex>/);
しかし、ユーザ提供のデータが正規表現で終わると、これは安全ではありません。もちろん
、全体の正規表現は、単にリテラル部分文字列に一致した場合、そこにはevalの必要はません、あなたが安全に、このようなラッパーの正規表現の中に部分文字列を補間することができます
my $string = "foo bar baz";
my @array = <OO AR AZ>;
my $case-sensitive = True;
my $substring = @array[0];
say ?$string.match($case-sensitive ?? /:i $substring/ !! /$substring/);
は、あなたがあなたの助けSMLSありがとうございます!私は再びマッチ・ルーチンのdocページをチェックしますが、それ以外の副詞はすべてあります。 https://docs.perl6.org/routine/match – lisprogtor