package My;
use strict;
use warnings;
my $pkg_sub = __PACKAGE__ . '::A';
# some methods for package My...
{
no strict 'refs';
*{$pkg_sub . '::new'} = sub {
my $class = shift;
return bless {ref($_[0]) ? %{$_[0]} : @_}, $class;
};
*{$pkg_sub . '::greet' } = sub { print 'Hello ' . shift()->{'name'} . ".\n"; };
}
1;
package main;
my $mya = My::A->new({name => 'Dave'});
$mya->greet();
####
my %subs = (
new => sub { # constructor goes here... },
greet => sub { # Greeter goes here... },
);
while (my ($name, $code) = each %subs) {
no strict 'refs';
*{$pkg_sub . '::' . $name} = $code;
}
####
{
# ...
no strict 'refs';
# ...
while (my ($name, $code) = each %methods){
*{"$class"."::"."$name"} = $code;
}
}