我习惯了Perl但是Perl 6新手
我想在文本变量中托管正则表达式,就像我在perl5中所做的那样:
my $a = 'abababa';
my $b = '^aba';
if ($a =~ m/$b/) {
print "True\n";
} else {
print "False\n";
}
Run Code Online (Sandbox Code Playgroud)
但如果我在Perl6中做同样的事情它不起作用:
my $a = 'abababa';
my $b = '^aba';
say so $a ~~ /^aba/; # True
say so $a ~~ /$b/; # False
Run Code Online (Sandbox Code Playgroud)
我很困惑......我错过了什么?
您需要仔细查看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
Run Code Online (Sandbox Code Playgroud)
另一个故事是当你需要将变量传递给限制量词时.这是你只需要使用大括号的地方:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |