En la línea 8, con la ayuda del operador diamante, vamos obteniendo un nombre de archivo completo, en cada vuelta del while().
Using perl Syntax Highlighting
while (my $arxiu = <*$patro>) {
my($ciutat) = $arxiu =~ /^(\w+)$patro/;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En la línea 8, se recorre cada nombre de archivo que coincida con el patrón. $arxiu va tomando cada nombre de archivo.
Por ejemplo, en una vuelta sería $arxiu igual a 'Barcelonaplujatempabril.htm'.
A continuación viene la línea 10. En ella, aplicamos la expresión regular a $arxiu. La expresión regular lo que hace es:
- busca desde el comienzo de la cadena de caracteres (^)
- seguido por uno o más (+) caracteres alfanuméricos (\w)
- esos caracteres serán capturados (())
- y deben ser seguidos por el patrón $patro
Si el nombre del archivo coincide con todo este patrón, tendremos capturado en $1 el comienzo del nombre del archivo. En nuestro ejemplo, 'Barcelona'.
Luego, Perl mira a la izquierda. Y lo que se encuentra es un par de paréntesis:
my($ciutat). Entonces, el comportamiento de la expresión regular cambia, porque Perl se da cuenta de que se está ejecutando en contexto de lista, no en contexto de escalar.
Si hubiéramos escrito
my $ciutat = $arxiu =~ /^(\w+)$patro/; (sin los paréntesis), estaríamos ejecutándolo en contexto escalar, y el resultado que se almacena en $ciutat sería un valor de verdad '1' (verdadero) o '' (cadena nula, falso), para indicar si la expresión regular ha conseguido una coincidencia entre $arxiu y el patrón.
Pero... al poner los paréntesis a la izquierda, estamos queriendo decir que queremos que se ejecute en contexto de lista, y la consecuencia de ello es que la exp. reg. devuelve una lista de valores, que serán las capturas hechas dentro del patrón.
En el patrón solo tenemos un par de paréntesis de captura, así que la exp. reg. devuelve una lista de valores de un solo valor ('Barcelona'). Y se almacena en las variables que están entre los paréntesis de la izquierda.
Así que 'Barcelona' se almacena en $ciutat, que usaremos luego en la línea 13 para crear el nuevo nombre de archivo.