The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more
|
sub import
{
my $self = shift ;
my ( $pkg ) = caller ();
my $mpkg = $pkg . "::Methods" ;
foreach my $attr ( @_ )
{
if ( $attr =~ /^[a-z]/)
{
no strict 'refs' ;
*{ $mpkg . "::$attr" } = \&{ $attr };
}
else
{
my $get_name = $mpkg . "::get$attr" ;
my $set_name = $mpkg . "::set$attr" ;
my $get_sub = sub {
return $_ [0]->{ $attr };
};
my $set_sub = sub {
return $_ [0]->{ $attr } = $_ [1];
};
{
no strict 'refs' ;
*$get_name = $get_sub ;
*$set_name = $set_sub ;
push (@{ $pkg . "::ISA" }, $mpkg );
}
}
}
}
sub new
{
my $pkg = shift ;
my $self = bless {}, $pkg ;
$self ->init( @_ );
return $self ;
}
sub init
{
my $self = shift ;
while ( @_ )
{
my $name = shift || confess( "No name" );
my $method = "set$name" ;
$self -> $method ( shift );
}
}
1;
|