use strict; use warnings; my $str = "aabceezazerrfde"; my %vals = ( a => 7, e => 2, z => 26 ); my $total = 0; while( my ( $char, $val ) = each %vals ) { my $count = eval "qw($str) =~ tr/$char//" or die $@; my $charval = $count * $val; $total += $charval; print "Found [$char] $count times ($count * $val = $charval)\n"; } print "Total = $total\n";