From: Bryan R Harris <[EMAIL PROTECTED]>
> > 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.

Almost. It still depends on the left hand side. Try this:

@a = (10,20,30);
@b = (40,50,60);

$s = (@a,@b);
print "$s\n";
#versus
($s) = (@a,@b);
print "$s\n";


In the first case the @a and @b are evaluated in scalar context. Even 
though they are enclosed in braces.

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/


Reply via email to