X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbase.pm;h=8564c6ca40ce276c882665bac971035a25d724c0;hb=ce4f4a1cb8714c6c6c3c7b002c9830a7cafc6780;hp=cb5840e660d3cc65d10e01d2763d4d12eff61e98;hpb=f30a114324770080b9e0b2bcfb9c2278f5e0a290;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/base.pm b/lib/base.pm index cb5840e..8564c6c 100644 --- a/lib/base.pm +++ b/lib/base.pm @@ -22,15 +22,15 @@ it. Multiple inheritance of %FIELDS is not supported. The 'base' pragma will croak if multiple base classes have a %FIELDS hash. See L for a description of this feature. -When strict 'vars' is in scope I also let you assign to @ISA +When strict 'vars' is in scope, I also lets you assign to @ISA without having to declare @ISA with the 'vars' pragma first. If any of the base classes are not loaded yet, I silently -Cs them. Whether to C a base class package is -determined by the absence of a global $VERSION in the base package. -If $VERSION is not detected even after loading it, will -define $VERSION in the base package, setting it to the string -C<-1, defined by base.pm>. +Cs them (but it won't call the C method). Whether to +C a base class package is determined by the absence of a global +$VERSION in the base package. If $VERSION is not detected even after +loading it, I will define $VERSION in the base package, setting it to +the string C<-1, set by base.pm>. =head1 HISTORY @@ -43,8 +43,9 @@ L =cut package base; -use vars qw($VERSION); -$VERSION = "1.01"; + +use 5.006_001; +our $VERSION = "1.03"; sub import { my $class = shift; @@ -53,8 +54,10 @@ sub import { foreach my $base (@_) { next if $pkg->isa($base); - push @{"$pkg\::ISA"}, $base; - unless (exists ${"$base\::"}{VERSION}) { + my $vglob; + if ($vglob = ${"$base\::"}{VERSION} and *$vglob{SCALAR}) { + $$vglob = "-1, set by base.pm" unless defined $$vglob; + } else { eval "require $base"; # Only ignore "Can't locate" errors from our eval require. # Other fatal errors (syntax etc) must be reported. @@ -65,9 +68,9 @@ sub import { "\t(Perhaps you need to 'use' the module ", "which defines that package first.)"); } - ${"$base\::VERSION"} = "-1, set by base.pm" - unless exists ${"$base\::"}{VERSION}; + ${"$base\::VERSION"} = "-1, set by base.pm" unless defined ${"$base\::VERSION"}; } + push @{"$pkg\::ISA"}, $base; # A simple test like (defined %{"$base\::FIELDS"}) will # sometimes produce typo warnings because it would create