Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
💻 COBOL

COBOL PERFORM and Loops

Intermediate 🕑 22 min read 👁 1 views

PERFORM Statement

PERFORM is one of the most important statements in COBOL. It's used to execute paragraphs/sections and create loops.

Types of PERFORM

  1. Simple PERFORM - Execute a paragraph once
  2. PERFORM TIMES - Execute a fixed number of times
  3. PERFORM UNTIL - Execute until condition is true
  4. PERFORM VARYING - Execute with a counter variable

PERFORM THRU

Execute a range of paragraphs from one to another.

Inline PERFORM

Execute statements inline without calling a separate paragraph.

TEST BEFORE vs TEST AFTER

  • TEST BEFORE (default) - Condition checked before execution
  • TEST AFTER - Condition checked after execution (executes at least once)

Best Practices

  • Use meaningful paragraph names
  • Keep paragraphs focused on single tasks
  • Avoid deeply nested PERFORMs
  • Always initialize loop counters

Code Example

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM INITIALIZE-ROUTINE.
           PERFORM PROCESS-DATA.
           PERFORM CLEANUP-ROUTINE.
           STOP RUN.

       * Simple PERFORM
       INITIALIZE-ROUTINE.
           MOVE ZEROS TO WS-COUNTER.
           MOVE SPACES TO WS-OUTPUT.

       * PERFORM TIMES
       PROCESS-DATA.
           PERFORM PRINT-LINE 10 TIMES.

       PRINT-LINE.
           DISPLAY "LINE NUMBER: " WS-COUNTER.
           ADD 1 TO WS-COUNTER.

       * PERFORM UNTIL
       READ-FILE-LOOP.
           PERFORM READ-RECORD UNTIL WS-EOF = "Y".

       READ-RECORD.
           READ INPUT-FILE
               AT END MOVE "Y" TO WS-EOF
               NOT AT END PERFORM PROCESS-RECORD
           END-READ.

       * PERFORM VARYING
       TABLE-SEARCH.
           PERFORM VARYING WS-IDX FROM 1 BY 1
               UNTIL WS-IDX > 100 OR WS-FOUND = "Y"
               IF WS-TABLE(WS-IDX) = WS-SEARCH-KEY
                   MOVE "Y" TO WS-FOUND
               END-IF
           END-PERFORM.

       * Inline PERFORM
       CALCULATE-TOTALS.
           PERFORM VARYING WS-I FROM 1 BY 1
               UNTIL WS-I > WS-COUNT
               ADD WS-AMOUNT(WS-I) TO WS-TOTAL
           END-PERFORM.

       * PERFORM WITH TEST AFTER
       GET-VALID-INPUT.
           PERFORM WITH TEST AFTER
               UNTIL WS-INPUT IS NUMERIC
               DISPLAY "ENTER A NUMBER: "
               ACCEPT WS-INPUT
           END-PERFORM.

       CLEANUP-ROUTINE.
           DISPLAY "PROCESSING COMPLETE".