fix longstanding bug: searches for lexicals originating within eval''
[p5sagit/p5-mst-13.2.git] / t / op / eval.t
index efa189e..5822797 100755 (executable)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..27\n";
+print "1..30\n";
 
 eval 'print "ok 1\n";';
 
@@ -100,3 +100,43 @@ do_eval('eval q[print "ok $x\n"]');
 $x++;
 do_eval('sub { eval q[print "ok $x\n"] }->()');
 $x++;
+
+# can recursive subroutine-call inside eval'' see its own lexicals?
+sub recurse {
+  my $l = shift;
+  if ($l < $x) {
+     ++$l;
+     eval 'print "# level $l\n"; recurse($l);';
+     die if $@;
+  }
+  else {
+    print "ok $l\n";
+  }
+}
+{
+  local $SIG{__WARN__} = sub { die "not ok $x\n" if $_[0] =~ /^Deep recurs/ };
+  recurse($x-5);
+}
+$x++;
+
+# do closures created within eval bind correctly?
+eval <<'EOT';
+  sub create_closure {
+    my $self = shift;
+    return sub {
+       print $self;
+    };
+  }
+EOT
+create_closure("ok $x\n")->();
+$x++;
+
+# does lexical search terminate correctly at subroutine boundary?
+$main::r = "ok $x\n";
+sub terminal { eval 'print $r' }
+{
+   my $r = "not ok $x\n";
+   eval 'terminal($r)';
+}
+$x++;
+