From 91a618191f37e1b9cceb9823cbbef257d7e834ad Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 28 Nov 2011 16:41:21 -0600 Subject: and, actually enable support for anonymous packages --- lib/Package/Stash/PP.pm | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'lib/Package/Stash/PP.pm') diff --git a/lib/Package/Stash/PP.pm b/lib/Package/Stash/PP.pm index 98b86b8..2796a99 100644 --- a/lib/Package/Stash/PP.pm +++ b/lib/Package/Stash/PP.pm @@ -31,27 +31,31 @@ sub new { my $class = shift; my ($package) = @_; - if (!defined($package) || (ref($package) && ref($package) ne 'HASH')) { + if (!defined($package) || (ref($package) && reftype($package) ne 'HASH')) { confess "Package::Stash->new must be passed the name of the " . "package to access"; } - elsif (ref($package) eq 'HASH') { - confess "The pure perl implementation of Package::Stash doesn't " - . "currently support anonymous stashes. You should install " - . "Package::Stash::XS"; + elsif (ref($package) && reftype($package) eq 'HASH') { + return bless { + 'namespace' => $package, + }, $class; } - elsif ($package !~ /\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\z/) { + elsif ($package =~ /\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\z/) { + return bless { + 'package' => $package, + }, $class; + } + else { confess "$package is not a module name"; } - return bless { - 'package' => $package, - }, $class; } sub name { confess "Can't call name as a class method" unless blessed($_[0]); + confess "Can't get the name of an anonymous package" + unless defined($_[0]->{package}); return $_[0]->{package}; } -- cgit v1.2.3-54-g00ecf