> Bryan R Harris wrote:
>> 
>> John W. Krahn wrote:
>>> 
>>> Bryan R Harris wrote:
>>>> 
>>>> John W. Krahn wrote:
>>>>> 
>>>>> The left hand side of the assignment determines context so the @l2r{...}
>>>>> part.
>>>> 
>>>> That strikes me as odd...  When perl goes to populate @l2r{"a","b"}, it
>>>> seems to me that it would go through this process:
>>>> 
>>>> - I have a slice here, so I'll loop over the slice elements
>>>> - The first is "a", so I'll pull a scalar off the list and assign it to
>>>> $l2r{"a"}
>>>> - The second is "b", so I'll pull another scalar off the list and assign it
>>>> to $l2r{"b"}
>>>> - Remaining scalars in the list are discarded
>>> 
>>> Correct, except for the loop part.
>>> 
>>>> Why would $l2r{"a"} here be considered list context?
>>> 
>>> It isn't, unless it's written as ( $l2r{"a"} ), then it's a list with
>>> one element.
>> 
>> So I still don't understand what about @l2r{"a","b"} makes it evaluate the
>> first (<FILE>... in list context instead of scalar context.
> 
> The '@' sigil at the front of the variable name says that it is either
> an array or a slice and so it forces list context on the right hand side
> of the assignment.

I think it finally clicked!

It makes more sense to me that (<FILE>,<FILE>) is kind of the same thing as
saying (@a,@b).  In list context @a returns the array as a list, but in
scalar context @a returns the number of elements.  Obviously (@a,@b) returns
the union of the two lists, not two scalars.  "<FILE>" is treated the same
way.

Thanks!

- Bryan



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to