use strict; use warnings; my %stuff; while (my $line = <>) { chomp $line; my @word = split(q{ }, $line); push (@{$stuff{$word[0]}}, @word[1..$#word]); } for my $key (keys %stuff) { print "$key @{$stuff{$key}}\n"; } #### $ cat file1 Adam 1 2 3 Eve 4 5 6 $ cat file2 Adam 4 5 6 Eve 7 8 9 $ ./merge.pl file1 file2 Adam 1 2 3 4 5 6 Eve 4 5 6 7 8 9