X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSelfLoader.pm;h=3b9c52d9122d334ad6c237e59fe02b8ad1737b87;hb=400728b860602b352de8071deef81019cfa0d73e;hp=4672ac49da864aafa99b8ce19a5020dbd153c715;hpb=09bef84370e90d727656ea11ba5ee8be80e361d3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/SelfLoader.pm b/lib/SelfLoader.pm index 4672ac4..3b9c52d 100644 --- a/lib/SelfLoader.pm +++ b/lib/SelfLoader.pm @@ -3,7 +3,7 @@ package SelfLoader; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(AUTOLOAD); -$VERSION = "1.09"; +$VERSION = "1.0902"; sub Version {$VERSION} $DEBUG = 0; @@ -11,8 +11,8 @@ my %Cache; # private cache for all SelfLoader's client packages # allow checking for valid ': attrlist' attachments my $nested; -$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; -my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) [\s,]* }x; +$nested = qr{ \( (?: (?> [^()]+ ) | (??{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) (?:\s*\:\s*|\s+(?!\:)) }x; my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; sub croak { require Carp; goto &Carp::croak } @@ -20,6 +20,7 @@ sub croak { require Carp; goto &Carp::croak } AUTOLOAD { print STDERR "SelfLoader::AUTOLOAD for $AUTOLOAD\n" if $DEBUG; my $SL_code = $Cache{$AUTOLOAD}; + my $save = $@; # evals in both AUTOLOAD and _load_stubs can corrupt $@ unless ($SL_code) { # Maybe this pack had stubs before __DATA__, and never initialized. # Or, this maybe an automatic DESTROY method call when none exists. @@ -31,11 +32,13 @@ AUTOLOAD { croak "Undefined subroutine $AUTOLOAD" unless $SL_code; } print STDERR "SelfLoader::AUTOLOAD eval: $SL_code\n" if $DEBUG; + eval $SL_code; if ($@) { $@ =~ s/ at .*\n//; croak $@; } + $@ = $save; defined(&$AUTOLOAD) || die "SelfLoader inconsistency error"; delete $Cache{$AUTOLOAD}; goto &$AUTOLOAD @@ -121,9 +124,9 @@ SelfLoader - load functions only on demand package FOOBAR; use SelfLoader; - + ... (initializing code) - + __DATA__ sub {....