The important thing here is that variables used as keys are stringified. So, objects will be stringified. Also, undef will be stringified, as demonstrated:
my %x;
my $u = undef;
my $s = "";
$x{$u} = 1;
$x{$s} = 2;
print "$x{$u}\n";
These aren't limitations on what can be used, but consequences of using certain values.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?