Passing Data Between Calling Programs and Subroutines
The default handling of data is different for internal and external subroutines.
When you work with global data in subroutines, you can put a copy of the global data on a local data stack. This is valid for global data in internal subroutines and for data declared as common part. To do so, you must work with field symbols (for more details about this topic, see

You should use common parts only for simple modularizations. Especially when using function modules in nested subroutine calls (for more information about function modules, see
Function Modules), the rules for accessing common parts can become complicated.To make programs more transparent and flexible, you should choose the following possibility to pass data between calling programs and subroutines:
Specify explicitly the data that you need and may change in internal as well as in external subroutines. To do so, you can use parameters during defining and calling subroutines. These parameters are defined in the <pass> option of the FORM (see
Defining Subroutines) and PERFORM (see Calling Subroutines) statements.The following topics describe