Perl - Variables especiales

Hay algunas variables que tienen un significado especial y predefinido en Perl. Son las variables que utilizan caracteres de puntuación después del indicador de variable habitual ($, @ o%), como $ _ (explicado a continuación).

La mayoría de las variables especiales tienen un nombre largo similar al inglés, por ejemplo, Variable de error del sistema operativo $! se puede escribir como $ OS_ERROR. Pero si vas a usar nombres en inglés, entonces tendrás que poner una líneause English;en la parte superior de su archivo de programa. Esto guía al intérprete para captar el significado exacto de la variable.

La variable especial más utilizada es $ _, que contiene la entrada predeterminada y la cadena de búsqueda de patrones. Por ejemplo, en las siguientes líneas:

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Cuando se ejecuta, esto producirá el siguiente resultado:

hickory
dickory
doc

Nuevamente, veamos el mismo ejemplo sin usar la variable $ _ explícitamente -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Cuando se ejecuta, esto también producirá el siguiente resultado:

hickory
dickory
doc

La primera vez que se ejecuta el bucle, se imprime "nogal". La segunda vez, se imprime "dickory" y la tercera vez, se imprime "doc". Esto se debe a que en cada iteración del ciclo, la cadena actual se coloca en $ _, y se usa de forma predeterminada por impresión. Estos son los lugares donde Perl asumirá $ _ incluso si no lo especifica:

  • Varias funciones unarias, incluidas funciones como ord e int, así como todas las pruebas de archivo (-f, -d) excepto -t, que por defecto es STDIN.

  • Varias funciones de lista como imprimir y desvincular.

  • Las operaciones de coincidencia de patrones m //, s /// y tr /// cuando se usan sin un operador = ~.

  • La variable de iterador predeterminada en un bucle foreach si no se proporciona ninguna otra variable.

  • La variable iteradora implícita en las funciones grep y map.

  • El lugar predeterminado para colocar un registro de entrada cuando el resultado de una operación de entrada de línea se prueba por sí mismo como el único criterio de una prueba while (es decir,). Tenga en cuenta que fuera de una prueba de tiempo, esto no sucederá.

Tipos de variables especiales

Según el uso y la naturaleza de las variables especiales, podemos clasificarlas en las siguientes categorías:

  • Variables especiales escalares globales.
  • Variables especiales de matriz global.
  • Variables especiales de hash global.
  • Manejadores de archivos especiales globales.
  • Constantes especiales globales.
  • Variables especiales de expresión regular.
  • Variables especiales de manejador de archivos.

Variables especiales escalares globales

Aquí está la lista de todas las variables especiales escalares. Hemos enumerado los nombres similares en inglés correspondientes junto con los nombres simbólicos.

PS El espacio predeterminado de entrada y búsqueda de patrones.
$ ARG
PS El número de línea de entrada actual del último identificador de archivo que se leyó. Un cierre explícito en el identificador de archivo restablece el número de línea.
$ NR
PS El separador de registros de entrada; nueva línea por defecto. Si se establece en la cadena nula, trata las líneas en blanco como delimitadores.
$ RS
PS El separador de campo de salida para el operador de impresión.
$ OFS
PS El separador de registros de salida para el operador de impresión.
$ ORS
PS Como "$", excepto que se aplica a valores de lista interpolados en una cadena entre comillas dobles (o una cadena interpretada similar). El valor predeterminado es un espacio.
$ LIST_SEPARATOR
PS El separador de subíndices para la emulación de matrices multidimensionales. El valor predeterminado es "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L Qué formato de salidas para realizar un avance de formulario. El valor predeterminado es "\ f".
$ FORMAT_FORMFEED
PS El conjunto actual de caracteres después del cual se puede romper una cadena para completar los campos de continuación (comenzando con ^) en un formato. El valor predeterminado es "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A El valor actual del acumulador de escritura para líneas de formato.
$ ACUMULADOR
PS Contiene el formato de salida para números impresos (obsoleto).
$ OFMT
PS El estado devuelto por el último cierre de tubería, el comando de tilde (``) o el operador del sistema.
$ CHILD_ERROR
PS Si se usa en un contexto numérico, produce el valor actual de la variable errno, identificando el último error de llamada al sistema. Si se utiliza en un contexto de cadena, produce la correspondiente cadena de error del sistema.
$ OS_ERROR o $ ERRNO
PS El mensaje de error de sintaxis de Perl del último comando eval.
$ EVAL_ERROR
$$ El pid del proceso Perl que ejecuta este script.
$ PROCESS_ID o $ PID
$ < El ID de usuario real (uid) de este proceso.
$ REAL_USER_ID o $ UID
$> El ID de usuario efectivo de este proceso.
$ EFFECTIVE_USER_ID o $ EUID
PS El ID de grupo real (gid) de este proceso.
$ REAL_GROUP_ID o $ GID
PS El gid efectivo de este proceso.
$ EFFECTIVE_GROUP_ID o $ EGID
$ 0 Contiene el nombre del archivo que contiene el script Perl que se está ejecutando.
$ PROGRAM_NAME
PS Índice del primer elemento de una matriz y del primer carácter de una subcadena. El valor predeterminado es 0.
PS Devuelve la versión más el nivel de parche dividido por 1000.
$ PERL_VERSION
$ ^ D El valor actual de los indicadores de depuración.
$ DEPURACIÓN
$ ^ E Mensaje de error extendido en algunas plataformas.
$ EXTENDED_OS_ERROR
$ ^ F El descriptor máximo de archivos del sistema, normalmente 2.
$ SYSTEM_FD_MAX
$ ^ H Contiene sugerencias internas del compilador habilitadas por ciertos módulos pragmáticos.
$ ^ Yo El valor actual de la extensión de edición in situ. Use undef para deshabilitar la edición en el lugar.
$ INPLACE_EDIT
$ ^ M El contenido de $ M se puede usar como un grupo de memoria de emergencia en caso de que Perl muera con un error de memoria insuficiente. El uso de $ M requiere una compilación especial de Perl. Consulte el documento INSTALAR para obtener más información.
$ ^ O Contiene el nombre del sistema operativo para el que se compiló el binario de Perl actual.
$ OSNAME
$ ^ P La bandera interna que el depurador borra para que no se depure.
$ PERLDB
$ ^ T La hora a la que comenzó a ejecutarse el script, en segundos desde la época.
$ TIEMPO BASE
$ ^ W El valor actual del interruptor de advertencia, ya sea verdadero o falso.
$ ADVERTENCIA
$ ^ X El nombre con el que se ejecutó el binario de Perl.
$ EXECUTABLE_NAME
$ ARGV Contiene el nombre del archivo actual cuando se lee desde <ARGV>.

