use strict; use warnings; use Data::Dumper; my %uniques = (); while ( ) { chomp; my ($key, $value) = split m{\|}; $uniques{$key} += $value; } print Data::Dumper->Dump([\%uniques], [q{*uniques}]); __DATA__ 10|10 20|20 30|30 10|100 15|15 50|50 15|150