perl the three dot operator

本文探讨了Perl编程语言中独特的三点运算符的功能与用法。通过实例对比两点与三点运算符的区别,揭示了三点运算符如何在模式匹配中工作,并提供了一段脚本示例来说明其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In my previous post, I discussed the range operator in the scalar context, here we are further to discuss on operator tha is quite unique in the Perl programming lanaugae, that is the three dot operator. 

 

... 

 

 

Some of the examples are referenced from the stackover post  http://stackoverflow.com/questions/11021512/perl-three-dot-operator-examples

 

 

Let's first see an example and then let 's delve into it.

 

 

use strict;


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

# the following command will print out Bar

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


# but the following comman will print out Baz and as well as Bar


print "=" x 10, "\n"; 

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

 

 

The output of the script will be like this: 

 

 写道
01 - Bar
==========
01 - Bar
1 - Baz
 

 

Let's first see the definition from one tutorial page: it has the following.

 

http://www.ooblick.com/text/perl/perl-talk1-text.html 写道
.. (dot dot)
The range operator is rather magical. It's one of my favorites.

In a list context, num1..num2 returns the list of numbers from num1 to num2. This is handy for taking array slices (@array[3..10]) or for repeating a loop a fixed number of times (for (1..50)...). Be aware, though, that this does generate a temporary array, so you can waste a lot of memory by using this with a large range.

In a scalar context, expr1 .. expr2 acts as a ``flip-flop.'' It starts out false. Then, once the left-hand expression becomes true, .. returns true and starts evaluating its right-hand expression, until that becomes true. After that, .. flip-flops back to being false.

This is useful for things like finding text between delimiters in a file:

perl -ne 'print if /BEGIN/../END/'
will read standard input and print all lines between lines delimited by BEGIN and END.

There is also a ... (dot dot dot) operator, related to .., but I won't cover it here.
 

The main reason is explained in the stackover flow post. Here is what it said.

 

 

http://stackoverflow.com/questions/11021512/perl-three-dot-operator-examples 写道
«...» doesn't do a flop check immediately after a true flip check.

With «..»,

" - Foo"
/0/ returns false.
.. returns false.
"01 - Bar"
/0/ returns true. Flip!
/1/ returns true. Flop! ⇐
.. returns true (since the first check was true).
"1 - Baz"
/0/ returns false.
.. returns false.
" - Quux"
/0/ returns false.
.. returns false.
With «...»,

" - Foo"
/0/ returns false.
... returns false.
"01 - Bar"
/0/ returns true. Flip!
... returns true.
"1 - Baz"
/1/ returns true. Flop!
... returns true.
" - Quux"
/0/ returns false.
... returns false.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值