A question about the comma operator:

(John and Chas deserve a rest from my questions, if they want it  =).

The binary comma operator in scalar context supposedly "evaluates its left
argument, throws that value away, then evaluates its right argument and
returns that value."

So this:

  $_ = "dogs and cats";
  $r = s/o/i/g, s/s/y/g;
  print "$r: $_\n";

... prints "1: digy and caty".

Why doesn't it print a "2" instead of a "1"?  It did 2 replaces of s to y...
If I change the second line to read:

  $r = s/s/y/g;

... it prints "2: dogy and caty".  I thought given the definition above that
the comma operator should do the first replace, then do the second replace
which returns a "2", then assign that 2 to $r.  Somehow $r is getting a 1.

If instead I did:

  $r = s/o/i/g, s/s/y/g, s/d/cow/g;

... is that still a binary comma operator?  It still does all the replaces,
and still comes back with a 1.

And why is:

  print $r, "\n";

... not evaluated as a binary comma operator?  Because it's in list context?
Then why can't I do this with a list (without the parenthesis)?

  @a = 1, 2, 3;

TIA.

- Bryan




-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to