perldoc perlvar、特殊変数を参照してください$.
編集:コメントの後、申し訳ありませんが私はあまりにも速く読んだ
一致するものが多い場合の別の解決策は、新しい行のオフセットを含む配列を作成することです。$ a [0]->行2のオフセットなど、行番号を概算し、最後に増減して、ライン。最後の行に改行文字が含まれていない場合、問題が発生する可能性があります。
# create an array with offset of new lines
@a=(0,0);push@a,$-[0]while$str=~/\n/gc;
if($str =~ m/$regex/gc) {
$offset = $+[0];
# get an approximation of line
$l=int$offset*@a/$a[-1];
# increment or decrement
$l++while$a[$l+1]<$offset;
$l--while$a[$l]>$offset;
}
編集:テストされていません。変更は@ a =(0,0)を初期化して、最後に+2を回避し、最初の行で一致する場合は安全です$ l ++ while $ a [$ l + 1]$offsetと*@aが追加されました