[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

HP COBOL
Reference Manual


Previous Contents Index

Format 1

  1. Format 1 is the basic PERFORM statement. The statement sets in the PERFORM range execute once. Control then passes to the end of the PERFORM statement.

Format 2

  1. The statement sets execute the number of times specified by repeat-count. If the value of repeat-count is zero or negative when the PERFORM statement executes, control passes to the end of the PERFORM statement.
    During PERFORM statement execution, changing the value of repeat-count does not change the number of times the statement sets execute.

Format 3

  1. The statement sets execute until cond is true. Control then transfers to the end of the PERFORM statement.
  2. If cond is true when the PERFORM statement executes:
    • If there is a TEST BEFORE phrase or one is implied, there is no transfer to first-proc; control passes to the end of the PERFORM statement.
    • If there is a TEST AFTER phrase, the PERFORM statement tests cond after the statement set executes.

Format 4

  1. The Format 4 PERFORM statement systematically changes the value of var during its execution.
  2. If var is an index-name, its value, when the PERFORM statement execution begins, must equal the occurrence number of an element in its table.
  3. If init is an index-name, var must equal the occurrence number of an element in the table associated with init. As the value of the var index changes during PERFORM execution, it cannot contain a value outside the range of its table. However, when the PERFORM statement ends, the var index can contain a value outside the range of the table by one increment or decrement value.
  4. increm must not be zero.
  5. init must be positive when var is an index-name and init is an identifier.
  6. If there is a TEST BEFORE phrase (or one is implied), and one var is varied (see Figure 6-3):
    • var is set to the value of init when the PERFORM statement begins to execute.
    • If cond is false, the statement set executes once. The value of var changes by the increment or decrement value (increm), and cond is evaluated again. This cycle continues until cond is true. Control then transfers to the end of the PERFORM statement.
    • If cond is true when the PERFORM statement begins executing, control transfers to the end of the PERFORM statement.

    Figure 6-3 PERFORM ... VARYING with the TEST BEFORE Phrase and One Condition


  7. If there is a TEST BEFORE phrase (or one is implied), and the PERFORM statement has two vars (see Figure 6-4):
    • The first and second vars are set to the value of the first and second init when the PERFORM statement begins to execute.
    • If the first cond is true, control transfers to the end of the PERFORM statement.
    • If the second cond is false, the statement set executes once. The second var changes by the value of increm, and the second cond is evaluated again. This cycle continues until the second cond is true.
    • When the second cond is true, the value of the first var changes by the value of the first increm, and the second var is set to the value of the second init. The first cond is reevaluated. The PERFORM statement ends if the first cond is true. Otherwise, the cycle continues until cond is true.

    Figure 6-4 PERFORM ... VARYING with the TEST BEFORE Phrase and Two Conditions


  8. At the end of a PERFORM statement with the TEST BEFORE phrase:
    • The value of the first var exceeds the last-used value by one increment or decrement value. However, if cond was true when the PERFORM statement began, var contains the current value of init.
    • The value of each other var equals the current value of its associated init.
  9. If there is a TEST AFTER phrase and one var is varied (see Figure 6-5):
    • var is set to the value of init when the PERFORM statement starts to execute.
    • The statement set executes once. Then, cond is evaluated. If it is false, the value of var changes by the increment or decrement value (increm), and the statement set executes again. This cycle continues until cond is true. Control then transfers to the end of the PERFORM statement.

    Figure 6-5 PERFORM ... VARYING with the TEST AFTER Phrase and One Condition


  10. If there is a TEST AFTER phrase, and two vars are varied (see Figure 6-6):
    • The first and second vars are set to the value of the first and second init when the PERFORM statement starts to execute.
    • The statement set executes. The second cond is then evaluated. If it is false, the second var changes by the value of increm, and the statement set executes again. This cycle continues until the second cond is true.
    • When the second cond is true, the first cond is evaluated. If it is false, the value of the first var changes by the value of the first increm, the second var is set to the value of the second init, and the statement set executes again. The PERFORM statement ends if the first cond is true. Otherwise, the cycle continues until cond is true.

    Figure 6-6 PERFORM ... VARYING with the TEST AFTER Phrase and Two Conditions


  11. At the end of a PERFORM statement with the TEST AFTER phrase, the value of each var is the same as at the end of the most recent statement set execution.
  12. During execution of the sets of statements in the range, any change to var, increm, or init affects PERFORM statement operation.
  13. When there is more than one var, var in each AFTER phrase goes through a complete cycle each time var in the preceding AFTER (or VARYING) phrase is varied.

Additional References

Examples

In the examples' results, s represents a space. The examples assume these Data Division and Procedure Division entries:


DATA DIVISION.
WORKING-STORAGE SECTION.
01  ITEMA  VALUE "ABCDEFGHIJ".
    03  CHARA OCCURS 10 TIMES PIC X.
01  ITEMB  VALUE SPACES.
    03  CHARB OCCURS 10 TIMES PIC X.
01  ITEMC PIC 99  VALUE 1.
01  ITEMD PIC 99  VALUE 7.
01  ITEME PIC 99  VALUE 4.
01  ITEMF VALUE SPACES.
    03  ITEMG OCCURS 4 TIMES.
        05  ITEMH OCCURS 5 TIMES.
            07 ITEMI PIC 99.

PROCEDURE DIVISION.

   .
   .
   .

PROC-A.
    MOVE CHARA (ITEMC) TO CHARB (ITEMC).
PROC-B.
    MOVE CHARA (ITEMC) TO CHARB (10).
PROC-C.
    ADD 2 TO ITEMC.
PROC-D.
    MULTIPLY ITEMC BY ITEMD
                 GIVING ITEMI (ITEMC, ITEMD).
  1. Performing one procedure (Format 1):


    PERFORM PROC-A.
    

    ITEMB = Asssssssss
  2. Performing a range of procedures (Format 1):


    PERFORM PROC-A THRU PROC-B.
    

    ITEMB = AssssssssA
  3. Performing a range of procedures (Format 2):


    PERFORM PROC-A THRU PROC-C
      3 TIMES.
    

    ITEMB = AsCsEssssE
    ITEMC = 07
  4. Performing a range of procedures (Format 4):


    PERFORM PROC-A THRU PROC-B
         VARYING ITEMC FROM 1 BY 1
      UNTIL ITEMC > 5.
    

    ITEMB = ABCDEssssE
    ITEMC = 06
  5. Testing the UNTIL condition after execution (Format 4):


    PERFORM PROC-A THRU PROC-B
         TEST AFTER
         VARYING ITEMC FROM 1 BY 1
      UNTIL ITEMC > 5.
    

    ITEMB = ABCDEFsssF
    ITEMC = 06
  6. Performing a range of procedures varying a data item by a negative amount (Format 4):


    PERFORM PROC-A THRU PROC-B
      VARYING ITEMC FROM ITEMD BY -1
      UNTIL ITEMC < ITEME.
    

    ITEMB = sssDEFGssD
    ITEMC = 03
  7. In-line PERFORM (Format 4):


    PERFORM
      VARYING ITEMC FROM 1 BY 2
      UNTIL ITEMC > 7
       MOVE CHARA (ITEMC) TO CHARB (ITEMC)
       MOVE CHARA (ITEMC) TO CHARB (ITEMC + 3)
    END-PERFORM.
    

    ITEMB = AsCAECGEsG
  8. Varying two data items (Format 4):


    PERFORM PROC-D
      VARYING ITEMC FROM 1 BY 1 UNTIL ITEMC > 4
      AFTER ITEMD FROM 1 BY 1 UNTIL ITEMD > 5.
    

    ITEMG (1) = 01s02s03s04s05s
    ITEMG (2) = 02s04s06s08s10s
    ITEMG (3) = 03s06s09s12s15s
    ITEMG (4) = 04s08s12s16s20s


Previous Next Contents Index