use strict ; use warnings ; my @data = ; my %freq_hash ; # What you call '%hash' foreach my $single_line ( @data ) { chomp( $single_line ) ; my ( $word, $freq ) = split( / /, $single_line ) ; $freq_hash{ $word } = $freq ; } ## So far all we have done is get data ## print "\nData Before Process:\n"; foreach my $word (sort { $freq_hash{ $b } <=> $freq_hash{ $a } } keys %freq_hash ) { print "$word\t\t$freq_hash{$word}\n"; } foreach my $word ( keys %freq_hash ) { if( ( lc( $word ) ne $word ) and $freq_hash{ lc( $word ) } ) { $freq_hash{ lc( $word ) } += $freq_hash{ $word } ; delete( $freq_hash{ $word } ) ; } } print "\nData After Process:\n"; foreach my $word (sort { $freq_hash{ $b } <=> $freq_hash{ $a } } keys %freq_hash ) { print "$word\t\t$freq_hash{$word}\n"; } __DATA__ the 1 The 1 hello 15 hell 19 Hell 8