use strict; use warnings; package FindEval; use B qw(minus_c main_root OPf_KIDS class comppadlist); my $eval = 0; sub walk { my $op = shift; if ($op->name eq 'entereval') { $eval++; printf "OP type for EVAL is %s\n", class($op); } elsif ($eval && $op->name eq 'nextstate') { printf "EVAL found on line %d\n", $op->line; $eval = 0; } if ($op->flags & OPf_KIDS) { for (my $kid = $op->first; $$kid; $kid = $kid->sibling) { walk($kid); } } } sub printvars { my ($name_av, $val_av) = comppadlist->ARRAY; foreach my $sv ($val_av->ARRAY) { print class($sv), "\t", eval { $sv->PVX }, "\n"; } } sub import { minus_c; eval 'CHECK { printvars(); walk(main_root); }'; print $@ if $@; } 1;