X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDevel%2FDeclare%2FMethodInstaller%2FSimple.pm;h=e8b5668d4f741d3918b56accf745210a5dbf254e;hb=a664754d8ce3736abcfeb16ea5115d99cec724fd;hp=9a11911c5dc6f8753b6fd41602a9e25130b697ec;hpb=ab449c2e81bf76bdd7348c6a1a10a25a70093dff;p=p5sagit%2FDevel-Declare.git diff --git a/lib/Devel/Declare/MethodInstaller/Simple.pm b/lib/Devel/Declare/MethodInstaller/Simple.pm index 9a11911..e8b5668 100644 --- a/lib/Devel/Declare/MethodInstaller/Simple.pm +++ b/lib/Devel/Declare/MethodInstaller/Simple.pm @@ -67,6 +67,31 @@ sub strip_attrs { return $attrs; } +sub code_for { + my ($self, $name) = @_; + + if (defined $name) { + my $pkg = $self->get_curstash_name; + $name = join( '::', $pkg, $name ) + unless( $name =~ /::/ ); + return sub (&) { + my $code = shift; + # So caller() gets the subroutine name + no strict 'refs'; + *{$name} = subname $name => $code; + return; + }; + } else { + return sub (&) { shift }; + } +} + +sub install { + my ($self, $name ) = @_; + + $self->shadow( $self->code_for($name) ); +} + sub parser { my $self = shift; $self->init(@_); @@ -81,19 +106,10 @@ sub parser { $inject = $self->scope_injector_call() . $inject; } $self->inject_if_block($inject, $attrs ? "sub ${attrs} " : ''); - if (defined $name) { - my $pkg = $self->get_curstash_name; - $name = join( '::', $pkg, $name ) - unless( $name =~ /::/ ); - $self->shadow( sub (&) { - my $code = shift; - # So caller() gets the subroutine name - no strict 'refs'; - *{$name} = subname $name => $code; - }); - } else { - $self->shadow(sub (&) { shift }); - } + + $self->install( $name ); + + return; } sub parse_proto { }