Using my with parentheses and only one variable
I sometimes see Perl code like this:
my ( $variable ) = blah....
What is the point of putting parentheses around a single variable? I thought parentheses were only used when declaring multiple variables, like:
my ( $var1, $var2, $var3 ) = blah...
Solution 1:
There are several scenarios when there is a difference:
-
When array is on right side
my @array = ('a', 'b', 'c'); my $variable = @array; # 3 size of @array my ($variable) = @array; # 'a' $array[0]
-
When list is on right side
my $variable = qw/ a b c d /; # 'd' last item of the list my ($variable) = qw/ a b c d /; # 'a' first item of the list
-
Subroutine with variable (array/scalar) return value
sub myFunction { ... return (wantarray() ? @array : $scalar); } my $variable = myFunction(...); # $scalar from the subroutine my ($variable) = myFunction(...); # $array[0] from the subroutine
Solution 2:
The parentheses create a list context which affects how the right hand side of the assignment is evaluated.
Compare
my $x = grep { /s/ } qw(apples bananas cherries);
print $x;
with
my ($x) = grep { /s/ } qw(apples bananas cherries);
print $x;
You will often use this construction when you just want to grab the first element of a list and discard the rest.