X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FFilter%2FKeyword.pm;h=43fc054a1980d4b7c36ee132353083107372a28c;hb=170223439f538306f7785b05b9e812921acd9a95;hp=dfe818d4821c62ac259cf9c32caca728a08254c4;hpb=a5049e16d9b72ea9011d77c8ca7412e21f3d5ebb;p=p5sagit%2FFilter-Keyword.git diff --git a/lib/Filter/Keyword.pm b/lib/Filter/Keyword.pm index dfe818d..43fc054 100644 --- a/lib/Filter/Keyword.pm +++ b/lib/Filter/Keyword.pm @@ -37,10 +37,13 @@ sub install { }; } +has _shadowed_sub => (is => 'rw', clearer => '_clear_shadowed_sub'); + sub shadow_sub { my $self = shift; my $stash = $self->stash; if (my $shadowed = $stash->get_symbol('&'.$self->keyword_name)) { + $self->_shadowed_sub($shadowed); $stash->remove_symbol('&'.$self->keyword_name); $stash->add_symbol('&__'.$self->keyword_name, $shadowed); } @@ -51,6 +54,12 @@ sub remove { $self->keyword_parser->remove_keyword($self); $self->clear_keyword_parser; $self->clear_globref; + my $stash = $self->stash; + if (my $shadowed = $self->_shadowed_sub) { + $self->_clear_shadowed_sub; + $stash->remove_symbol('&__'.$self->keyword_name); + $stash->add_symbol('&'.$self->keyword_name, $shadowed); + } } has keyword_parser => (