in reply to get it into one line ?

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.