3. VARIABLES

3.1. Variables escalares $.

Cualquier nombre que comience con $ es una variable escalar, lo que significa que puede contener sólo un objeto, aunque este objeto puede ser también complejo. El signo = se usa para asignar el objeto a la variable. Los caracteres permitidos para un nombre son las letras, dígitos y el caracter de subrayado. Después de $ debe continuar al menos una letra. Las letras mayúsculas y minúsculas son diferenciadas en los nombres de variables.

Ejemplo:

$lenguaje = "Perl";
$LENGUAJE, $lenguaje y $LeNgUaJe son 3 variables distintas.

Otro ejemplo (holavar.pl):

$saludo = "Hola Mundo";
print $saludo;
$saludo = "Adios Mundo";
print $saludo;
$saludo = 100
print $saludo + 10;

Ejecutar para ver el resultado: HolaMundoAdiosMundo110
(¡Todo en una línea! ¡Qué feo queda!)

Vamos a arreglarlo añadiendo un salto de línea con \n al final de cada línea (holasal.pl).

$saludo = "Hola Mundo\n";
print $saludo;
$saludo = "Adios Mundo\n";
print $saludo;
$saludo = 100;
print $saludo + 10, "\n";

Observa el último print: en él se usa la coma para visualizar en una misma línea varios objetos de distinto tipo. Atento a esto porque es muy útil.

Otra cosa, $_ es una variable muy especial porque almacena siempre la última línea que se dio de entrada (ya lo veremos más adelante, tranquilo).

Por otro lado, ¿recuerdas los modelos? Sí, sí, efectivamente, como pensabas las variables también pueden almacenar modelos.

Ejemplo: $Variable = /^Canción triste de Hill Street/

3.2. Variables especiales.

$_ Almacena la línea completa que ha sido leido.
$` Almacena la parte situada a la izquierda de un modelo.
$' Almacena la parte situada a la derecha de un modelo.
$& Almacena la parte propia del modelo encontrado.

Ejemplo (varespe.pl):

# Variables especiales

$_ = "Me gustan los mazapanes y el anís";
/ mazapanes /;
print $`, "\n"; # "Me gustan los"
print $', "\n"; # "y el anís"
print $&, "\n"; # "mazapanes"
print $`.$&.$'; # Igual que $_

3.3. Variable de edición directa $^I.

Cuando a $^I se le asigna un valor como .bak o .000 el lenguaje activa la edición directa de los archivos que llegan al programa a través del operador <>. Es muy útil para buscar y sustituir cadenas dentro de un grupo de archivos. Estudia el siguiente ejemplo (edicdir.pl):

# Edición directa con Perl
# Busca y reemplaza todas las cadenas html por HTML
# Teclear: Perl edicdir.pl <unhtml.htm doshtml.htm

$^I = ".bak";
while (<>) {
s/html/HTML/g;
print;
}

# Si quieres probar otra vez teclea COPHTML.BAT
# Este fichero copia unhtml.hhh a unhtml.htm y doshtml.hhh a doshtml.htm
# reconstruyendo ambos htmls para una nueva ejecución.