我应该如何使用Perl的标量范围运算符?

Eug*_*ash 8 perl scalar range

什么是标量".."运算符的典型用法?它只是选择文本块吗?

我自己有趣的例子:

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
Run Code Online (Sandbox Code Playgroud)

Gre*_*con 3

根据这里的问题,人们似乎几乎不知道它,但是,是的,我想说典型的用法是选择文本块,或者使用

while (<>) {
  print if /BEGIN/ .. /END/;
}
Run Code Online (Sandbox Code Playgroud)

或者

while (<>) {
  print if 3 .. 5; # prints lines 3 through 5
}
Run Code Online (Sandbox Code Playgroud)

后者是用于检查输入行号的语法糖 ( $.)

... if $. == 3 .. $. == 5;
Run Code Online (Sandbox Code Playgroud)

这表明看起来很奇怪

#! /usr/bin/perl -l

for ($_ = 1; $_ <= 10; ++$_) {
  print if $_ == 4 .. $_ == 7;
}
Run Code Online (Sandbox Code Playgroud)

上面程序的输出是

4
5
6
7

如果您有某种包围条件,请在 subs 中测试它:

for (...) {
  do_foo($x,$y,$z) if begin($x) .. end($z);
}
Run Code Online (Sandbox Code Playgroud)