in reply to list context

(...)=, my(...)=, @a=, %h= and possibly others cause the list assignment operator to be used instead of the scalar assignment operator. I've already written on the differences between the two.

In your specific case, there is no functional difference between my ($x) = and my $x = unless the "..." is nothing. If the "..." is nothing, there could be a difference.

use feature qw( say ); sub wp { my($x) = ($_[0] || 0); } sub np { my $x = ($_[0] || 0); } say wp(3); # 3 say np(3); # 3 say 0+wp(3); # 1 say 0+np(3); # 3