use strict; use warnings; { package TestHash; sub keyinfo { my ($k) = @_; if (defined($k)) { if (ref($k)) { print("reference\n"); } else { print("string\n"); } } else { print("undefined\n"); } } sub TIEHASH { my ($c ) = @_; return bless([], $c); } sub FETCH { my ($s,$k ) = @_; keyinfo($k); return undef; } sub STORE { my ($s,$k,$v) = @_; keyinfo($k); push @$s, $k; } sub FIRSTKEY { my ($s ) = @_; return shift @$s; } sub NEXTKEY { my ($s ) = @_; return shift @$s; } } tie my %h, 'TestHash'; foreach my $k ('a', [], undef) { $h{$k} = 1; } print("\n"); foreach my $k ('a', [], undef) { my $dummy = $h{$k}; } print("\n"); foreach my $k (keys %h) { TestHash::keyinfo($k); }