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 (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 exploiting the Monastery: (6)
As of 2018-06-23 01:40 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (125 votes). Check out past polls.