You could do it like this:
$newsecret = do { my %hash; join('', map { $hash{$_}++ ? () : $_ } (split //, $secret)); };
The do creates a new scope so that the hash isn't in scope
outside the area it is needed.
However I would probably use a regex like
athomason's above.