strawberry logo lane historia example compilador perl

logo - perl vs python



¿Es "mi" una función en Perl? (2)

Sé que my se usa para declarar una variable local a un bloque o archivo. Siempre he supuesto que my es una palabra clave en Perl. Pero me acaban de decir que en realidad es una función. Una de las pruebas es que perldoc pone my sección de "Funciones", ver http://perldoc.perl.org/functions/my.html .

¿Cómo hace una función para declarar variables locales?


Sí, según la definición de Perl (muy única), my es una función. El párrafo de apertura de perlfunc define "función":

Las funciones en esta sección pueden servir como términos en una expresión. Se dividen en dos categorías principales: operadores de listas y operadores unarios nombrados.

my es un operador nombrado. Pero es especial de dos maneras:

  • Además de comportarse como una función (que asigna una nueva variable y devuelve esa variable), tiene un efecto de tiempo de compilación.
  • my ... es un operador unario, pero puede aceptar múltiples argumentos cuando se usan parens.

Si por otro lado se le preguntó si my era una función según la definición de C, entonces no. my no es una función C Tampoco es print , open , chr , etc. Todo en perlfunc es un operador; ninguno de ellos son funciones.

Finalmente, print , open y chr están mucho más cerca de la concepción de una persona de una función que la my . Para ser más precisos, pocas personas considerarían my función. Es más un tecnicismo que cualquier cosa significativa que coincida con la definición de función de Perfunc.

Ver también:

  • ¿Qué son los operadores / funciones integrados de Perl?
  • ¿Por qué esta variable [ my ] mantiene su valor?

my no es una función, simplemente está agrupada con funciones (en la documentación de Perl) porque funciona como una función.

Si miras perldoc perlfunc , es saith

Aquí están las funciones de Perl (incluyendo cosas que parecen funciones, como algunas palabras clave y operadores nombrados) organizadas por categoría ...

luego un poco debajo de eso

Palabras clave relacionadas con el alcance
caller , import , local , my , our , package , state , use

Específicamente, tenga en cuenta que la palabra "palabra clave" se utilizó allí en lugar de "función"

Entonces eso implica que encontraría algunas no funciones (por ejemplo, palabras clave) bajo las funciones de Perl AZ

Otra forma de decir esto: si algo está listado en "Funciones" en perldoc, no es necesariamente una función: puede ser una palabra clave o un operador nombrado que actúa como una función.