Perl支持范围语句修饰符,如下所示,解释器如何与$.
一起处理它?我想知道规则解释器处理它,因为这不是一个简单的布尔表达式。
while (<>)
{
print if 10 .. 20;
print if /pat1/ .. /pat2/;
}
答案 0 :(得分:6)
在标量上下文中使用时,它被称为触发器操作符。
当它的操作数是常量时,它们会与$.
进行比较,所以
print if 10 .. 20;
是
的缩写print if $. == 10 .. $. == 20;
触发器将从第10行开始返回true,直到第20行。
$ perl -E'say for "a".."z"' |
perl -ne'print if 10 .. 20;'
j
k
l
m
n
o
p
q
r
s
t
其余时间,操作数按原样评估,所以
print if /pat1/ .. /pat2/;
将从匹配$_
的行(pat1
)开始返回true,直到匹配$_
的行(pat2
)。
$ perl -E'say for "z", "xpat1x", "x", "xpat2x", "z", "ypat1y", "y", "ypat2y", "z"' |
perl -ne'print if /pat1/ .. /pat2/;'
xpat1x
x
xpat2x
ypat1y
y
ypat2y