use experimental 'signatures'; sub length_at_position_between($s, $p, $n = "\n") { my ($prev, $next); while ($s =~ /$n/g) { $prev = $next; $next = pos $s; last if $next > $p; } return $next - $prev; } print length_at_position_between ("test\nI want length of this line\n test", 12); # 27