 The PERFORM statement is used to control execution of one or more imperative statements which are in the scope of that PERFORM
                  statement.
 The PERFORM statement is used to control execution of one or more imperative statements which are in the scope of that PERFORM
                  statement. 
                  	 
               

 The PERFORM statement is used to process each element of an array.
 The PERFORM statement is used to process each element of an array. 
                  	 
               
See also the section The EXIT Statement.
 
 
               
             
 
               
            
 
 
                
 
               
            

 Floating-point data items and literals can be used anywhere a numeric data item or literal can be specified. They cannot be
                     used where an integer is required.
 Floating-point data items and literals can be used anywhere a numeric data item or literal can be specified. They cannot be
                     used where an integer is required. 
                     	 
                   If neither the TEST BEFORE nor the TEST AFTER phrase is specified, the TEST BEFORE phrase is assumed.
 If neither the TEST BEFORE nor the TEST AFTER phrase is specified, the TEST BEFORE phrase is assumed. 
                     	 
                   Six AFTER phrases are permitted in the PERFORM statement.
 Six AFTER phrases are permitted in the PERFORM statement. 
                        		
                     
 This limit is raised to fifteen.
 This limit is raised to fifteen. 
                        		
                     

 
 
               
 Identifier-9 must either be a managed array or an instance of a collection class, i.e. a class that implements the System.IEnumerable
                     interface (.NET) or the java.lang.Iterable interface (JVM). Examples of such collection classes are the List and Dictionary
                     classes.
 Identifier-9 must either be a managed array or an instance of a collection class, i.e. a class that implements the System.IEnumerable
                     interface (.NET) or the java.lang.Iterable interface (JVM). Examples of such collection classes are the List and Dictionary
                     classes.
                     	 
                  
 It must be possible to perform a casting operation from the element type of identifier-9 to the type of identifier-8.
 It must be possible to perform a casting operation from the element type of identifier-9 to the type of identifier-8. 
                     	 
                   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 Compiler directive.
 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 Compiler directive. 
                        		
                     
See the following illustrations for examples of legal PERFORM constructs.
 
                        		  
 
                        		
                     
 The statements contained in the PERFORM statement itself are referred to as the specified set of statements.
 The statements contained in the PERFORM statement itself are referred to as the specified set of statements. 
                     	 
                   The END-PERFORM phrase delimits the scope of the in-line PERFORM statement. (See the topic 
                     		Explicit and Implicit Scope Terminators in the chapter 
                     		Concepts of the COBOL Language.)
 The END-PERFORM phrase delimits the scope of the in-line PERFORM statement. (See the topic 
                     		Explicit and Implicit Scope Terminators in the chapter 
                     		Concepts of the COBOL Language.) 
                     	 
                   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.
 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. 
                     	 
                   An EXIT PERFORM statement can be used to exit an in-line perform before executing all statements within the in-line perform.
  An EXIT PERFORM statement can be used to exit an in-line perform before executing all statements within the in-line perform.
                           
                           		  
                        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.
Integer-1 must be zero or positive, but it may be signed.
 
                              				 and the TEST BEFORE phrase is specified or implied,
 and the TEST BEFORE phrase is specified or implied, 
                                 				 
                              			 
                           
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.
 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. 
                              			 
                           
 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.
 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. 
                              			 
                           
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 PERFORM statements are given on the following pages.
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. See the diagram below.
 
                                    					 
 
                                    				  
                                 
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. See the diagram of The VARYING Option of a PERFORM Statement with the TEST BEFORE Phrase Having Two Conditions below.
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.
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.

 If the TEST AFTER phrase is specified:
 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. See the diagram below.

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. See the diagram The VARYING Option of a PERFORM Statement with a TEST AFTER Phrase Having Two Conditions below.
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.

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) is taken into consideration and affects 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.