How should I use Perl's scalar range operator?

perl, range, scalar

Solution

People hardly seem to know about it based on questions here, but, yes, I'd say typical usage is selecting blocks of text, either with

while (<>) {
  print if /BEGIN/ .. /END/;
}

or

while (<>) {
  print if 3 .. 5; # prints lines 3 through 5
}

The latter is syntactic sugar for checking against the input line-number (`$.`)

... if $. == 3 .. $. == 5;

which suggests the weird-looking

#! /usr/bin/perl -l

for ($_ = 1; $_ <= 10; ++$_) {
  print if $_ == 4 .. $_ == 7;
}

The above program's output is

4
5
6
7

If you have some sort of bracketing condition, test for it in subs:

for (...) {
  do_foo($x,$y,$z) if begin($x) .. end($z);
}

Problem

What is the scalar ".." operator typical usage? Is it only selecting blocks of text? Interesting example by myself: ``` sub get_next { print scalar($$..!$$), "\n"; } get_next for 1 .. 5; # prints numbers from 1 to 5 get_next for 1 .. 5; # prints numbers from 6 to 10 ```

Original source

Related problems