in reply to Context propagation into subs and evals
It seems that what you wrote is correct. A possible source of confusion is that some part of the context is partially determined at compile time, and partially at run time.
In particular, the void context of all lines except the last inside a subroutine is determined at compile time, and the "Useless use of ... in void context" warnings from use warnings or -w are based on that:
$ perl -wce 'sub f { 1 + 1; 1}; f' Useless use of a constant (2) in void context at -e line 1. -e syntax OK
At run time, the context of the last expression or the return value is evaluated in the same context as the the whole sub, and that context information recursively flows inwards into any subs. So if you have
sub f() { g() }
then the context of g is that of f, determined dynamically at run time.
|
---|
In Section
Seekers of Perl Wisdom