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
In reply to Re^7: Evil Interview Questions (lists/contexts)
by tye
in thread Evil Interview Questions
by kyle
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |