use strict; use warnings; my @file = ( '1 2 3 4', '5 6 7 8', '9 10 11 12', '13 14 15 16'); my @data; foreach my $line (@file) { my @fields = split(/\t/,$line); for (my $x = 1 ; $x <= $#fields ; $x++) { push @{$data[$x-1]}, [$fields[0],$fields[$x]]; } } for ( my $x = 0 ; $x <= $#data; $x++) { open(FH,">OUTPUT_$x") or die "$!\n"; foreach my $fields ( @{$data[$x]} ) { print FH "$fields->[0] $fields->[1]\n"; } close FH; }