HP 3000 Manuals

General Formats (Cont.) [ Micro Focus COBOL Language Reference ] MPE/iX 5.0 Documentation


Micro Focus COBOL Language Reference

General Formats (Cont.) 

The PERFORM Statement (Cont.) 

General Rules.   

All Formats.   

   1.  When procedure-name-1 is specified, the PERFORM statement is
       referred to as an out-of-line PERFORM statement;

       For ANS85 only:  when procedure-name-1 is omitted, the PERFORM
       statement is referred to as an in-line PERFORM statement.

   2.  The statements contained within the range of procedure-name-1
       (through procedure-name-2 if specified) for an out-of-line PERFORM
       statement

       For ANS85 only:  or contained in the PERFORM statement itself for
       an in-line PERFORM statement

       are referred to as the specified set of statements.

   3.  For ANS85 only:  The END-PERFORM phrase delimits the scope of the
       in-line PERFORM statement.  (See the section Explicit And Implicit 
       Scope Terminators in the chapter Concepts of the COBOL Language.).

   4.  For ANS85 only:  An in-line PERFORM statement functions according
       to the following general rules for an otherwise identical
       out-of-line PERFORM statement, with the exception that the
       statements contained within the in-line PERFORM statement are
       executed in place of the statements contained within the range of
       procedure-name-1 (through procedure-name-2 if specified).  Unless
       specifically qualified by the word in-line or out-of-line, all the
       general rules which apply to the out-of-line PERFORM statement
       also apply to the in-line PERFORM statement.

   5.  When the PERFORM statement is executed, control is transferred to
       the first statement of the specified set of statements (except as
       indicated in General Rules 8b, 8c and 8d).  This transfer of
       control occurs only once for each execution of a PERFORM
       statement.  For those cases where a transfer of control to the
       specified set of statements does take place, an implicit transfer
       of control to the end of the PERFORM statement is established as
       follows:

          a.  If procedure-name-1 is a paragraph-name and
              procedure-name-2 is not specified, the return is after the
              last statement of procedure-name-1.

          b.  If procedure-name-1 is a section-name and procedure-name-2
              is not specified, the return is after the last statement of
              the last paragraph in procedure-name-1.

          c.  If procedure-name-2 is specified and it is a
              paragraph-name, the return is after the last statement of
              the paragraph.

          d.  If procedure-name-2 is specified and it is a section-name,
              the return is after the last statement of the last
              paragraph in the section.

          e.  For ANS85 only:  If an in-line PERFORM statement is
              specified, an execution of the PERFORM statement is
              completed after the last statement contained within it has
              been executed.

          f.  For MF only:    An EXIT PERFORM statement can be used to
              exit an in-line perform before executing all statements
              within the in-line perform.

   6.  There is no necessary relationship between procedure-name-1 and
       procedure-name-2 except that a consecutive sequence of
       operations is to be executed beginning at the procedure named
       procedure-name-1 and ending with the execution of the procedure
       named procedure-name-2.  In particular, GO and PERFORM
       statements can occur between procedure-name-1 and the end of
       procedure-name-2.  If there are two or more logical paths to the
       return point, then procedure-name-2 can be the name of a paragraph
       consisting of the EXIT statement, to which all of these paths must
       lead.

   7.  If control passes to the specified set of statements by means
       other than a PERFORM statement, control will pass through the last
       statement of the set to the next executable statement as if no
       PERFORM statement referenced the set.

   8.  The PERFORM statements operate as follows:

          a.  Format 1 is the basic PERFORM statement.  The specified set
              of statements referenced by this type of PERFORM statement
              is executed once and then control passes to the end of the
              PERFORM statement.

          b.  Format 2 is the PERFORM...TIMES. The specified set of
              statements is performed the number of times specified by
              integer-1 or by the initial value of the data item
              referenced by identifier-1 for that execution.  If at the
              time of the execution of a PERFORM statement, the value of
              the data item referenced by identifier-1 is equal to zero
              or is negative, control passes to the end of the PERFORM
              statement.  Following the execution of the specified set of
              statements the specified number of times, control is
              transferred to the end of the PERFORM statement.

              During execution of the PERFORM statement, reference to
              identifier-1 cannot alter the number of times the specified
              set of statements is to be executed from that which was
              indicated by the initial value of the data item referenced
              by identifier-1.

              Interger-1 must be zero or positive, but it may be signed.

          c.  Format 3 is the PERFORM...UNTIL. The specified set of
              statements is performed until the condition specified by
              the UNTIL phrase is true.  When the condition is true,
              control is transferred to the end of the PERFORM statement.
              If the condition is true when the PERFORM statement is
              entered, and the TEST BEFORE phrase is specified or 
              implied, (ANS85 only) no transfer to procedure-name-1 takes
              place, and control is passed to the end of the PERFORM
              statement.

              If the TEST AFTER phrase is specified, the PERFORM
              statement functions as if the TEST BEFORE phrase were
              specified except that the condition is tested after the
              specified set of statements has been executed.  Any
              subscripting or reference modification associated with the
              operands specified in condition-1 is evaluated each time
              the condition is tested (ANS85).

              For MF only:    When UNTIL EXIT is specified, the specified
              set of statements is performed repeatedly until some
              statement in the set causes this repetition to end.  In the
              case of an out-of-line PERFORM, the only statements that
              will cause this termination are statements such as EXIT
              PROGRAM and STOP RUN. In the case of an in-line PERFORM,
              the repetition can also be terminated by the EXIT PERFORM
              statement and the GO TO statement.

          d.  Format 4 is the PERFORM...VARYING. This variation of the
              PERFORM statement is used to augment the values referenced
              by one or more identifiers or index-names in an orderly
              fashion during the execution of a PERFORM statement.  In
              the following discussion, every reference to identifier as
              the object of the VARYING, AFTER, and FROM (current value)
              phrases also refers to index-names.

              If index-name-1 is specified, the value of identifier-3,
              index-name- 2, or literal-1 at the beginning of the
              execution of the PERFORM statement must correspond to an
              occurrence number of an element in the table associated
              with index-name-1.  If index-name-3 is specified, the value
              of identifier-6, index-name-4, or literal-3 at the
              beginning of the execution of the PERFORM statement must
              correspond to an occurrence number of an element in the
              table associated with index-name-3.

              Subsequent augmentation, as described below, of
              index-name-1 or index-name-3 must not result in the
              associated index being set to a value outside the range of
              the table associated with index-name-1 or index-name-3;
              except that, at the completion of the PERFORM statement,
              the index associated with index-name-1 can contain a value
              that is outside the range of the associated table by one
              increment or decrement value.

              If identifier-2 or identifier-5 is subscripted, the
              subscripts are evaluated each time the content of the data
              item referenced by the identifier is set or augmented.  If
              identifier-3, identifier-4, identifier-6, or identifier-7
              is subscripted, the subscripts are evaluated each time the
              content of the data item referenced by the identifier is
              used in a setting or augmenting operation.  Any
              subscripting or reference modification associated with the
              operands specified in condition-1 or condition-2
              is evaluated each time the condition is tested.
              Representations of the actions of several types of Format 4
              PERFORM statements are given on the following pages.

                 i.  If the TEST BEFORE phrase is specified or implied:

                     When the data item referenced by one identifier is
                     varied, the content of the data item referenced by
                     identifier-2 is set to literal-1 or the current
                     value of the data item referenced by identifier-3 at
                     the point of initial execution of the PERFORM
                     statement; then, if the condition of the UNTIL
                     phrase is false, the specified set of statements is
                     executed once.  The value of the data item
                     referenced by identifier-2 is augmented by the
                     specified increment or decrement value (literal-2 or
                     the value of the data item referenced by
                     identifier-4) and condition-1 is evaluated again.
                     The cycle continues until this condition is true, at
                     which point control is transferred to the end of the
                     PERFORM statement.  If condition-1 is true at the
                     beginning of execution of the PERFORM statement,
                     control is transferred to the end of the PERFORM
                     statement.

