in reply to Drowning(Distraction) in(via) nomenclature
in thread Seeking Perl docs about how UTF8 flag propagates

What am I missing

The $word* variables aren't getting assigned "an array", they are getting assigned the values from the array.

@collect = split( / /, 'This is a sentence.' );
  1. The array on the LHS means that the assigment is in list context.
  2. Split returns a list of scalars.
  3. In list context, the elements of what's on the LHS get assigned to the values from the list on the RHS, so the @collect array is populated from the values returned by split
( $word1, $word2, $word3, $word4 ) = @collect;
  1. The (...) on the LHS mean that the assignment is in list context
  2. Per List value constructors, the @collect array gets evaluated in list context, which results in the list (on the RHS) consisting of the elements from the @collect array
  3. The assignment then happens in list context, so the leftmost item of the list on the LHS ($word1) gets assigned the value of the leftmost item from the list on the RHS, and so on
print join( q[ ; ], ( $word1, $word2, $word3, $word4 ); => syntax error at parv.pl line 3, near ");"

but with a second ) on that line to allow it to compile:
  1. the words are given list context by the parentheses (unnecessarily, because join already gives list context)
  2. join concatenates the elements of that list, using space-semicolon-space as the separator, into a string
  3. That string is then printed.

(LHS = "Left-hand side", RHS = "Right-hand side": in these cases, relative to the assignment operator =)