use strict; use warnings; #### sub TIEHASH { print "<@_ \n>"; my $class = shift; my %hash = shift; # <-- you create a hash with a single key, no value. You want @_. print "In TIEHASH .... \n"; return bless(\@hash); # <-- the ARRAY @hash does not exist. You want %hash. }