[]
Figure 4-1: The VARYING Option of a PERFORM Statement with the TEST BEFORE Phrase Having One Condition When the data items referenced by two identifiers are varied, the content of the data item referenced by identifier-2 is set to literal-1 or the current value of the data item referenced by identifier-3 and then the content of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6. After the contents of the data items referenced by the identifiers have been set, condition-1 is evaluated; if true, control is transferred to the end of the PERFORM statement; if false, condition-2 is evaluated. If condition-2 is false, the specified set of statements is executed once, then the content of the data item referenced by identifier-5 is augmented by literal-4 or the content of the data item referenced by identifier-7 and condition-2 is evaluated again. This cycle of evaluation and augmentation continues until this condition is true. When condition-2 is true, the content of the data item referenced by identifier-2 is augmented by literal-2 or the content of the data item referenced by identifier-4, the content of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6, and condition-1 is reevaluated. The PERFORM statement is completed if condition-1 is true; if not, the cycle continues until condition-1 is true.
[]
Figure 4-2: The VARYING Option of a PERFORM Statement with the TEST BEFORE Phrase Having Two Conditions At the termination of the PERFORM statement, the data item referenced by identifier-5 contains literal-3 or the current value of the data item referenced by identifier-6. The data item referenced by identifier-2 contains a value that exceeds the last used setting by one increment or decrement value, unless condition-1 was true when the PERFORM statement was entered, in which case the data item referenced by identifier-2 contains literal-1 or the current value of the data item referenced by identifier-3. ii. For ANS85 only: If the TEST AFTER phrase is specified: When the data item referenced by one identifier is varied, the content of the data item referenced by identifier-2 is set to literal-1 or the current value of the data item referenced by identifier-3 at the point of execution of the PERFORM statement; then the specified set of statements is executed once and condition-1 of the UNTIL phrase is tested. If the condition is false, the value of the data item referenced by identifier-2 is augmented by the specified increment or decrement value (literal-2 or the value of the data item referenced by identifier-4) and the specified set of statements is executed again. The cycle continues until condition-1 is tested and found to be true, at which point control is transferred to the end of the PERFORM statement.
[]
Figure 4-3: The VARYING Option of a PERFORM Statement with the TEST AFTER Phrase Having One Condition When the data items referenced by two identifiers are varied, the content of the data item referenced by identifier-2 is set to literal-1 or the current value of the data item referenced by identifier-3; then the current value of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6; and the specified set of statements is then executed. Condition-2 is then evaluated; if false, the content of the data item referenced by identifier-5 is augmented by literal-4 or the content of the data item referenced by identifier-7 and the specified set of statements is again executed. The cycle continues until condition-2 is again evaluated and found to be true, at which time condition-1 is evaluated. If false, the content of the data item referenced by identifier-2 is augmented by literal-2 or the content of data item referenced by identifier-4, the content of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6 and the specified set of statements is again executed. This cycle continues until condition-1 is again evaluated and found to be true, at which time control is transferred to the end of the PERFORM statement. After completion of the PERFORM statement, each data item varied by an AFTER or VARYING phrase contains the same value it contained at the end of the most recent execution of the specified set of statements. See Figure 3-4.
[]
Figure 4-4: The VARYING Option of a PERFORM Statement with a TEST AFTER Phrase Having Two Conditions During the execution of the specified set of statements associated with the PERFORM statement, any change to the VARYING variable (the data item referenced by identifier-2 and index-name-1), the BY variable (the data item referenced by identifier-4), the AFTER variable (the data item referenced by identifier-5 and index-name-3), or the FROM variable (the data item referenced by identifier-3 and index-name-2) will be taken into consideration and will affect the operation of the PERFORM statement. When the data items referenced by two identifiers are varied, the data item referenced by identifier-5 goes through a complete cycle (FROM, BY, UNTIL) each time the content of the data item referenced by identifier-2 is varied. When the contents of three or more data items referenced by identifiers are varied, the mechanism is the same as for two identifiers except that the data item being varied by each AFTER phrase goes through a complete cycle each time the data item being varied by the preceding AFTER phrase is augmented. 9. The range of a PERFORM statement consists logically of all those statements that are executed as a result of executing the PERFORM statement through execution of the explicit transfer of control to the end of the PERFORM statement. The range includes all statements that are executed as the result of a transfer of control by CALL, EXIT, GO TO and PERFORM statements in the range of the PERFORM statement, as well as all statements in declarative procedures that are executed as a result of the execution of statements in the range of the PERFORM statement. The statements in the range of a PERFORM statement need not appear consecutively in the source program. 10. Statements executed as the result of a transfer of control caused by executing an EXIT PROGRAM statement are not considered to be part of the range of the PERFORM statement when: a. the EXIT PROGRAM statement is specified in the same program in which the PERFORM statement is specified, and b. the EXIT PROGRAM statement is within the range of the PERFORM statement. 11. If the range of a PERFORM statement includes another PERFORM statement, the sequence of procedures associated with the included PERFORM should itself either be totally included in, or totally excluded from, the logical sequence referred to by the first PERFORM. Thus, an active PERFORM statement, whose execution point begins within the range of another active PERFORM statement should not allow control to pass to the exit of the other active PERFORM statement; furthermore, two or more such active PERFORM statements should not have a common exit. For MF only: These restrictions are not enforced. PERFORM statements can be freely nested, and recursion (a PERFORM statement performing a procedure containing it) is allowed. Only the exit point of the innermost PERFORM statement currently being executed is recognized. These rules can be changed by use of the PERFORM-TYPE directive (see your COBOL System Reference). See the following illustrations for examples of legal PERFORM constructs.
[]
12. A PERFORM statement that appears in a section that is not in an independent segment can have within its range, in addition to any declarative sections whose execution is caused within that range, one of the following: a. Sections and/or paragraphs wholly contained in one or more non-independent segments. b. Sections and/or paragraphs wholly contained in a single independent segment. For OSVS and VSC2 only: These restrictions do not apply. 13. A PERFORM statement that appears in an independent segment can have within its range, in addition to any declarative sections whose execution is caused within that range, only one of the following: a. Sections and/or paragraphs wholly contained in one or more non-independent segments. b. Sections and/or paragraphs wholly contained in the same independent segment as that PERFORM statement. For OSVS and VSC2 only: These restrictions do not apply. Format 4. 14. The data items referenced by identifier-4 and identifier-7 must not have a zero value. 15. If an index-name is specified in the VARYING or AFTER phrase, and an identifier is specified in the associated FROM phrase, the data item referenced by the identifier must have a positive value.


MPE/iX 5.0 Documentation