#!/usr/bin/perl -w use strict; use My::ProcessA( "DataType" ); # Defines: process_a() method print DataType->process_a; #### package My::ProcessA; use strict; use ExportTo( [ qw( process_a ) ] ); sub process_a { "Do Stuff"; } 1; #### package ExportTo; use strict; sub import { my( $self, $exports )= @_; if( 2 != @_ || ! ref($exports) || ! UNIVERSAL::isa($exports,"ARRAY") ) { require Carp; Carp::croak( 'Usage: use ',__PACKAGE__, '( [ qw( func to export ) ] )' ); } my $caller= caller(); my $import= sub { if( 2 != @_ ) { require Carp; Carp::croak( 'Usage: use ',$caller, '( "DataType::Class" )' ); } my( $self, $class )= @_; for my $meth ( @$exports ) { no strict 'refs'; *{$class."::".$meth}= \&{$caller."::".$meth}; } }; no strict 'refs'; *{$caller."::import"}= $import; } 1; #### use My::ProcessA qw( DataType process_a revert_a ); # or even use My::ProcessA( DataType=>[qw( process_a revert_a )] );