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

That's illuminating. Thanks!

Still, there are questions.

A "list literal" aka "use of the comma operator, usually between parens", evaluates all but the last expression in void context and then evaluates the last expression in scalar context and returns the resulting scalar.

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. Can you demonstrate the behavior you describe here?

Any number of ways of producing a list of scalar values (which is the "list" that an array contains) can have any number of different behaviors in a scalar context.

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.

Thanks again for your remarks.

Replies are listed 'Best First'.
Re^7: Evil Interview Questions (lists/contexts)
by tye (Sage) on Feb 11, 2008 at 04:48 UTC
    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