##my %set =(); <- move this line inside loop my %data =(); my ($r,$val,$master_key); for my $row (1 .. $eSheet->{MaxRow}){ my %set =(); # <- move to here ..