我是perl的新手并试图设计一个我遇到的词法分析器:
my @token_def =
(
[Whitespace => qr{\s+}, 1],
[Comment => qr{#.*\n?$}m, 1],
);
甚至经过多个网站后我都不理解其含义。
答案 0 :(得分:11)
qr//
是适用于模式匹配和相关活动的类似引号的运算符之一。
来自perldoc:
此运算符引用(并可能编译)其STRING作为正则表达式。 STRING的插值方式与m / PATTERN /中的PATTERN相同。如果
'
用作分隔符,则不进行插值。
来自modern_perl:
qr //运算符创建了一流的正则表达式。将它们插入到匹配运算符中以使用它们:
my $hat = qr/hat/;
say 'Found a hat!' if $name =~ /$hat/;
...或将多个正则表达式对象组合成复杂的模式:
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!' );
答案 1 :(得分:4)
qr//
记录在“正则表达式运算符”部分的perlop中。
就像qq"..."
又名"..."
允许你构造一个字符串一样,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/;
qr/.../
的引用规则与qq"..."
非常相似。唯一的区别是\
后面跟着一个非单词字符会保持不变。