糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

perl 范围操作符

摘自:perldoc.perl.org

当".."操作符返回bool型变量的时候,有如下几个例子:
while (<>) {
    print if (2 .. 6);
}
将会打印文件的 2 ~ 6 行。

同样的:
next if (1 .. /^$/); # 跳过前面的空白行
s/^/> / if (/^$/ .. eof); # 在正文前面加上 > 

还可以这样使用:
# parse mail messages
while (<>) {
    $in_header =   1  .. /^$/;
    $in_body   = /^$/ .. eof;
    if ($in_header) {
        # do something
    } else { # in body
        # do something else
    }
} 

下面的例子展示了".."和"..."的区别:
@lines = ("   - Foo",
          "01 - Bar",
          "1  - Baz",
          "   - Quux");
foreach (@lines) {
    if (/0/ .. /1/) {
        print "$_\n";
    }
}
这个程序只输出Bar那行。如果将".."换成"...",则还会输出Baz那行。

下面展示".."操作符返回列表型变量时候的几个例子:
for (101 .. 200) { print; }    # print $_ 100 times
@foo = @foo[0 .. $#foo];    # an expensive no-op
@foo = @foo[$#foo-4 .. $#foo];    # slice last 5 items

同样可以用于字符串:
@alphabet = ("A" .. "Z");
$hexdigit = (0 .. 9, "a" .. "f")[$num & 15];
@z2 = ("01" .. "31");  print $z2[$mday];

还可以用于单个字符:
use charnames "greek";
my @greek_small =  ("\N{alpha}" .. "\N{omega}");

use charnames "greek";
my @greek_small =  map { chr } ord "\N{alpha}" .. ord "\N{omega}";

posted on 2011-08-24 17:00 糯米 阅读(714) 评论(0)  编辑 收藏 引用 所属分类: Perl


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理