package Foo::Bar; use strict; use warnings; my @aoa; my $cnt; sub new { bless \(my $obj_index = $cnt++) } sub DESTROY { undef $aoa[${$_[0]}] } use overload '@{}' => sub { $aoa[${$_[0]}] ||= [] }, fallback => 1; 1;