免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4492 | 回复: 12
打印 上一主题 下一主题

perl中“..”操作符含义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 10:27 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [报告]
发表于 2009-02-16 13:02 |只看该作者
原帖由 aple_smx 于 2009-2-16 10:27 发表
在下面这个帖子中有这样一个表达式 “$ perl -ne 'print unless /^$/../^$/' input“
http://bbs3.chinaunix.net/thread-1333381-1-1.html

对这里..操作符的含义不了解(根据各位大虾的回复猜测类似于"或"), ...

跟或不同。

在标量环境里,.. 返回一个布尔值。该操作符是双稳定的,类似一个电子开关,。。每个 .. 操作符都维护自身的状态。只要它的左操作数为假就一直为假。一旦左操作数为真,该范围操作符就保持真的状态直到右操作数为真,右操作数为真之后该范围操作符再次为假。。。

返回的值要么是代表假的空字串或者是代表真的一个序列数(从 1 开始)。该序列数每次碰到新范围时重置。在一个范围里的最后序列数后面附加了字串“E0”,这个字串不影响它的数字值,只是给你一些东西让你可以搜索,这样你可以把终点排除在外。你也可以通过等待 1 的序列数的方法把启始点排除在外。如果标量 .. 的某个操作数是数字文本,那么该操作数隐含地与 $.变量对比,$. 里包含你的输入文件的当前行号


perldoc perlop
Range Operators

论坛徽章:
0
3 [报告]
发表于 2009-02-16 13:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-02-16 14:02 |只看该作者
原帖由 aple_smx 于 2009-2-16 13:18 发表


谢谢,有点高深,我再研究一下

注意看 perlop 讲解 .. 后的例子就好理解了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2009-02-16 14:24 |只看该作者
这个问题在本坛光我一个人就回复过至少五次了。

论坛徽章:
0
6 [报告]
发表于 2009-02-16 15:30 |只看该作者
原帖由 MMMIX 于 2009-2-16 14:02 发表

注意看 perlop 讲解 .. 后的例子就好理解了。

后面的例子挺清楚
As a scalar operator:

           if (101 .. 200) { print; } # print 2nd hundred lines, short for
                                      #   if ($. == 101 .. $. == 200) ...

           next LINE if (1 .. /^$/);  # skip header lines, short for
                                      #   ... if ($. == 1 .. /^$/);
                                      # (typically in a loop labeled LINE)

           s/^/> / if (/^$/ .. eof());  # quote body

           # parse mail messages
           while (<>) {
               $in_header =   1  .. /^$/;
               $in_body   = /^$/ .. eof;
               if ($in_header) {
                   # ...
               } else { # in body
                   # ...
               }
           } continue {
               close ARGV if eof;             # reset $. each file
           }

       Here's a simple example to illustrate the difference between the two
       range operators:

           @lines = ("   - Foo",
                     "01 - Bar",
                     "1  - Baz",
                     "   - Quux");

           foreach (@lines) {
               if (/0/ .. /1/) {
                   print "$_\n";
               }
           }

论坛徽章:
0
7 [报告]
发表于 2009-02-19 13:55 |只看该作者
/^$/ 是啥意思?

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
8 [报告]
发表于 2009-02-19 14:12 |只看该作者
原帖由 girlbird 于 2009-2-19 13:55 发表
/^$/ 是啥意思?

空行

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2009-02-19 15:00 |只看该作者
原帖由 ynchnluiti 于 2009-2-19 14:12 发表

空行

应该是空字符串才对,许多情况下空行和空字符串并不一样。

论坛徽章:
0
10 [报告]
发表于 2009-02-19 16:34 |只看该作者

  1. print 'hi' if "\n" =~ m/^$/;
  2. print '\n equle to empty string' if "\n" eq '';
复制代码

还和空串有点区别 可以包含一个\n
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP