new features español perl

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.