On Tue, Oct 07, 2003 at 01:09:26AM +0200, Kevin Pfeiffer wrote:
> I just noticed that:
> 
> print join ", ", @list, "\n";
> 
> produces output such as:
> 
> a,
> a, b, c,
> 
> whereas:
> 
> print join(", ", @list), "\n";
> 
> produces:
> 
> a
> a, b, c
> 
> (no trailing comma) -- strange... I think I remember reading somewhere
> that without the parentheses 'join' doesn't really know exactly where 
> to stop.  Sound right?

It's not *wrong*, but you make this sound more haphazard than it
really is.  The join() operator takes a scalar and a list -- so 
when you don't use parentheses, the expression is parsed like this.

  my @array = qw(a b c);
  print( join(',', @array, "\n") );

The comma, the elements of the array, and the newline will all be 
passed as arguments to join().  So join() puts a comma between
"a" and "b", between "b" and "c", and between "c" and "\n".

Then print() gets just one argument: the result of join(), which is
the string "a,b,c,\n".

If you add the parentheses yourself and put them here:

  my @array = qw(a b c);
  print( join(',', @array), "\n" );
  #                ----> ^ <----

Then the comma and the elements of @array -- but NOT the newline --
are passed as arguments to join().  In this case join() puts a comma
between "a" and "b" and between "b" and "c".  And this time print()
gets two arguments: the result of join(), which is "a,b,c", and the
newline.

-- 
Steve

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to