Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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

Back to Snippets Section

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 perusing the Monastery: (11)
As of 2015-11-25 22:03 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (692 votes), past polls