MODULE 7: COBOL Control statements
PERFORM VARYING
- This format is similar to “FOR loop” of other programming language
- Syntax:-
PERFORM [para-1 [{THRU/THROUGH} para-n]] VARYING id-1 FROM id-2 BY id-3 UNTIL condition-1 [statement-block END-PERFORM]Where,
- para-1, para-n are paragraph names which we want to call
- id-1 can be numeric data item or index data item
- id-2 can be numeric data item or index data item or literal
- id-3 can be numeric data item or literal
- condition-1 is any conditional-expression which can return either true or false
- [statement-block END-PERFORM] is used for Inline PERFORM.
- The PERFORM in this format work like this:-
- First initializes id-1 with id-2. The condition is checked.
- If the condition is false, execute the para-1 through para-n and then increment the id-1 by id-3 and again test the condition(s)
- If the condition evaluates to false again, then again perform para-1 though para-n.
- Repeat this process until the condition is met and evaluates to true. Once condition evaluates to true then loop is braked and the next statement following PERFORM will be executed
- Example:-
In PROCUEDURE DIVISION,PARA-0. DISPLAY 'IN PARA-0'. DISPLAY 'WS-INDEX: ' WS-INDEX. PERFORM PARA-1 THRU PARA-1-EXIT VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX = 3. DISPLAY 'IN PARA-0 AGAIN' STOP RUN. PARA-1. DISPLAY 'IN PARA-1 WS-INDEX:' WS-INDEX PARA-1-EXIT. EXIT.SYSOUT display (output):-IN PARA-0 WS-INDEX: 10 IN PARA-1 WS-INDEX: 1 IN PARA-1 WS-INDEX: 2 IN PARA-0 AGAIN
- In above example, if you observe, before PERFORM statement is executed, WS-INDEX was having value 10 but when PERFORM statement is executed for the first time it initialized WS-INDEX to 1 and since condition evaluates to false, it performed PARA-1. In second time it incremented WS-INDEX by 1 and then again called PARA-1 because condition ‘WS-INDEX =3’ evaluates to false. After that, again WS-INDEX incremented by 1 but this time condition is met and thus PARA-1 is not called and control is transferred to next statement following PERFORM