Ene 262013
 
Artículo Perl

La variable $_

La variable $_ es la variable por defecto en perl, cuando no se indica ninguna otra variable:

  • al procesar un array en un bucle while o foreach
  • cuando se evalúa una expresión regular
  • en numerosas funciones que admiten uno o varios argumentos de entrada

Así, por ejemplo, podemos escribir un script que lee líneas de standard input y las descompone en palabras de la siguiente forma:

while (<>) {
    if (/prueba/) {
        foreach (split('s')) {
            print; print "\n";
        }
    }
}

Perl utiliza la variable $_ allí donde se requiere una variable, y no se ha utilizado ninguna explícitamente, de modo que el código del ejemplo es equivalente al código extendido:

while (defined($_ = <>)) {
    if ($_ =~ /prueba/) {
        foreach $_ (split('s',$_)) {
            print $_; print "\n";
        }
    }
}

Como vemos, se ha utilizado implícitamente la variable $_:

  • En el bucle while
  • En la evaluación de la expresión regular
  • En la sentencia split
  • En el bucle foreach
  • En la sentencia print

La variable @_

Esta variable contiene los argumentos que se le han pasado a una subrutina. Por ejemplo:

sub mi_funcion {
    my $n = @_;
    for (my $i = 0; $i < $n; $i++) {
        print "argumento " . ($i+1) . ": " . @_[$i] . "\n";
    }
}

mi_funcion ("primero","segundo", "ultimo");

Al ejecutar este código, obtenemos como resultado:

argumento 1: primero
argumento 2: segundo
argumento 3: ultimo

En el ejemplo podemos también ver en la sentencia “my $n = @_;” que al asignar a una variable escalar un array, el valor que se le asigna es el número de elementos del array. Se puede hacer más explicita esta conversión escribiendo la sentencia como “my $n = scalar @_;”

Las variables $a y $b

Estas variables son las que utiliza implicitamente la función sort.

El siguiente código utiliza la función sort para imprimir alfabéticamente una lista de valores:

my @valores = ("Barcelona","Zaragoza","Madrid","Alicante","Bilbao");
foreach (sort @valores){
    print $_ . "\n";
}

Con el siguiente resultado:

Alicante
Barcelona
Bilbao
Madrid
Zaragoza

Pero si queremos ordenar los valores por el número de caracteres, podemos escribir:

my @valores = ("Barcelona","Zaragoza","Madrid","Alicante","Bilbao");
foreach (sort {length($a) <=> length($b)} @valores){
    print $_ . "\n";
}

Y obtendremos:

Madrid
Bilbao
Zaragoza
Alicante
Barcelona

Para determinar el orden de dos elementos del array, la función sort asigna sus valores a las variables $a y $b. La función que definamos entre llaves {…} puede referenciar dichas variables para implementar cualquier criterio de ordenación que se desee.

 

Indice de artículos sobre programación en lenguaje Perl

 Publicado por en 7:19 pm

 Deja un comentario

(requerido)

(requerido)