The sense tell me that should be foo! I tested this on Perl 5.6.1 and 5.8.3 and the output is the same.

Is that a bug or an odd behavior?

UP: Note that the main idea is not how to get foo as value. The idea is that __PACKAGE__ will always point to main unless we define the package inside the eval like this: eval('package foo ; __PACKAGE__'). This is very odd, since any code evaluated will make references to the local pakcage and not main.

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).

(Following up on a brief CB /msg exchange, that may be interesting to other monks.)

Speaking of documentation only here: I thought "executed within the context of the current Perl program" ought to have trumped eval EXPR's move to main, but as ikegami notes, the statement about context applies only to eval BLOCK.

But eval BLOCK of course does share some (a lot of) state with the main program; there's no new perl interpreter constructed, and the following does change the value of $x in the main program:

perl -le '$x = 42; eval q($x = 6*9); print $x' # prints "54"

The first thing that needs fixing in this case appears to be the docs.

To this humble initiate, it looks like a bug. In the following test program, the text inside the eval seems (correctly) to run in package P; the only difference that prepending 'package P' makes is to set __PACKAGE__ correctly.