Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Any way to access the contents of a block eval?

by shmem (Chancellor)
on Oct 10, 2007 at 17:41 UTC ( #644039=note: print w/replies, xml ) Need Help??

in reply to Any way to access the contents of a block eval?

For simple uses, as long as you have a __DATA__ or __END__ token and the eval is in the same file, you can use this trick:
#!/usr/bin/perl my $foo = 1; my $bar = $foo - 1; $SIG{__DIE__} = \&report; eval { print + ( $foo / $bar ),"\n"; }; sub report { (my $num) = shift() =~ /at \S+ line (\d+)/; warn "Failure in eval() at line $num:\n"; seek DATA, 0,0; my $c; EVAL: while (<DATA>) { if ($. == $num) { $c += () = /\{/; warn $_; $c -= () = /\}/; last unless $c; while (<DATA>) { $c += () = /\{/; warn $_; $c -= () = /\}/; last EVAL unless $c; } } }; }; __END__ Failure in eval() at line 8: print + ( $foo / $bar ),"\n";

which is far from perfect (and doesn't claim to be (specially the bracket foo is b0rken)). I'm not sure whether this qualifies as "mucking around with source filters" to your eyes, but I'm inclined to believe it does.


_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://644039]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2017-06-24 04:16 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (556 votes). Check out past polls.