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[74] upon interpolation:

    @rocks = qw{ flintstone slate rubble };
    print "quartz @rocks limestone\n";  # prints five rocks separated by spaces

There 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. For historical reasons,[75] this is a fatal error at compile time:

    $email = "fred@bedrock.edu";  # WRONG! Tries to interpolate @bedrock
    $email = "fred\@bedrock.edu"; # Correct
    $email = 'fred@bedrock.edu';  # Another way to do that

However, in versions of Perl 5 soon to be released as we write this, the behavior of an unseen array variable will become similar to an unseen scalar variable, i.e., replaced with an empty string with a warning if warnings are enabled. The Perl developers apparently figure that 10 years of fatality are enough warning.

A single element of an array will be replaced by its value 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

The index expression is evaluated as an ordinary expression, as if it were outside a string. ...

Get Learning Perl, Fourth Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.