Forleden var der en kollega, der spurgte mig, hvordan man fik variable i PL/I til at huske deres værdi fra kald til kald ligesom variable i COBOLs working-storage section. Så kom jeg i tanke om et tip, jeg skrev helt tilbage i uge 8/2001. Tippet viser, hvordan en variabel i en procedure overlever fra kald til kald, men rent faktisk overlever controlled variable også fra programkald til programkald. Du kan derfor kode dit PL/I program således for at opnå samme effekt for variable som i COBOL:
I proceduren initWS behøver du ikke nulstille strukturen ws, da den vil være initialiseret på samme måde som enhver almindelig uinitialiseret PL/I variabel. Hvis du skulle have behov for særlig initialisering af en working-storage variabel ved første kald af programmet, så er det på det sted, hvor jeg initialiserer ws, at det skal foregå. Alle variable i strukturen ws vil overleve mellem hver eneste kald til programmet.
Jeg har afprøvet ovenstående i forskellige kombinationer. Uanset om programmet er statisk linket ind i et load-modul eller kaldes dynamisk, så virker det. I den nyeste udgave af PL/I gør det heller ingen forskel om programmet kaldes fra COBOL i stedet for fra PL/I. Hvis du fra samme program kalder programmet både dynamisk og statisk, så har den dynamisk kaldte version af programmet en anden working-storage end den statisk kaldte. Det gælder i øvrigt også, hvis det kaldte program var et COBOL program. Der er altså ingen forskel på overlevelsen af en controlled variabel i forhold til variable i COBOL working-storage.
Under CICS skal du være opmærksom på, at hverken controlled variable eller COBOL working-storage overlever, hvis du laver EXEC CICS LINK til programmet, i hvert fald fungerer det på den måde på den installation, hvor jeg arbejder i øjeblikket. Det er i øvrigt hamrende irriterende, men sådan har det vist altid været, i hvert fald ifølge en anden god kollega, som jeg har stor tillid til. Selv husker jeg det ikke så godt.