From: Nicholas Clark Date: Sun, 16 Dec 2001 19:24:25 +0000 (+0000) Subject: Exporter.pm X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=732bb7c2d4f27f710e7a85b7a9f43cd3b492713a;p=p5sagit%2Fp5-mst-13.2.git Exporter.pm Message-ID: <20011216192425.R21702@plum.flirble.org> p4raw-id: //depot/perl@13729 --- diff --git a/lib/Exporter.pm b/lib/Exporter.pm index 6459312..daa78d5 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