Interpolating Arrays into Strings
Like scalars, array values may be interpolated into a double-quoted string. Elements of an array are automatically separated by spaces[*] upon interpolation:
@rocks = qw{ flintstone slate rubble };
print "quartz @rocks limestone\n"; # prints five rocks separated by spacesThere are no extra spaces added before or after an interpolated array; if you want those, you’ll have to put them in yourself:
print "Three rocks are: @rocks.\n"; print "There's nothing in the parens (@empty) here.\n";
If you forget that arrays interpolate like this, you’ll be surprised when you put an email address into a double-quoted string:
$email = "fred@bedrock.edu"; # WRONG! Tries to interpolate @bedrock
Although we intended to have an email address, Perl sees the
array named @bedrock
and tries to interpolate it. Depending on our version of Perl, we’ll
probably just get a warning:[†]
Possible unintended interpolation of @bedrock
To get around this problem, we either escape the @ in a double-quoted string or use a
single-quoted string:
$email = "fred\@bedrock.edu"; # Correct $email = 'fred@bedrock.edu'; # Another way to do that
A single element of an array will be replaced by its value, just as you’d expect:
@fred = qw(hello dolly); $y = 2; $x = "This is $fred[1]'s place"; # "This is dolly's place" $x = "This is $fred[$y−1]'s place"; # same thing
Note that the index expression is evaluated as an ordinary expression, as if it were outside a string. It is not variable-interpolated first. ...