为何Perl中"1...2"与"1....2"无语法错误?含义解析
Perl范围操作符解析问题解答
为什么代码没有语法错误?
Perl的词法解析器会按照语法规则自动识别这些点序列对应的合法操作符组合,不会将其判定为语法错误——这些点序列都是Perl允许的语法结构。
各表达式的含义:
1..2:这是Perl的闭合范围操作符,在列表上下文(比如数组切片场景)中会生成包含起始值和结束值的序列(1,2),因此@abc[1..2]会取出数组@abc中索引为1和2的元素,结果为2 3。1...2:在列表上下文里,三点形式的范围操作符和两点的..行为完全一致,同样生成序列(1,2),所以@abc[1...2]的结果也是2 3。两者的差异仅体现在标量上下文:三点形式是“延迟范围”,会在条件第二次满足时才结束范围;两点形式是“立即范围”,条件满足时就触发范围结束。1....2:Perl会将其解析为1 .. .2——其中..仍是范围操作符,.2是浮点数0.2的简写。由于起始值1大于结束值0.2,列表上下文里的范围操作符会返回空列表,因此@abc[空列表]无法取出任何元素,结果为空字符串。
内容的提问来源于stack exchange,提问作者Lane
相关产品推荐
相关产品推荐

