in reply to append to a line arrays read from N different input files

I'm sorry, but I don't understand what "$i" is supposed to be. Your code snippets never show any value being assigned to it, but it seems to be an important value for indexing things.

I'm also unclear on the nature of the data, and how this affects your goal. Do all input files have the same number of columns? The same number of lines? (Could an input file have a wrong number of columns or lines, and what should happen in that case?) How is the size of the output files (columns and lines) related to the sizes of the input files?

If the inputs are really consistent, something like this could work (maybe):

#!/usr/bin/perl use strict; my @files = qw/foo bar/; # get file names from somewhere my @matrix; for my $f ( 0 .. $#files ) { open( IN, "<", $files[$f] ) or die "$files[$f]: $!\n"; while (<IN>) { my ( $line, @vals ) = split; for my $v ( 0..$#vals ) { $matrix[$v][$line][$f] = $vals[$v]; } } } for my $v ( 0..$#matrix ) { open( OUT, ">", "var.$v" ) or die "var.$v: $!\n"; for my $line ( @{$matrix[$v]} ) { print OUT join( "\t", $line, @{$matrix[$v][$line]} ), "\n"; } close OUT; }
(not tested)

(update: I see now that this differs only in style from the code suggested by dogz007 -- it's the same basic approach. Sorry about being redundant.)