diff options
Diffstat (limited to 't/Eval.pm')
-rw-r--r-- | t/Eval.pm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/t/Eval.pm b/t/Eval.pm new file mode 100644 index 0000000..bbd49e5 --- /dev/null +++ b/t/Eval.pm @@ -0,0 +1,41 @@ +package t::Eval; + +use warnings; +use strict; + +use Test::More; + +sub _ok_no_eval() { + my $lastsub = ""; + my $i = 0; + while(1) { + my @c = caller($i); + unless(@c) { + ok 0; + diag "failed to find main program in stack trace"; + return; + } + my $sub = $c[3]; + if($sub eq "main::eval_test") { + ok 1; + return; + } + my $type = $sub ne "(eval)" ? "subroutine" : + $c[7] ? "require" : + defined($c[6]) ? "string eval" : "block eval"; + if($type =~ /eval/ && !($lastsub eq "t::Eval::BEGIN" && + $type eq "block eval")) { + ok 0; + diag "have $type between module and main program"; + return; + } + $lastsub = $sub; + $i++; + } +} + +BEGIN { _ok_no_eval(); } +_ok_no_eval(); +sub import { _ok_no_eval(); } + +1; |