加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

关于Perl范围操作符

发布时间:2020-12-15 21:53:06 所属栏目:大数据 来源:网络整理
导读:我对Perl中的范围运算符有疑问.代码在这里: #! /usr/bin/perl open FILE,"test.txt"; while (FILE) { print if (1 .. 5); } close FILE; test.txt中的内容类似于: 1 2 3 4 5 代码的结果是文件的所有五行.当我使用print(1 … 5)时没有区别.我认为它应该输出
我对Perl中的范围运算符有疑问.代码在这里:
#! /usr/bin/perl
 open FILE,"<test.txt";
 while (<FILE>) {
     print if (1 .. 5);
 }
 close FILE;

test.txt中的内容类似于:

1
 2
 3
 4
 5

代码的结果是文件的所有五行.当我使用print(1 … 5)时没有区别.我认为它应该输出四行.
我犯了什么错吗?

解决方法

文件的内容实际上并不重要.然而,重要的是行号(每条处理行的行号),因为它是针对..运算符的每个操作数进行检查的.它实际上可以写成……
print if ($. == 1) .. ($. == 5);

根据触发规则,当行号变为等于1时,打印将开始工作,当行号变为等于5时,打印将结束.触发器中…和…之间的唯一区别是关于测试两个操作数在同一表达式上,这与本案例无关.

你可能想要使用的是……

print if $_ ~~ [1..5];

…也就是说,在一个范围内测试该行的内容.但是在列表上下文中……和…之间没有区别 – 它们都返回相同的范围:

print for (1..5); # 12345
print for (1...5); # 12345 as well

现在有些东西……好吧,不是那么完全不同. )考虑following:

while (<DATA>) {
  print '..',$_  if 1..($. >= 1);
  print '...',$_ if 1...($. >= 1);
}
__DATA__
1
2
3

它打印…

..1
...1
...2

……然后什么都没有,因为……

> ..运算符检查同一 – 第一行的两个条件.检查第一个条件($.== 1)将其打开(并使整个..表达式的结果等于1).但猜猜怎么了?它会立即关闭,就像$. > = 1也评估为1(真).当触发器关闭时,所有下一行必须再次通过第一个条件,这是不可能发生的.> ……运算符更放松.对于第一行,由于第一个条件是真实的,网关是打开的 – 但是这里没有检查第二个表达式!但是,对于第二行,关闭网关将进行检查 – 但是有2个可以通过.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读