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