in reply to Re: RFC: Context tutorial
in thread RFC: Context tutorial

Thanks for your comment. I guess I need to clarify that. The code you show does just what I would expect and also what I thought I described.

The array slice, @t[0,1], would be a list but for the scalar context. Because of the context, it evaluates to the last item in that list (i.e., $t[1]). This kind of behavior was the subject of Why does assignment change the result?, if you want to read about it more.

Before I post to Tutorials, I'll probably add your example to the others in that section to make this more obvious and probably also reword the line you quoted.

Thanks again for pointing this out.

Replies are listed 'Best First'.
Re^3: RFC: Context tutorial
by gwadej (Chaplain) on Jan 13, 2009 at 21:24 UTC

    I understand what it did. What I feel you were unclear about is the difference between:

    my $y = ( 'moe', 'larry', @t );

    and

    my $y = ( 'moe', 'larry', @t[0,1] );

    They react differently, and it takes a little thought to see why.

    G. Wade

      I see. Yes, thanks for clarifying further. An array in scalar context evaluates to the number of items in the array, but the array slice is a list. Now that I think about it, a whole section of "context clash" could be how arrays and hashes behave in list and scalar context, or maybe another section still.

      Thanks again for your input!

        An array in scalar context evaluates to the number of items in the array, but the array slice is a list.

        An array slice is not a list, it's an array slice. Each operator (including the list operator, arrays and array slices) decides what it returns in each context. In scalar context, an array slice returns the last element of the slice. It doesn't return a list. It has nothing to do with lists.