|Portada|Blog|Space|

Volver a: [sedder]

Jump Tables:

Los jump tables son una forma no demasiado sucia de lograr funciones en
sed de manera poco sucia. De hecho hasta sería posible generar la jump
table automáticamente.

Dada su importancia hasta merece que el label :j esté dedicado a su uso.

Su implementación se logra definiendo al final del script una lista que
comienza con :j; y sigue con cada una de las labels que queramos poner
en nuestra jump table, usando la forma: s/|pelota$//;tpelota; donde
pelota es nuestro label de ejemplo.

Aunque parezca innecesario u obvio este procedimiento, lo que nos
permite en detalle es poder obtener algo similar a los GOTOs calculados.
Si además tenemos una estricta convención de llamadas, podemos usar el
final del pattern space para colocar "argumentos" que separaremos de
alguna forma simple, por ejemplo usando el caracter "|", y lograr así ni
más ni menos que funciones.

Ejemplo, un programa que agrega un guión al principio y al final de cada
línea:

# Hago lo que tengo que hacer:
  s/.*/-&-/

# llamo a la función:
  s/$/|l1/
  bmostrar;
  :l1;

# Fin del script:
  b

# Me defino mi función:
:mostrar
  h;s/|.*//;p;x;tj

# Nuestra pequeña jump table:
:j
  s/|l1$//;tl1;

Y bueno, como se habrán imaginado, las jump tables nos permiten tener la
posibilidad de definirnos funciones sumamente útiles como g, h, G, H y x
paramétricos para así tener hashes :D~~~