TEST BEFORE and TEST AFTER options of PERFORM VARYING



       IDENTIFICATION DIVISION. 
       PROGRAM-ID.     BEFORE-AND-AFTER.
       AUTHOR.         BILL ROGERS.
      * 
      * Illustrates the TEST BEFORE and TEST AFTER options of
      * PERFORM VARYING.  See page 327.
      * 
       ENVIRONMENT DIVISION. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       01 X  PIC 9.
       01 SEPARATOR-LINE PIC X(50) VALUE ALL '-'.
       PROCEDURE DIVISION. 
       MAIN-LINE. 
           DISPLAY 'until subscript > 5 '.
           PERFORM PARA-A
               VARYING X FROM 1 BY 1 UNTIL X > 5.
           DISPLAY SEPARATOR-LINE.

           DISPLAY 'until subscript > 5, test before '.
           PERFORM PARA-A
               WITH TEST BEFORE
               VARYING X FROM 1 BY 1 UNTIL X > 5.
           DISPLAY SEPARATOR-LINE.

           DISPLAY 'until subscript > 5, test after '.
           PERFORM PARA-A
               WITH TEST AFTER
               VARYING X FROM 1 BY 1 UNTIL X > 5.
           DISPLAY SEPARATOR-LINE.

           DISPLAY 'until subscript = 5 '.
           PERFORM PARA-A
               VARYING X FROM 1 BY 1 UNTIL X = 5.
           DISPLAY SEPARATOR-LINE.

           DISPLAY 'until subscript = 5, test before '.
           PERFORM PARA-A
               WITH TEST BEFORE
               VARYING X FROM 1 BY 1 UNTIL X = 5.
           DISPLAY SEPARATOR-LINE.

           DISPLAY 'until subscript = 5, test after '.
           PERFORM PARA-A
               WITH TEST AFTER 
               VARYING X FROM 1 BY 1 UNTIL X = 5.
           STOP RUN. 

       PARA-A.
           DISPLAY 'PERFORMING PARA-A -- SUBSCRIPT IS NOW ' X.

Output:

until subscript > 5 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
PERFORMING PARA-A -- SUBSCRIPT IS NOW 5
--------------------------------------------------
until subscript > 5, test before 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
PERFORMING PARA-A -- SUBSCRIPT IS NOW 5
--------------------------------------------------
until subscript > 5, test after 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
PERFORMING PARA-A -- SUBSCRIPT IS NOW 5
PERFORMING PARA-A -- SUBSCRIPT IS NOW 6
--------------------------------------------------
until subscript = 5 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
--------------------------------------------------
until subscript = 5, test before 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
--------------------------------------------------
until subscript = 5, test after 
PERFORMING PARA-A -- SUBSCRIPT IS NOW 1
PERFORMING PARA-A -- SUBSCRIPT IS NOW 2
PERFORMING PARA-A -- SUBSCRIPT IS NOW 3
PERFORMING PARA-A -- SUBSCRIPT IS NOW 4
PERFORMING PARA-A -- SUBSCRIPT IS NOW 5

Cobol Home