Variables especiales de matriz global

@ARGV La matriz que contiene los argumentos de la línea de comandos previstos para el script.
@C ª La matriz que contiene la lista de lugares donde buscar scripts de Perl para ser evaluados por las construcciones do, require o use.
@F La matriz en la que se dividen las líneas de entrada cuando se proporciona el modificador -a de línea de comandos.

Variables especiales de hash global

%C ª El hash que contiene entradas para el nombre de archivo de cada archivo que se ha incluido mediante hacer o requerir.
% ENV El hash que contiene su entorno actual.
% SIG El hash utilizado para configurar controladores de señales para varias señales.

Manejadores de archivos especiales globales

ARGV El identificador de archivo especial que itera sobre los nombres de archivo de la línea de comando en @ARGV. Por lo general, se escribe como identificador de archivo nulo en <>.
STDERR El identificador de archivo especial para errores estándar en cualquier paquete.
STDIN El identificador de archivo especial para la entrada estándar en cualquier paquete.
STDOUT El identificador de archivo especial para la salida estándar en cualquier paquete.
DATOS El identificador de archivo especial que se refiere a cualquier cosa que siga al token __END__ en el archivo que contiene el script. O el identificador de archivo especial para cualquier cosa que siga al token __DATA__ en un archivo requerido, siempre y cuando esté leyendo datos en el mismo paquete en el que se encontró __DATA__.
_ (guion bajo) El identificador de archivo especial que se usa para almacenar en caché la información del último operador de prueba de archivo, lstat o estadística.

Constantes especiales globales

__FIN__ Indica el final lógico de su programa. Cualquier texto siguiente se ignora, pero se puede leer mediante el identificador de archivo DATA.
__ARCHIVO__ Representa el nombre del archivo en el punto de su programa donde se usa. No interpolado en cadenas.
__LÍNEA__ Representa el número de línea actual. No interpolado en cadenas.
__PAQUETE__ Representa el nombre del paquete actual en tiempo de compilación, o indefinido si no hay un paquete actual. No interpolado en cadenas.

Variables especiales de expresión regular

$ dígito Contiene el texto que coincide con el conjunto de paréntesis correspondiente en el último patrón emparejado. Por ejemplo, $ 1 coincide con lo que estaba contenido en el primer conjunto de paréntesis en la expresión regular anterior.
PS La cadena que coincide con la última coincidencia de patrón exitosa.
$ PARTIDO
$ ' La cadena que precede a cualquier coincidencia con la última coincidencia de patrón exitosa.
$ PREMATCH
PS La cadena que sigue a lo que coincide con la última coincidencia de patrón exitosa.
$ POSTMATCH
$ + El último corchete que coincide con el último patrón de búsqueda. Esto es útil si no sabe cuál de un conjunto de patrones alternativos coincidió. Por ejemplo: / Versión: (. *) | Revisión: (. *) / && ($ rev = $ +);
$ LAST_PAREN_MATCH

Variables especiales de identificador de archivo

$ | Si se establece en un valor distinto de cero, fuerza un fflush (3) después de cada escritura o impresión en el canal de salida seleccionado actualmente.
$ OUTPUT_AUTOFLUSH
PS El número de página actual del canal de salida seleccionado actualmente.
$ FORMAT_PAGE_NUMBER
$ = La longitud de página actual (líneas imprimibles) del canal de salida seleccionado actualmente. El valor predeterminado es 60.
$ FORMAT_LINES_PER_PAGE
PS El número de líneas que quedan en la página del canal de salida seleccionado actualmente.
$ FORMAT_LINES_LEFT
$ ~ El nombre del formato de informe actual para el canal de salida seleccionado actualmente. El valor predeterminado es el nombre del identificador de archivo.
$ FORMAT_NAME
$ ^ El nombre del formato de inicio de página actual para el canal de salida seleccionado actualmente. El valor predeterminado es el nombre del identificador de archivo con _TOP agregado.
$ FORMAT_TOP_NAME