¿Cuál es la diferencia entre my ($variableName)
my $variableName
y en Perl? ¿Qué hacen los paréntesis?
Respuesta
El efecto es importante al inicializar la variable a la vez que se declara:
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
La otra vez que es importante es cuando se declara 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 se use strict
.
Así que en esencia: los corchetes 1. proporcionan contexto de lista, y 2. distribuyen el operador o la función a través de valores múltiples. – Ether
# 2 es técnicamente incorrecto y potencialmente engañoso. Es incorrecto que la forma en que funciona la declaración con los parens es definiendo una lista léxica en lugar de un escalar léxico. Es engañoso en que un principiante puede leer "los corchetes ... distribuir el operador o la función a través de valores múltiples" y esperar '($ x, $ y) = (1, 2) + 3' para asignar los valores 4 a' $ x' y 5 a '$ y' mediante" distribución del operador + a través de valores múltiples ". (En realidad, esa declaración asigna 5 a '$ x' y nada a' $ y'.) –
# 1 tampoco es completamente correcto. Los parens en el lado izquierdo de una tarea proporcionan un contexto de lista, pero eso no significa que proporcionen contexto de lista en cualquier otro lugar. –
Por favor, mire perdoc perlsub para obtener más información sobre el operador my
. He aquí 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
Como la otra respuesta y comentarios explicar el uso de soportes de proporcionar un contexto de lista para la variable. A continuación se muestra un fragmento de código que proporciona una explicación más, haciendo uso de la función de Perl split
.
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";
La respuesta corta es que el contexto de lista vigor paréntesis, cuando se utiliza en el lado izquierdo de un =
.
Cada una de las otras respuestas señalan un caso específico en el que esto hace la diferencia. Realmente, debe leer 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 lugar del contexto escalar.
- 1. ¿Cuál es la diferencia entre BAREWORD y * BAREWORD en Perl?
- 2. Espacios de nombres PHP: \ My \ Namespace o My \ Namespace?
- 3. ¿Qué está pasando cuando my() es condicional?
- 4. ¿Cuál es la diferencia entre 'eq' y '= ~' en Perl?
- 5. ¿Cuál es la diferencia entre open y sysopen en Perl?
- 6. ¿Cuál es la diferencia entre grep y map en Perl?
- 7. En Perl, ¿cuál es la diferencia entre usar y requerir para cargar un módulo?
- 8. rolling my own @ Html.BeginfBrm()
- 9. My isa-swizzling breaks KVO
- 10. ¿Cuál es la diferencia entre los operadores de cortocircuito de Perl (o, y) y (||, &&)?
- 11. ¿Podemos forzar que XmlWriter emita <my-tag></my-tag> en lugar de <my-tag/>?
- 12. ¿Cuál es la diferencia entre Perl modules autodie y Fatal?
- 13. ¿Cuál es la diferencia entre "perl test.pl" y "./test.pl"?
- 14. Ninject.MVC3, Nuget, WebActivator oh my
- 15. Salting my hashes con PHP y MySQL
- 16. ¿Cuál es la diferencia entre el alcance léxico y dinámico en Perl?
- 17. ¿Cuál es la diferencia entre ignorar una señal y decirle que no haga nada en Perl?
- 18. En Perl, ¿cuál es la diferencia entre "si se define $ count" y "if $ count"?
- 19. ¿Cuál es la diferencia entre getResourceAsStream con y sin getClassLoader?
- 20. ¿Por qué Programming Perl usa local (no my) para filehandles?
- 21. NSMutableURLRequest no obeiting my timeoutInterval
- 22. ¿Cuál es la diferencia entre módulo y distribución en CPAN?
- 23. ¿Cuál es la diferencia entre estos dos fragmentos de Perl?
- 24. ¿Cuál es la diferencia entre + = y = +?
- 25. ¿cuál es la diferencia entre:.! y: r !?
- 26. ¿Cuál es la diferencia entre ".equals" y "=="?
- 27. Cuál es la diferencia entre $ y jQuery
- 28. Cuál es la diferencia entre = y: =
- 29. Cuál es la diferencia entre $ (...) y `...`
- 30. ¿Cuál es la diferencia entre dict() y {}?
interesantes monjes Perl contestar [aquí] (http://www.perlmonks.org/?node_id=693666) que en última instancia se reduce el uso de parens en la declaración-asignaciones como un fin correr precedencia operación torpe. – ruffin
completa, respuesta detallada aquí: [Mini-Tutorial: Escalar vs operador de asignación Lista] (http://www.perlmonks.org/?node_id=790129). – ikegami