sub decrement_word { my ($pword) = @_; my @vals = map { ord $_ } (split //, $$pword); my $idx = $#vals; while (1) { if ($vals[$idx] != ord('a') and $vals[$idx] != ord('A')) { --$vals[$idx]; last; } if (0 == $idx) { shift @vals; last; } $vals[$idx] += 25; --$idx; } my $word = join '', map { chr } @vals; $$pword = $word; }