Como sabemos, ciertas variables (como $1, $& ...)
reciben automáticamente un valor con cada operación
de ``matching''.  
Considere el siguiente código:
if (m/(...)/) {
  &do_something();
  print "the matched variable was $1.\n";
}
Puesto que $1 es automáticamente declarada local
a la entrada de cada bloque, no importa lo que se haya
hecho en la función  &do_something(), el valor de 
$1 en la sentencia print es el correspondiente
al ``matching'' realizado en el if.
Casiano Rodríguez León
