package Haz; use Modern::Perl; use lib 'lib'; use Moo; use Acme::Mo; # has split / /, 'cheezburgers is rw default 22'; haz 'cheezburgers is rw default 22'; rw 'weight default 100'; ro 'name default barbara'; rwdef100 'money'; package main; run(); sub run { my $haz = Haz->new; say "haz = ", Dumper($haz); say 'i haz ', $haz->cheezburgers, ' cheezburgers'; $haz->weight(99); say 'weight: ', $haz->weight; say 'name: ', $haz->name; #$haz->name('jane'); say "it all worked"; } __END__ #### # lib/Acme/Mo.pm package Acme::Mo; use Modern::Perl; use Filter::Simple; sub hazmat { my $def = shift; $def =~ s/['"]//g; $def =~ s/(\w+)/'$1',/g; my $line = "has $def;"; return $line; } sub hasrw { my $def = shift; $def .= ' is rw'; return hazmat($def); } sub hasro { my $def = shift; $def .= ' is ro'; return hazmat($def); } sub hasrwdef100 { my $def = shift; $def .= ' is rw default 100'; return hazmat($def); } FILTER { s/^ro (.*);/hasro($1)/gem; }; FILTER { s/^rw (.*);/hasrw($1)/gem; }; FILTER { s/^haz (.*);/hazmat($1)/gem; }; FILTER { s/^rwdef100 (.*);/hasrwdef100($1)/gem; }; 1; __END__