You call subroutines using the statement
PERFORM ...[USING p1 p2 ... ] [CHANGING p1 p2 ... ].
Subroutines can call other subroutines (nested calls) and may also call themselves (recursive calls). Once a subroutine has finished running, the calling program carries on processing after the PERFORM statement. You can use the USING and CHANGING additions to supply values to the parameter interface of the subroutine.