> From: Bryan R Harris <[EMAIL PROTECTED]>
>> Given an open filehandle, why don't these two things do the same thing?
>>
>> **************************************
>> @l2r{"a","b"} = (<FILE>, <FILE>);
>> $c = <FILE>;
>>
>> **************************************
>> $l2r{"a"} = <FILE>;
>> $l2r{"b"} = <FILE>;
>> $c = <FILE>;
>>
>> **************************************
>>
>> The first seems to be slurping the whole file into $l2r{"b"} and leaving $c
>> undefined... The second does what I want. Doesn't seem to make sense.
>
> Context. The <FILEHANDLE> returns a single line in scalar context and
> a list of all lines in a list context. And there is no such thing as
> a two-item-list context.
>
> So in the first case the assignment to @l2r{"a","b"} provides a list
> context so the very first <FILE> reads all the lines left in FILE,
> the second and third return an empty list. The first two lists are
> concatenated together and the first two items of the resulting list
> are assigned to $l2r{"a"} and $l2r{"b"}. And the rest of the list is
> forgotten. You'd have to do something like
>
> @l2r{"a","b"} = (scalar(<FILE>), scalar(<FILE>));
> or
> @l2r{"a","b"} = (<FILE>.'', <FILE>.'');
>
> to ensure that the <FILE> is evaluated in scalar context.
Which part is forcing the list context? The fact that the <FILE> is inside
parenthesis () or the @l2r{...} part?
Is every element of a list () contextualized as a list itself?
Thanks for the responses, Jeff and Jenda!
- Bryan
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/