我习惯了Perl但是Perl 6新手
我想在文本变量中托管正则表达式,就像我在perl5中所做的那样:
my $a = 'abababa'; my $b = '^aba'; if ($a =~ m/$b/) { print "True\n"; } else { print "False\n"; }
但如果我在Perl6中做同样的事情它不起作用:
my $a = 'abababa'; my $b = '^aba'; say so $a ~~ /^aba/; # True say so $a ~~ /$b/; # False
我很困惑……我错过了什么?
你需要仔细看看
Quoting Constructs.
对于这种情况,请将LHS的一部分作为带有尖括号或< {和}>的单独标记:
my $a = 'abababa'; my $b = '^aba'; say so $a ~~ /<$b>/; # True,starts with aba say so $a ~~ /<{$b}>/; # True,starts with aba my $c = '<[0..5]>' say so $a ~~ /<$c>/; # False,no digits 1 to 5 in $a say so $a ~~ /<{$c}>/; # False,no digits 1 to 5 in $a
另一个故事是当你需要将变量传递给限制量词时.这是你只需要使用大括号的地方:
my $ok = "12345678"; my $not_ok = "1234567"; my $min = 8; say so $ok ~~ / ^ \d ** {$min .. *} $/; # True,the string consists of 8 or more digits say so $not_ok ~~ / ^ \d ** {$min .. *} $/; # False,there are 7 digits only
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。