features - ¿Cuál es la diferencia entre mi($ variableName) y mi $ variableName en Perl?
linux shell eval (4)
¿Cuál es la diferencia entre my ($variableName)
y my $variableName
en Perl? ¿Qué hacen los paréntesis?
Como las otras respuestas y comentarios explican el uso de corchetes proporcionan un contexto de lista para la variable. A continuación se muestra un fragmento de código que proporciona más explicaciones al hacer uso de la split
función perl.
use strict;
my $input = "one:two:three:four";
# split called in list context
my ($out) = split(/:/,$input);
# $out contains string ''one''
#(zeroth element of the list created by split operation)
print $out,"/n";
# split called in scalar context
my $new_out = split(/:/,$input);
# $new_out contains 4 (number of fields found)
print $new_out,"/n";
Consulte perdocub perdoc para obtener más información sobre my
operador. Aquí hay un pequeño extracto:
Sinopsis:
my $foo; # declare $foo lexically local
my (@wid, %get); # declare list of variables local
my $foo = "flurp"; # declare $foo lexical, and init it
my @oof = @bar; # declare @oof lexical, and init it
my $x : Foo = $y; # similar, with an attribute applied
El efecto importante es cuando inicializa la variable al mismo tiempo que la declara:
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
La otra vez es importante cuando declaras múltiples variables.
my ($a,$b,$c); # correct, all variables are lexically scoped now
my $a,$b,$c; # $a is now lexically scoped, but $b and $c are not
La última declaración le dará un error si use strict
.
La respuesta corta es que los paréntesis fuerzan el contexto de la lista cuando se usa en el lado izquierdo de an =
.
Cada una de las otras respuestas señala un caso específico donde esto hace una diferencia. Realmente, debería leer a través de perlfunc para tener una mejor idea de cómo las funciones actúan de manera diferente cuando se las llama en el contexto de la lista en oposición al contexto escalar.