Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Poor man's Exporter.

by shotgunefx (Parson)
on Mar 28, 2002 at 03:16 UTC ( #154883=snippet: print w/ replies, xml ) Need Help??
Description: Exporting is bad 'mkay. This came out of a discussion here. I use Exporter to manage my exports. This is not intended to replace it but merely for illustrative purposes for anyone who is thinking about rolling their own import. Doesn't support :tags (easily done though) , but does support @EXPORT, @EXPORT_OK, @EXPORT_FAIL and $VERSION checking.
Update Fixed bug. Wasn't removing the modulename from @_, which meant it tried to import a var with the name specified in use.
our @EXPORT    = qw (@array $VAR );
our @EXPORT_OK = qw($OK_ONLY); 

sub import {
    no strict 'refs';
    my $used_name = shift ; # Remove the Module name.

    my ($Version) = grep { m/^\d[\d.]*$/} @_;
    my @ex =  grep { !m/^(\d[\d\.]+)$/} @_;
    die "Insufficient or missing \$VERSION: $VERSION, $Version require
+d." if $Version  && $VERSION <= $Version;
    push @ex, @EXPORT ;
    my %EXP  = map {($_,'mKay')} @EXPORT,@EXPORT_OK;
    $EXP{$_} = 'Bad' for @EXPORT_FAIL;
    my $that_pack = caller();
    foreach (@ex){
        next if m/^\d[\d\.]+$/;
        die "Denied. Can't export $_" if $EXP{$_} eq 'Bad';
        die "Can't export unknown symbol $_" unless $EXP{$_} eq 'mKay'
        my ($t,$v) = ($1,$2);
        $t = '&' unless $t;
        *{$that_pack.'::'.$v} = $t eq '@' && \@{$v} || $t eq '%' && \%
+{$v} || 
                    $t eq '&' && \&{$v} || $t eq '$' && \${$v} || 
                    $t eq '*' && \*{$v} || \*{$_};

Comment on Poor man's Exporter.
Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://154883]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2016-05-30 23:02 GMT
Find Nodes?
    Voting Booth?