Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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

by shmem (Canon)
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 the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (12)
As of 2016-09-27 20:01 GMT
Find Nodes?
    Voting Booth?
    Extraterrestrials haven't visited the Earth yet because:

    Results (512 votes). Check out past polls.