diff options
author | Nicholas Clark <nick@ccl4.org> | 2001-12-16 19:24:25 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-12-17 17:25:09 +0000 |
commit | 732bb7c2d4f27f710e7a85b7a9f43cd3b492713a (patch) | |
tree | 760b3467807c8d6f020c86fef3f498c2afc1eaa1 /lib/Exporter.pm | |
parent | d7341064bc2472128b060451c0da8ce62db49d9d (diff) | |
download | perl-732bb7c2d4f27f710e7a85b7a9f43cd3b492713a.tar.gz |
Exporter.pm
Message-ID: <20011216192425.R21702@plum.flirble.org>
p4raw-id: //depot/perl@13729
Diffstat (limited to 'lib/Exporter.pm')
-rw-r--r-- | lib/Exporter.pm | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/lib/Exporter.pm b/lib/Exporter.pm index 6459312d75..daa78d5641 100644 --- a/lib/Exporter.pm +++ b/lib/Exporter.pm @@ -1,6 +1,6 @@ package Exporter; -require 5.001; +require 5.006; use strict; no strict 'refs'; @@ -8,7 +8,7 @@ no strict 'refs'; our $Debug = 0; our $ExportLevel = 0; our $Verbose ||= 0; -our $VERSION = '5.564'; +our $VERSION = '5.565'; $Carp::Internal{Exporter} = 1; sub export_to_level { @@ -35,33 +35,33 @@ sub import { my $pkg = shift; my $callpkg = caller($ExportLevel); - my($exports, $export_cache) = (\@{"$pkg\::EXPORT"}, - \%{"$pkg\::EXPORT"}); # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-( - my($fail) = \@{"$pkg\::EXPORT_FAIL"}; + my($exports, $export_cache, $fail) + = (\@{"$pkg\::EXPORT"}, \%{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"}); return export $pkg, $callpkg, @_ if $Verbose or $Debug or @$fail > 1; my $args = @_ or @_ = @$exports; - + + local $_; if ($args and not %$export_cache) { - foreach my $sym (@$exports, @{"$pkg\::EXPORT_OK"}) { - $sym =~ s/^&//; - $export_cache->{$sym} = 1; - } + s/^&//, $export_cache->{$_} = 1 + foreach (@$exports, @{"$pkg\::EXPORT_OK"}); } - if ($Verbose or $Debug - or grep {/\W/ or $args and not exists $export_cache->{$_} - or @$fail and $_ eq $fail->[0] - or (@{"$pkg\::EXPORT_OK"} - and $_ eq ${"$pkg\::EXPORT_OK"}[0])} @_) { - return export $pkg, $callpkg, ($args ? @_ : ()); + my $heavy = $Verbose || $Debug; + unless ($heavy) { + # Try very hard not to use {} and hence have to enter scope on the foreach + # We bomb out of the loop with last as soon as heavy is set. + ($heavy = (/\W/ or $args and not exists $export_cache->{$_} + or @$fail and $_ eq $fail->[0] + or (@{"$pkg\::EXPORT_OK"} and $_ eq ${"$pkg\::EXPORT_OK"}[0]))) + and last + foreach (@_); } + return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy; local $SIG{__WARN__} = sub {require Carp; &Carp::carp}; - foreach my $sym (@_) { - # shortcut for the common case of no type character - *{"$callpkg\::$sym"} = \&{"$pkg\::$sym"}; - } + # shortcut for the common case of no type character + *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_; } @@ -80,7 +80,7 @@ sub require_version { 1; - +__END__ =head1 NAME |