sub fill_matrix { my ($in) = @_; open my $IN, '<', $in or die $!; my @index = (0); push @index, tell $IN while <$IN>; pop @index; for my $line_no (0 .. $#index) { print STDERR "$line_no\r"; for my $idx (0 .. $line_no - 1) { seek $IN, $index[$idx], 0; my $line = <$IN>; print +(split ' ', $line, $line_no + 2)[$line_no], ' '; } seek $IN, $index[$line_no], 0; my $line = <$IN>; print +(split ' ', $line, $line_no + 1)[-1]; } }