En principio, y según el ejemplo, no hay diferencia aparente: $var es declarada y definida con un valor 0. Eso es porque solo tienes un valor y una variable.
Ahora bien, los paréntesis sí que marcan una pequeña-gran diferencia: indican que queremos ejecutar la sentencia en un contexto de
lista de elementos. Es decir, que queremos declarar (y, opcionalmente, definir) una
lista de variables locales:
my($x, $y, $z) = (3, 4, 2);my es solo un modificador que declara variables. La presencia de los paréntesis implica un cambio de contexto:
Con los paréntesis o con un
array:
Using perl Syntax Highlighting
my ($foo) = <STDIN>; # ¿MAL ESCRITO?
my @FOO = <STDIN>;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
estas dos sentencias suplen un contexto de lista a la parte derecha de la asignación, mientras que
Using perl Syntax Highlighting
my $foo = <STDIN>;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
suple un contexto de escalar.
La diferencia entre los dos contextos se puede ver con un ejemplo de asignación descompensada:
Using perl Syntax Highlighting
use v5.10;
my ($x) = (3, 4, 2, 1); # asignación en contexto lista
say $x; # 3 : solo nos quedamos con el primero
(my $x) = (3, 4, 2, 1); # lo mismo
say $x; # 3
my $x = (3, 4, 2, 1); # asignación en contexto escalar
say $x; # 1 : solo nos quedamos con el último
my @x = (3, 4, 2, 1); # declaramos y definimos un array
my $x = @x; # asignación en contexto escalar
say $x; # 4 : nos quedamos con el número de elementos del array
my($x) = @x; # asignación en contexto lista
say $x; # 3 : nos quedamos con el primero
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Como ves, los paréntesis sí que marcan una diferencia, pero solo cuando en la parte derecha tenemos una lista o un
array.
Más información en la sección
Private Variables via my() de
perlsub (aún no traducido).