

(,
)
y los operadores
+,
-,
* y
/.
Se trata de producir a partir de la cadena de entrada una lista
con los tokens y sus valores. Por ejemplo, la cadena
3*4-2
generará la lista:
('num', 3, 'op', '*', 'num', 4, 'op', '-', 'num', 2).
Las versiones mas recientes de Perl disponen de una opción
/c que afecta a las operaciones de emparejamiento
con /g en el contexto escalar. Normalmente, cuando una
búsqueda global escalar tiene lugar y no ocurre casamiento,
la posición \G es reestablecida al comienzo de
la cadena.
La opción /c hace que la posición inicial de
emparejamiento permanezca donde la dejó el último
emparejamiento con éxito.
combinando \G y /c es posible escribir
con cierta comodidad un analizador léxico:
{ # Con el redo del final hacemos un bucle "infinito"
if (\G(\d+)/gc) {
push @tokens, 'num', $1;
} elsif (m|\G([-+*()/])|gc) {
push @tokens, 'pun', $1;
} elsif (/\G./gc) {
die 'Caracter invalido';
}
else {
last;
}
redo;
}

