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; '