如何理解Perl中的语句修饰符范围?

时间:2015-05-13 13:23:25

标签: perl

Perl支持范围语句修饰符,如下所示,解释器如何与$.一起处理它?我想知道规则解释器处理它,因为这不是一个简单的布尔表达式。

while (<>)
{
  print if 10 .. 20;
  print if /pat1/ .. /pat2/;
}

1 个答案:

答案 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