#!/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 )] );