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.