#!/usr/bin/perl -w use diagnostics; use strict; { my $cache = [Foo->new]; sub access_cache { return @$cache; } } foreach (&access_cache()) { print "before: ", ref($_), "\n"; print "object: ", $_, "\n"; print "after: ", ref($_), "\n"; print "\n"; } foreach (&access_cache()) { print "before: ", ref($_), "\n"; print "object: ", $_, "\n"; print "after: ", ref($_), "\n"; print "\n"; } package Foo; sub new {bless [], $_[0]}; use overload '""' => sub {$_[0] = Bar->new; return $_[0]->[0]}; package Bar; sub new {bless ['barbar'], $_[0]}; use overload '""' => sub {return $_[0]->[0]};