フリップフロップ演算子に定数オペランドが与えられると、それは暗黙のうちにそれらを$.
(現在の行番号) と比較することを意味するため、3..5
実際には(($.==3) .. ($.==5))
. 変数を使用する場合は、明示的に比較する必要があります。
そう:
#!/usr/bin/perl
use strict;
use warnings;
my $first_line = 3;
my $last_line = 5;
while (<DATA>) {
if (my $num = ($first_line==$.) .. ($last_line==$.) ) {
print $num,"\t", $_;
}
}
これはバグではありません。3..5 と省略できるのは意図的なものです。任意のブール式を使用できるため、他のものを使用して行番号であると想定することはできません (たとえば、3../last/ を使用して、3 行目から "last" を含む行まで一致させます)。
http://perldoc.perl.org/perlop.html#Range-Operators :
スカラー コンテキストでは、「..」はブール値を返します。演算子はフリップフロップのように双安定であり、sed、awk、およびさまざまなエディターの行範囲 (コンマ) 演算子をエミュレートします。各 ".." 演算子は、それを含むサブルーチンへの呼び出し間であっても、独自のブール状態を維持します。左オペランドが false である限り、false です。左のオペランドが true になると、範囲演算子は右のオペランドが true になるまで true のままになり、その後、範囲演算子は再び false になります。... スカラー ".." のいずれかのオペランドが定数式の場合、そのオペランドが現在の入力行番号 ($. 変数) と等しい (== ) 場合、そのオペランドは true と見なされます。