The docs say "In the first form," eval EXPR, "the return value of EXPR is parsed and executed as if it were a little Perl program."
Perl programs are put into main until a package statement is encountered, so the documentation is consistent with the behaviour (although an explicit statement about this behaviour would be favourable).
Which means the following is wrong?
sub moo { print("moooooain\n"); }
package cow;
sub moo { print("moooOoooOOoooo\n"); } # <--- prints this
eval 'moo();';
There's definitely a bug, since __PACKAGE__ does not agree with the function getting called.
do EXPR is consistent with eval EXPR, as stated in do's docs:
> echo "print(__PACKAGE__, $/);" > script.pl
> perl -e "package foo; do 'script.pl';"
main
Of course, eval EXPR is inconsistent with eval BLOCK which "parsed--and executed within the context of the current Perl program".
|