sub get_key { join '', sort $_[0] =~ /./g } my %hash; while () { chomp; $hash{get_key($_)}++; } use Data::Dumper; print(Dumper(\%hash)); __DATA__ AB AB AB AC AC BA BA BA CA #### $VAR1 = { 'AC' => 3, 'AB' => 6 }; #### sub get_key { join '', sort $_[0] =~ /./g } my %hash; while () { chomp; $hash{$_}++; } my %fixed; foreach my $key (keys %hash) { my $val = $hash{$key}; $fixed{get_key($key)} += $val; } use Data::Dumper; print(Dumper(\%fixed)); __DATA__ AB AB AB AC AC BA BA BA CA