rje,
As others have pointed out, there are already modules that do this. As
revdiablo pointed out, there are ways to avoid using
eval to dynamically create subs and this fully functional example allows them to be lvaluable.
package Cool;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = bless {}, $class;
$self->_Init( @_ );
return $self;
}
sub _Init {
my $self = shift;
{
no strict 'refs';
for my $method ( @_ ) {
*{ $method } = sub :lvalue { $_[0]->{$method} };
}
}
}
"That's cool man";
And here is a script that uses it:
#!/usr/bin/perl
use strict;
use warnings;
use Cool;
my $obj = Cool->new( qw(foo bar baz) );
$obj->bar = "A better way of doing this";
print $obj->bar, "\n";