#!/usr/bin/perl -l package MyHash; use Tie::Hash; our @ISA = 'Tie::StdHash'; sub TIEHASH { my $class = shift; return bless {}, $class; } sub STORE { my $self = shift; print "storing $_[0] => $_[1]"; $self->SUPER::STORE(@_); } sub FETCH { my $self = shift; print "fetching @_"; $self->SUPER::FETCH(@_); } sub CLEAR { my $self = shift; print "clear"; $self->SUPER::CLEAR(); } package main; use strict; use warnings; use Data::Dumper; tie my %myhash, "MyHash"; print "Variant 1 (bad):"; %myhash = ( %myhash, "key_$_" => { foo => 42 } ) for 1..5; print "\nDumping..."; print Dumper \%myhash; %myhash = (); print "\nVariant 2 (good):"; $myhash{"key_$_"} = { foo => 42 } for 1..5; print "\nDumping..."; print Dumper \%myhash; __END__ Variant 1 (bad): clear storing key_1 => HASH(0x65ecb0) fetching key_1 clear storing key_1 => HASH(0x65ecb0) storing key_2 => HASH(0x6c2050) fetching key_1 fetching key_2 clear storing key_1 => HASH(0x65ecb0) storing key_2 => HASH(0x6c2050) storing key_3 => HASH(0x74a420) fetching key_3 fetching key_1 fetching key_2 clear storing key_3 => HASH(0x74a420) storing key_1 => HASH(0x65ecb0) storing key_2 => HASH(0x6c2050) storing key_4 => HASH(0x74a3f0) fetching key_3 fetching key_1 fetching key_4 fetching key_2 clear storing key_3 => HASH(0x74a420) storing key_1 => HASH(0x65ecb0) storing key_4 => HASH(0x74a3f0) storing key_2 => HASH(0x6c2050) storing key_5 => HASH(0x74aaf0) Dumping... fetching key_3 fetching key_1 fetching key_5 fetching key_2 fetching key_4 $VAR1 = { 'key_3' => { 'foo' => 42 }, 'key_1' => { 'foo' => 42 }, 'key_5' => { 'foo' => 42 }, 'key_2' => { 'foo' => 42 }, 'key_4' => { 'foo' => 42 } }; clear Variant 2 (good): storing key_1 => HASH(0x74ac80) storing key_2 => HASH(0x737c40) storing key_3 => HASH(0x6c2050) storing key_4 => HASH(0x74ad00) storing key_5 => HASH(0x74ac00) Dumping... fetching key_3 fetching key_1 fetching key_5 fetching key_4 fetching key_2 $VAR1 = { 'key_3' => { 'foo' => 42 }, 'key_1' => { 'foo' => 42 }, 'key_5' => { 'foo' => 42 }, 'key_4' => { 'foo' => 42 }, 'key_2' => { 'foo' => 42 } };