restore shadowed subs
Graham Knop [Mon, 17 Jun 2013 04:42:16 +0000 (00:42 -0400)]
lib/Filter/Keyword.pm
lib/Filter/Keyword/Filter.pm
t/simple.t

index dfe818d..43fc054 100644 (file)
@@ -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 => (
index bb2cab5..c3fea16 100644 (file)
@@ -33,6 +33,8 @@ sub install {
 sub filter {
   my ($self) = @_;
   my ($string, $code) = $self->parser->get_next;
+  print $string;
+  #warn "# ".::dd($string)."\n";
   $_ = $string;
   return $code;
 }
index 1cfcc11..4e179fb 100644 (file)
@@ -2,6 +2,15 @@ use strictures 1;
 use Test::More;
 use Filter::Keyword;
 
+sub ::dd {
+  use Data::Dumper ();
+  local $Data::Dumper::Useqq = 1;
+  local $Data::Dumper::Terse = 1;
+  my $out = Data::Dumper::Dumper($_[0]);
+  chomp $out;
+  return $out;
+}
+
 BEGIN {
   (our $Kw = Filter::Keyword->new(
     target_package => __PACKAGE__,