in reply to wantarray - surprise behaviour

If you want to use wantarray to tell you the context of an entity within a larger expression (which is what you seem to be trying to do), you have to call wantarray from within a sub, inserted into that larger expression.

So the following two examples will do what you're seeking:

print bleah(), "\n"; sub context { return wantarray() ? "List" : "Scalar"; } sub bleah { return ( "Context: " . context() );

...or if you're trying your hand at obfu...

print bleah(), "\n"; sub bleah { return ( "Context: " . &{sub { wantarray() ? "List" : "Scalar" }}() ); }

The second example creates an anonymous sub in which wantarray may reside, and then dereferences the anonymous sub, executing it within the concatenation expression.


Dave