perl -E ' use v5.36; use overload q{%{}} => sub { { foo => 1 } }; sub foo { $_[0]->$*->{foo} } my $x= bless \{ foo => 2 }, "main"; say $x->foo; ' #### perl -E ' use v5.36; use Scalar::Util "refaddr"; use overload q{%{}} => sub { { foo => 1 } }; our %attrs; sub new { my $self= bless {}, shift; $attrs{refaddr $self}= { @_ }; $self } sub DESTROY { delete $attrs{refaddr $_[0]} } sub foo { $attrs{refaddr $_[0]}{foo} } my $x= main->new(foo => 2); say $x->foo; '