{ @attrlist = keys %attrs; '' } package {$package}; use strict; \{ { ' my %' . join( ";\n my \%", @attrlist ) . ';'; } sub new \{ bless \{\}, shift \} {foreach my $attr ( @attrlist ) { my $v = '{ $' . $attr . '{+shift} }'; $OUT .= sprintf( " sub %-10s :lvalue " . $v . "\n", $attr ); } } sub DESTROY \{ my $sref = 0+shift; delete { join( "\n ,", map { '$' . $_ . '{$sref}' } @attrlist); }; \} \} 1;