I find your first example unnecessarily noisy, while the second is too golfish. Balance is key. Mine would look like so:
my @chars = ('a' .. 'z', 'A' .. 'Z', 0 .. 9, '.', '/');
my $crypted = crypt $password, $chars[rand @chars].$chars[rand @chars]
That way I can't make a mistake in the size of the list vs the constant passed to rand. Nor will I have to figure out why I used 64 there if I read the source again in a year. It also lets me use concatenation vs the noisy and distracting join/slice method.
$salt on the other hand is superfluous - that value is trivially calculated on the fly.
Makeshifts last the longest.