perl 5.0 alpha 6
[p5sagit/p5-mst-13.2.git] / lib / Exporter.pm
1 package Exporter;
2
3 require 5.000;
4
5 sub import {
6     my ($callpack, $callfile, $callline) = caller($ExportLevel);
7     my $pack = shift;
8     my @imports = @_;
9     *exports = \@{"${pack}::EXPORT"};
10     if (@imports) {
11         my $oops;
12         my $type;
13         *exports = \%{"${pack}::EXPORT"};
14         if (!%exports) {
15             grep(s/^&//, @exports);
16             @exports{@exports} = (1) x  @exports;
17         }
18         foreach $sym (@imports) {
19             if (!$exports{$sym}) {
20                 if ($sym !~ s/^&// || !$exports{$sym}) {
21                     warn "$sym is not exported by the $pack module ",
22                             "at $callfile line $callline\n";
23                     $oops++;
24                     next;
25                 }
26             }
27         }
28         die "Can't continue with import errors.\n" if $oops;
29     }
30     else {
31         @imports = @exports;
32     }
33     foreach $sym (@imports) {
34         $type = '&';
35         $type = $1 if $sym =~ s/^(\W)//;
36         *{"${callpack}::$sym"} =
37             $type eq '&' ? \&{"${pack}::$sym"} :
38             $type eq '$' ? \${"${pack}::$sym"} :
39             $type eq '@' ? \@{"${pack}::$sym"} :
40             $type eq '%' ? \%{"${pack}::$sym"} :
41             $type eq '*' ?  *{"${pack}::$sym"} :
42                     warn "Can't export symbol: $type$sym\n";
43     }
44 };
45
46 1;