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.
HTH, Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/