First you say keys are scalars not strings, then you say there might be a way of allowing things other than strings.
Except possibly through an XS trick, keys can only be strings. perldata confirms this: "Hashes are unordered collections of scalar values indexed by their associated string key." If you try to use a reference as a key, the reference will not be a key of the hash. It's string representation will.
I guess your point was that you could attempt to use a non-string as a key. That is indeed valid. The scalar will be stringified before being used as a key.
The following is an attempt to use a reference as a key in a hash:
use strict; use warnings; my @var = qw( a b c ); my $ref = \@var; my %hash; $hash{$ref} = 1; foreach (keys %hash) { print @$_, "\n"; }
In the latest Perl (5.8.8), the above code outputs
Can't use string ("ARRAY(0x225fb8)") as an ARRAY ref while "strict ref +s" in use
In reply to Re^3: HASH keys preserve class ?
by ikegami
in thread HASH keys preserve class ?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |