use feature ":5.14"; use warnings FATAL => qw(all); use strict; use Data::Dump qw(dump pp); my $a = bless{qw(foo foo fie fie foe foe fum fum)}; eval 'sub '.$_.':lvalue {my ($f) = @_; $f->{'.$_.'}}' for keys %$a; say $a->fie; $a->fie = 'FIE'; say $a->fie;