subname( $full_method_name => $body );
}
- $self->add_package_symbol(
- { sigil => '&', type => 'CODE', name => $method_name },
- $body,
- );
+ $self->add_package_symbol("&$method_name", $body);
}
sub _code_is_mine {
( defined $method_name && length $method_name )
|| confess "You must define a method name";
- return defined( $self->_get_maybe_raw_method($method_name) );
+ my $method = $self->_get_maybe_raw_method($method_name)
+ or return;
+
+ return defined($self->_method_map->{$method_name} = $method);
}
sub get_method {
my ( $self, $method_name ) = @_;
my $map_entry = $self->_method_map->{$method_name};
- return $map_entry if blessed $map_entry;
+ return $map_entry if defined $map_entry;
- my $code = $self->get_package_symbol(
- {
- name => $method_name,
- sigil => '&',
- type => 'CODE',
- }
- );
+ my $code = $self->get_package_symbol("&$method_name");
unless ($map_entry) {
return unless $code && $self->_code_is_mine($code);
my $removed_method = delete $self->_method_map->{$method_name};
- $self->remove_package_symbol(
- { sigil => '&', type => 'CODE', name => $method_name } );
+ $self->remove_package_symbol("&$method_name");
$removed_method->detach_from_class
if $removed_method && blessed $removed_method;