Commit | Line | Data |
8990e307 |
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; |