MainframeSupports
tip uge 11/2014:

I COBOL er det utroligt nemt at terminere det eksekverende program. Man udsteder simpelthen en GOBACK. Desværre er det en helt anden sag i PL/I. Måske har du opsnuset EXIT og STOP, prøvet dem af og konstateret, at der sker mærkelige ting og sager, især med returkoden, som man mister kontrollen over. I manualen er det beskrevet, at både EXIT og STOP fører til "abnormal termination", derfor kan de ikke bruges til simulering af GOBACK.

Heldigvis findes der en omgåelse, som jeg har benyttet i mange år. Lige før det END statement, der afslutter selve programmet (MAIN proceduren) definerer du en label. Jeg kalder den endOfProgram. Nu kan du faktisk simulere GOBACK funktionalitet således:

myPgm: PROC OPTIONS(MAIN);
...
CALL goback;
...
goback: PROC;
  GO TO endOfProgram;
END goback;
...
endOfProgram:
END myPgm;

Ovenstående eksempel er selvfølgelig meget simplificeret. Du kan selv tilføje mere kode, for eksempel til fejlhåndtering og opsætning af returkode. Det gode er, at programmet terminerer helt normalt og så kan du oven i købet benytte tricket fra uge 3/2014 ved at sætte et breakpoint på GO TO statementet og skippe det, når din debugger når dertil. Du kan udstede en CALL GOBACK lige hvor du vil, selv i en procedure kaldt i sytten niveauer eller mere. Det vil stadig virke korrekt.

Forrige danske tip        Last tip in english        Tip oversigten