Anansi-Library
view release on metacpan or search on metacpan
lib/Anansi/Library.pm view on Meta::CPAN
=item parameters I<(Hash, Optional)>
Named parameters where either the key is the name of a variable stored within
the closure and the value is it's data or when the value is a subroutine the key
is the name of a generated method of the closure's encapsulating object that
runs the subroutine and passes it a reference to the closure.
=back
Creates both an anonymous hash to act as a closure variable and a blessed object
as the closure's encapsulating accessor. Supplied data is either stored within
the closure using the key as the name or in the case of a subroutine, accessed
by an auto-generated method of that name. Closure is achieved by passing a
reference to the anonymous hash to the supplied subroutines via the
auto-generated methods.
=cut
sub abstractClosure {
lib/Anansi/Library.pm view on Meta::CPAN
my ($self, @PARAMETERS) = @_;
return &{\&{$parameters{$key}}}($self, $CLOSURE, (@PARAMETERS));
};
} else {
${$CLOSURE}{$key} = $parameters{$key}
}
} else {
${$CLOSURE}{$key} = $parameters{$key};
}
}
return bless($ABSTRACT, $abstract);
}
=head2 abstractObject
my $OBJECT = Anansi::Library->abstractObject(
'Some::Namespace',
'someKey' => 'some data',
'anotherKey' => 'Subroutine::Namespace',
'yetAnotherKey' => Namespace::someSubroutine,
lib/Anansi/Library.pm view on Meta::CPAN
The namespace to associate with the object.
=item parameters I<(Hash, Required)>
Named parameters where either the key is the name of a variable stored within
the object and the value is it's data or when the value is a subroutine the key
is the name of a namespace method.
=back
Creates a blessed object. Supplied data is either stored within the object or
in the case of a subroutine as a namespace method of that name.
=cut
sub abstractObject {
my ($class, $abstract, %parameters) = @_;
return if(ref($abstract) !~ /^$/);
return if($abstract !~ /[a-zA-Z]+[a-zA-Z0-9_]*(::[a-zA-Z]+[a-zA-Z0-9_]*)+$/);
my $ABSTRACT = {
lib/Anansi/Library.pm view on Meta::CPAN
} elsif($parameters{$key} =~ /^[a-zA-Z]+[a-zA-Z0-9_]*(::[a-zA-Z]+[a-zA-Z0-9_]*)+$/) {
if(exists(&{$parameters{$key}})) {
*{$abstract.'::'.$key} = *{$parameters{$key}};
} else {
$ABSTRACT->{$key} = $parameters{$key}
}
} else {
$ABSTRACT->{$key} = $parameters{$key};
}
}
return bless($ABSTRACT, $abstract);
}
=head2 hasAncestor
my $MODULE_ARRAY = $OBJECT->hasAncestor();
if(defined($MODULE_ARRAY));
if(1 == $OBJECT->hasAncestor(
'Some::Module',
( run in 1.907 second using v1.01-cache-2.11-cpan-b32c08c6d1a )