use strict; use warnings; my @strings = ('abzdefghijk', 'a b z d e f g h i j k', '', 'abzde fghijk',); print $_, " => ", hc($_), "\n" for @strings; sub hc { my $string = shift; my $erg = 0; my $max = int(length($string) - 1); # this line is your algorithm! $erg += (ord(substr($string,$_,1)))*31**($max-$_) for 0..$max; $erg; }