REPORT ZHIDDEN_PERFORM.
*--[ Ofuscación en las asignación de las llamadas
perform tgbrty using 'lesil-ys' 'poiuytrewq'.
*--[ Utilizamos sy-lisel para no saber a quien se está llamando
perform qazwsx using sy-lisel.
perform tgbrty using 'lesil-ys' 'zxcvbnm'.
perform qazwsx using sy-lisel.
*--[ Esta es la rutina que asigna un valor a una variable
form tgbrty using qwedsazxc1 qwedsazxc2.
data: l_l like sy-lisel.
FIELD-SYMBOLS: <f>.
sy-pagno = strlen( qwedsazxc1 ).
sy-lisel = qwedsazxc1.
do sy-pagno TIMES.
CONCATENATE sy-lisel+0(1) l_l into l_l.
shift sy-lisel+0(sy-pagno) left.
ENDDO.
assign (l_l) to <f>.
<f> = qwedsazxc2.
endform.
*--[ Esta es la rutina de
form qazwsx using qwedsazxc.
data: l_l like sy-lisel.
sy-pagno = strlen( qwedsazxc ).
sy-lisel = qwedsazxc.
*--[ Aquí va el método de DECODE, como ejemplo he puesto algo sencillo:
*--[ Mirror de las variable
do sy-pagno TIMES.
CONCATENATE sy-lisel+0(1) l_l into l_l.
shift sy-lisel+0(sy-pagno) left.
ENDDO.
TRANSLATE l_l TO UPPER CASE.
*--[ Salto dinámico
perform (l_l) in PROGRAM (sy-cprog) if FOUND.
endform.
*--[ Procedimientos dinámicos, no hay referencias de ser llamados
form qwertyuiop.
write 'Hello'.
endform.
form mnbvcxz.
write 'World'.
endform.