use warnings; use strict; use Memoize; memoize('e'); sub e() { my %result=(A=>1,B=>2); wantarray ? %result : \%result; } my %env=e; $|=1; while (my ($var,$val) = each %env) { print "(hash) $var=$val\n"; } while (my ($var,$val) = each %{ e() }) { print "(ref) $var=$val\n"; }