logo - Diferencia entre & función y función() en perl
perl vs python (2)
Tiene usos muy específicos:
-
&
le dice a Perl que ignore el prototipo del submarino. -
&
puede permitirte usar la@_
la persona que@_
. (&foo;
sin paréntesis o argumentos). -
goto &foo;
ydefined &foo
. - Obtener una referencia (por ejemplo,
/&foo
).
Algunas personas (en su mayoría principiantes) lo usan para distinguir los subs de usuario de las funciones integradas, ya que las funciones integradas no pueden ir precedidas de &
.
Posible duplicado:
¿Cuándo debería usar & para llamar a una subrutina Perl?
En los scripts Perl, ¿por qué ese método de invocación de la función se escribe de manera diferente algunas veces? Veo y funciono y algunas veces funciono (). ¿Son los dos iguales y esto es solo un estilo que uno querría alardear? Si son iguales, ¿por qué ambos están disponibles? ¿No bastaría uno? Supongo que hay una diferencia semántica entre los métodos que los distinguen unos de otros ... ¿pero en qué tipo de circunstancias?
--- Ya que no puedo responder mi propia pregunta por razones de tiempo de espera - estoy actualizando la respuesta en la sección de la pregunta misma. Cuando tenga la oportunidad de actualizar el bloque de respuestas, lo pondré allí.
Encontré el texto relevante en el libro "Learning Perl" ... gracias por la sugerencia. Capítulo 4: Subrutinas - Omitir el signo distintivo.
Estaba más interesado en el ampersand y el uso de las funciones de Perl. Si una subrutina ya está definida antes de ser invocada, entonces se puede invocar la subrutina sin utilizar & mientras llamamos a la función de manera similar a invocar las funciones incorporadas. & también se usa para distinguir entre las funciones incorporadas y las funciones definidas por el usuario si la función que se invocar usa el mismo nombre que el de una función incorporada, siempre que se defina antes de invocarse.
El uso de () es simplemente para justificar el paso de los argumentos a las subrutinas, mientras que si no se usa, la lista predeterminada de argumentos actuales se pasa en la forma @_. Si los argumentos se especifican en () para una subrutina, se supone que es una subrutina y se invoca incluso si no se definió previamente durante el análisis.
Como lo mencionan @manatwork y @KeithThompson, puede encontrar información en estos artículos:
- Una descripción general: ¿Cuál es la diferencia entre llamar a una función como & foo y foo ()?
- Información sutil sobre el uso o no de una llamada a función - perlsub: Subrutinas Perl: Descripción .