The 28/64 is coming from viewing the hash as a scalar, and is a representation of how many buckets are used (and the total number of buckets). Dump it as a hash instead of a scalar, and you should see the correct data -- there's nothing wrong with what you have done.
This works fine for me:
use Data::Dumper;
my %hash;
$hash{"/dev/shm"} = "shared memory";
print Dumper(\%hash);
and outputs:
$VAR1 = {
'/dev/shm' => 'shared memory'
};
To clarify and answer your root question, you're not using special characters in a hash. Since most languages internally hash a string to an integer (still learning Perl, but this is how Python works), you could put runic glyphs from the writings of the High Elves in there if you want, and key creation would work fine. The hash function doesn't care.