summaryrefslogtreecommitdiff
path: root/lib/Importer/Exporter.pm
blob: db1cb2a9c61f0dcb221e4e0b9f30d7760bcc56d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package Importer::Exporter;
use strict;
use warnings;

use Importer Importer => (
    exporter_import => { -as => 'import' },
    exporter_import => { -as => 'export' },
);

our @EXPORT_OK = qw/import/;

sub export_fail { shift; @_ }

sub export_to_level {
    my $from = shift;
    my ($level) = @_;
    Importer->import_into($from, $level + 1, @_);
}

sub require_version {
    my ($self, $wanted) = @_;
    my $pkg = ref $self || $self;
    return ${pkg}->VERSION($wanted);
}

my $push_tags = sub {
    my $from = shift;
    my ($var, @tags) = @_;

    no strict 'refs';
    my $export      = \%{"$from\::$var"};
    my $export_tags = \%{"$from\::EXPORT_TAGS"};
    use strict 'refs';

    my @nontag = ();
    for my $tag (@tags ? @tags : keys %$export_tags) {
        my $tag_list = $export_tags->{$tag};
        $tag_list ? push @$export => @$tag_list : push @nontag => $tag;
    };

    return unless @nontag && $^W;

    require Carp;
    Carp::carp(join(", ", @nontag) . " are not tags of $from");
};

sub export_tags {
    my $from = shift;
    $from->$push_tags('EXPORT', @_);
}

sub export_ok_tags {
    my $from = shift;
    $from->$push_tags('EXPORT_OK', @_);
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Importer::Exporter - DO NOT USE THIS

=head1 DESCRIPTION

This is what L<Exporter> would look like if it used L<Importer> to get the job
done. Works with C<use base 'Importer::Exporter';> as well as
C<use Importer::Exporter qw/import/>.

=head1 *** EXPERIMENTAL ***

This module is still experimental. Anything can change at any time. Testing is
currently VERY insufficient.

=head1 SOURCE

The source code repository for symbol can be found at
F<http://github.com/exodist/Importer>.

=head1 MAINTAINERS

=over 4

=item Chad Granum E<lt>exodist@cpan.orgE<gt>

=back

=head1 AUTHORS

=over 4

=item Chad Granum E<lt>exodist@cpan.orgE<gt>

=back

=head1 COPYRIGHT

Copyright 2015 Chad Granum E<lt>exodist7@gmail.comE<gt>.

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

See F<http://dev.perl.org/licenses/>

=cut