En Perl, cuando tiene una estructura de datos anidada, se permite omitir las flechas de desreferenciación en 2d y más nivel de anidamiento. En otras palabras, los siguientes dos sintaxis son idénticos:Flechas anuladas de desreferenciación en Perl: ¿omitir o no omitir?
my $hash_ref = { 1 => [ 11, 12, 13 ], 3 => [31, 32] };
my $elem1 = $hash_ref->{1}->[1];
my $elem2 = $hash_ref->{1}[1]; # exactly the same as above
Ahora, mi pregunta es, hay una buena razón para elegir un estilo sobre el otro?
Parece ser un hueso popular de contención estilística (Justo en SO, Accidentalmente tropecé con this y this en el espacio de 5 minutos).
Hasta ahora, casi ninguno de los sospechosos habituales dice nada definitivo:
- perldoc se limita a decir "usted es libre de omitir el puntero de flecha eliminación de referencias".
- Conway "Perl Best Practices" dice "siempre que sea posible, desreferencia con flechas", pero parece aplicarse únicamente al contexto de desreferenciación de la referencia principal, flechas no opcionales en el nivel 2d de estructuras de datos anidados.
"Mastering Perl para Bioinfirmatics" el autor James Tisdall no da preferencia muy sólido, ya sea:
"El lector perspicaz puede tener cuenta de que parece que estamos omitiendo operadores de flecha entre matriz subíndices. (Después de todo, estos son matrices anónimas de matrices anónimas de matrices anónimas, etc., por lo que no deberían escribirse [$ array -> [$ i] -> [$ j] -> [$ k]?) Perl permite esto, solo el operador de flecha entre el nombre de la variable y se requiere el primer subíndice de matriz . Es hacer las cosas más fáciles en los ojos y ayuda a evitar el síndrome del túnel carpiano. En por otro lado, puede preferir mantener las flechas de desreferenciación en su lugar, al dejar en claro que se trata de referencias . Su elección."
ACTUALIZADO "Intermedio Perl", según su co-autor Brian D Foy, recomienda omitiendo las flechas. Véase la respuesta completa de Brian continuación.
Personalmente, 'm en el lado de 'poner siempre flechas en, ya que es más fácil de leer y obvio que están tratando con una referencia'
ACTUALIZACIÓN que volver más específico:. legibilidad, en el caso de una expresión de múltiples anidado wher Los propios subíndices son expresiones, las flechas ayudan a "visualizar visualmente" las expresiones al separar los subíndices entre sí.
Brian - el sistema no me dijeron que actualizó su respuesta, lo siento por notar tarde. – DVK