OutputCache: If sub _ is already defined, then warn about it (once) and refuse to...
Sartak [Sat, 1 Mar 2008 04:47:07 +0000 (04:47 +0000)]
git-svn-id: http://dev.catalyst.perl.org/repos/bast/trunk/Devel-REPL@4112 bd8105ee-0ff8-0310-8827-fb3f25b6796d

lib/Devel/REPL/Plugin/OutputCache.pm

index e9c339a..38374e8 100644 (file)
@@ -10,11 +10,29 @@ has output_cache => (
     lazy    => 1,
 );
 
+has warned_about_underscore => (
+    is      => 'rw',
+    isa     => 'Bool',
+    default => 0,
+    lazy    => 1,
+);
+
 around 'eval' => sub {
     my $orig = shift;
     my ($self, $line) = @_;
 
-    local *_ = sub () { $self->output_cache->[-1] };
+    my $has_underscore = *_{CODE};
+    if ($has_underscore && !$self->warned_about_underscore) {
+        warn "OutputCache: Sub _ already defined.";
+        $self->warned_about_underscore(1);
+    }
+    else {
+        # if _ is removed, then we should warn about it again if it comes back
+        $self->warned_about_underscore(0);
+    }
+
+    # this needs to be a postfix conditional for 'local' to work
+    local *_ = sub () { $self->output_cache->[-1] } unless $has_underscore;
 
     my @ret;
     if (wantarray) {