my @strings = split "\n", $string; my @lookup; $lookup[0] = 0; foreach my $i ( 1..$#strings ) { # byte offset of 1st char on this line $lookup[$i] = length($strings[$i-1]) + $lookup[$i-1]; }