use strict;
use warnings;
-use B;
use Scalar::Util 'blessed';
use Carp 'confess';
-our $VERSION = '0.82_02';
+our $VERSION = '0.89';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
sub _new {
my $class = shift;
- my $options = @_ == 1 ? $_[0] : {@_};
+ return Class::MOP::Class->initialize($class)->new_object(@_)
+ if $class ne __PACKAGE__;
- # NOTE:
- # because of issues with the Perl API
- # to the typeglob in some versions, we
- # need to just always grab a new
- # reference to the hash in the accessor.
- # Ideally we could just store a ref and
- # it would Just Work, but oh well :\
- $options->{namespace} ||= \undef;
+ my $params = @_ == 1 ? $_[0] : {@_};
- bless $options, $class;
+ return bless {
+ package => $params->{package},
+
+ # NOTE:
+ # because of issues with the Perl API
+ # to the typeglob in some versions, we
+ # need to just always grab a new
+ # reference to the hash in the accessor.
+ # Ideally we could just store a ref and
+ # it would Just Work, but oh well :\
+
+ namespace => \undef,
+
+ } => $class;
}
# Attributes
my ($name, $sigil, $type) = ref $variable eq 'HASH'
? @{$variable}{qw[name sigil type]}
- : $self->_deconstruct_variable_name($variable);
+ : $self->_deconstruct_variable_name($variable);
my $pkg = $self->{'package'};
no strict 'refs';
- no warnings 'redefine', 'misc';
- *{$pkg . '::' . $name} = ref $initial_value ? $initial_value : \$initial_value;
+ no warnings 'redefine', 'misc', 'prototype';
+ *{$pkg . '::' . $name} = ref $initial_value ? $initial_value : \$initial_value;
}
sub remove_package_glob {