in reply to Re^6: Evil Interview Questions (memes)
in thread Evil Interview Questions

The second code block in Re^4: Evil Interview Questions (memes) has what I think is the scenario you describe, but at no point does any item in the list have a different context from any other item.

Thank you. That was a special case that I wasn't previously aware of. Consider:

sub c { my $context= wantarray ? "list" : defined wantarray ? "scalar" : "void"; warn "$context( @_ )\n"; return( 'a', 'b' ); } sub t { return( c("a"), c("b") ); } my $scalar= ( c("one"), c("two"), c("three") ); warn $/; $scalar= t(); __END__ void( one ) void( two ) scalar( three ) scalar( a ) scalar( b )

You see that a void context is used in cases "one" and "two". After some contemplation, I produced a theory as to why this is not done in the case of a list literal (use of comma) as the return expression of a subroutine. Consider:

#!/usr/bin/perl -w use strict; my $scalar= ( 1, 2, 3 ); sub t { return( 1, 2, 3 ); } $scalar= t(); __END__ Useless use of a constant in void context at - line 3.

Hmm. Or perhaps it is just an unintentional quirk.

Can you expand on this? I'm not sure what you mean by "ways of producing a list of scalar values" or what the "any number of different behaviors" would be.

See On Scalar Context (as well as my reply to it).

- tye