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; } }