> 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/