#!/usr/bin/perl use Modern::Perl '2014'; # generate some filenames my @inputfiles = map { "data$_.txt" } 1 .. 3; my $inputdata = {}; # read files into $inputdata foreach my $filenumber (0 .. $#inputfiles) { open my $HANDLE, "<", $inputfiles[$filenumber] or die "Cannot open $inputfiles[$filenumber]: $!\n"; while(<$HANDLE>) { chomp; my ($freq, $data) = split /\s+/, $_, 2; $inputdata->{$freq}->[$filenumber] = $data; } close $HANDLE or warn "Cannot close $inputfiles[$filenumber]: $!\n"; } # write combined output open my $OUTPUT, ">", "combined.txt" or die "Cannot open combined.txt: $!\n"; foreach my $freq (sort keys %{ $inputdata }) { say $OUTPUT "$freq ", join " ", @{ $inputdata->{$freq} }; } close $OUTPUT or warn "Cannot close combined.txt: $!\n";