MainframeSupports
tip uge 5/2011:

Jeg kom for nylig i tanke om et gammelt PL/I trick i forbindelse med parameter overførsler. Min første tanke var, at det må da være dokumenteret i manualen, men jeg kan ikke finde det beskrevet. Nu er PL/I language reference manualen heller ikke den lettest forståelige manual på markedet, så det står nok beskrevet et eller andet sted. Mit næste skridt var at prøve det af. Jeg kunne bare konstatere, at det virker.

Og her kommer så et eksempel på, hvad tricket går ud på:

DCL a CHAR(1);
a = 'A';
CALL aProc(a);
PUT SKIP LIST('A=''' !! a !! '''');
a = 'A';
CALL aProc((a));
PUT SKIP LIST('A=''' !! a !! '''');

aProc: PROC(parm);
  DCL parm CHAR(1);

  parm = 'X';

END aProc;

Resultatet af at udføre ovenstående stump kode ser således ud:

A='X'
A='A'

Det første kald til APROC ser ganske almindeligt ud, og A ændres som forventet til indholdet X af APROC. Efter det andet kald er A ikke blevet ændret. Ved at sætte en parameter på et CALL statement i parentes, så laver PL/I et såkaldt dummy argument og værdien af parameteren overføres i stedet for adressen på parameteren. Hvis du også koder COBOL, så svarer det at sætte en parameter i parentes til at skrive BY VALUE efter en parameter i COBOL.

Forrige danske tip        Last tip in english        Tip oversigten