use warnings; use strict; use Data::Dumper; my %app_map; open my $fh1, '<', 'app.txt' or die $!; while (my $line = <$fh1>){ my ($app, $mem, $lang) = split /\s+/, $line; $app_map{$app}{mem} = $mem; $app_map{$app}{lang} = $lang; } close $fh1 or die $!; open my $fh2, '<', 'app2.txt' or die $!; while (my $line = <$fh2>){ my ($app, $cpu, $cores) = split /\s+/, $line; $app_map{$app}{cpu} = $cpu; $app_map{$app}{cores} = $cores; } close $fh2 or die $!; print Dumper \%app_map;