#!/usr/bin/perl -w use strict; use warnings; use Data::Dump qw/dump/; my %data; foreach my $filename (qw/one.txt two.txt three.txt/) { open( my $file, $filename ) or die "Unable to open $filename because $!\n"; while (<$file>) { chomp; my ( $chrX, $chrpos, $value1, $value2 ) = split(/\s+/); $data{$chrX}->{$chrpos}->{'value1'} += $value1; $data{$chrX}->{$chrpos}->{'value2'} += $value2; } ## end while (<$file>) } ## end foreach my $filename (qw/one.txt two.txt three.txt/) print dump( \%data ); #### { chromosome1 => { 50000 => { value1 => 64, value2 => 73 } }, chromosome2 => { 20000 => { value1 => 4, value2 => 63 } }, chromosome3 => { 41444 => { value1 => 13, value2 => 28 } }, chromosome4 => { 21414 => { value1 => 4, value2 => 1 } }, chromosome6 => { 12141 => { value1 => 12, value2 => 22 } }, }