我是perl的新手,并试图设计一个我遇到过的词法分析器:
my @token_def =
(
[Whitespace => qr{\s+}, 1],
[Comment => qr{#.*\n?$}m, 1],
);
Run Code Online (Sandbox Code Playgroud)
甚至在经过多个网站后,我都不理解其含义.
ser*_*sat 12
qr// 是适用于模式匹配和相关活动的类似报价的运算符之一.
来自perldoc:
此运算符引用(并可能编译)其STRING作为正则表达式.STRING的插值方式与m/PATTERN /中的PATTERN相同.如果
'用作分隔符,则不进行插值.
来自modern_perl:
qr //运算符创建了一流的正则表达式.将它们插入匹配运算符以使用它们:
my $hat = qr/hat/;
say 'Found a hat!' if $name =~ /$hat/;
Run Code Online (Sandbox Code Playgroud)
...或将多个正则表达式对象组合成复杂的模式:
my $hat = qr/hat/;
my $field = qr/field/;
say 'Found a hat in a field!'
if $name =~ /$hat$field/;
like( $name, qr/$hat$field/,
'Found a hat in a field!' );
Run Code Online (Sandbox Code Playgroud)
qr//在“Regexp Quote-Like Operators”部分的perlop中进行了记录。
就像qq"..."aka"..."允许你构造一个字符串,qr/.../允许你构造一个正则表达式。
$s = "abc"; # Creates a string and assigns it to $s
$s = qq"abc"; # Same as above.
print("$s\n");
$re = qr/abc/; # Creates a compiled regex pattern and assigns it to $x
print "match\n" if $s =~ /$re/;
Run Code Online (Sandbox Code Playgroud)
的引用规则qr/.../与qq"..."'s非常相似。唯一的区别是\后跟一个非单词字符被原封不动地传递。