package Class::Attr::Lvalue; use Filter::Simple; FILTER { s/(\w+)_attr (\w+)(\s*);/sub $2$3: lvalue { \$$1\{ +shift }->{ '$2' $3 } }/g; # print; } 1;