The MODULE clause is used in COBOL to define program modules that can be compiled separately and linked together to create larger applications. It enables modular programming, code reuse, and better organization of complex COBOL applications.
Modules are separate components that are linked together to form applications.
The MODULE clause is defined in the IDENTIFICATION DIVISION to specify that a program is a module rather than a complete, standalone program.
123456789101112131415161718192021* Basic MODULE clause syntax IDENTIFICATION DIVISION. MODULE-ID. module-name. * Examples IDENTIFICATION DIVISION. MODULE-ID. DATA-VALIDATION-MODULE. IDENTIFICATION DIVISION. MODULE-ID. FILE-IO-MODULE. IDENTIFICATION DIVISION. MODULE-ID. BUSINESS-LOGIC-MODULE. * Complete example IDENTIFICATION DIVISION. MODULE-ID. UTILITY-MODULE. AUTHOR. "Development Team". DATE-WRITTEN. "2024-01-15". DATE-COMPILED. "2024-01-15". SECURITY. "Confidential".
The MODULE clause replaces PROGRAM-ID for modular components.
123456789101112131415161718192021222324252627282930313233343536373839404142* Complete module example IDENTIFICATION DIVISION. MODULE-ID. VALIDATION-MODULE. AUTHOR. "Development Team". DATE-WRITTEN. "2024-01-15". ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 VALIDATION-RULES. 05 MIN-LENGTH PIC 9(2) VALUE 3. 05 MAX-LENGTH PIC 9(2) VALUE 50. 05 ALLOWED-CHARS PIC X(62) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789". LINKAGE SECTION. 01 VALIDATION-PARAMETERS. 05 INPUT-DATA PIC X(50). 05 VALIDATION-RESULT PIC X(1). 05 ERROR-MESSAGE PIC X(100). PROCEDURE DIVISION USING VALIDATION-PARAMETERS. MAIN-LOGIC. * Validate input data PERFORM VALIDATE-INPUT GOBACK. VALIDATE-INPUT. * Check data length IF LENGTH OF INPUT-DATA < MIN-LENGTH MOVE "N" TO VALIDATION-RESULT MOVE "Data too short" TO ERROR-MESSAGE ELSE IF LENGTH OF INPUT-DATA > MAX-LENGTH MOVE "N" TO VALIDATION-RESULT MOVE "Data too long" TO ERROR-MESSAGE ELSE MOVE "Y" TO VALIDATION-RESULT MOVE SPACES TO ERROR-MESSAGE END-IF.
This example shows a complete validation module with parameters.
123456789101112131415161718192021222324252627282930313233343536* Main program that uses modules IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-APPLICATION. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 USER-INPUT PIC X(50). 01 VALIDATION-RESULT PIC X(1). 01 ERROR-MESSAGE PIC X(100). 01 PROCESSED-DATA PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. * Get user input DISPLAY "Enter data: " ACCEPT USER-INPUT * Call validation module CALL "VALIDATION-MODULE" USING USER-INPUT, VALIDATION-RESULT, ERROR-MESSAGE * Check validation result IF VALIDATION-RESULT = "Y" * Call processing module CALL "PROCESSING-MODULE" USING USER-INPUT, PROCESSED-DATA DISPLAY "Processed: " PROCESSED-DATA ELSE DISPLAY "Error: " ERROR-MESSAGE END-IF STOP RUN.
Main programs use CALL statements to invoke modules.
The MODULE clause is essential in various scenarios where modular programming and code reuse are needed for better application organization.
123456789101112131415161718192021222324252627282930313233343536373839404142434445* Utility library module IDENTIFICATION DIVISION. MODULE-ID. UTILITY-LIBRARY. DATA DIVISION. WORKING-STORAGE SECTION. 01 UTILITY-CONSTANTS. 05 PI-VALUE PIC 9V999999 VALUE 3.141593. 05 E-VALUE PIC 9V999999 VALUE 2.718282. 05 MAX-INTEGER PIC 9(10) VALUE 2147483647. LINKAGE SECTION. 01 UTILITY-PARAMETERS. 05 FUNCTION-CODE PIC X(10). 05 INPUT-VALUE PIC 9(10)V99. 05 OUTPUT-VALUE PIC 9(10)V99. 05 RETURN-CODE PIC 9(2). PROCEDURE DIVISION USING UTILITY-PARAMETERS. MAIN-LOGIC. EVALUATE FUNCTION-CODE WHEN "SQUARE" PERFORM CALCULATE-SQUARE WHEN "SQRT" PERFORM CALCULATE-SQRT WHEN "LOG" PERFORM CALCULATE-LOG WHEN OTHER MOVE 99 TO RETURN-CODE END-EVALUATE GOBACK. CALCULATE-SQUARE. COMPUTE OUTPUT-VALUE = INPUT-VALUE ** 2 MOVE 0 TO RETURN-CODE. CALCULATE-SQRT. * Square root calculation logic MOVE 0 TO RETURN-CODE. CALCULATE-LOG. * Logarithm calculation logic MOVE 0 TO RETURN-CODE.
Utility libraries provide common mathematical and processing functions.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354* Data access module IDENTIFICATION DIVISION. MODULE-ID. DATA-ACCESS-MODULE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS CUSTOMER-ID. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-EMAIL PIC X(50). LINKAGE SECTION. 01 ACCESS-PARAMETERS. 05 OPERATION-CODE PIC X(10). 05 CUSTOMER-KEY PIC 9(6). 05 CUSTOMER-DATA PIC X(86). 05 RETURN-CODE PIC 9(2). PROCEDURE DIVISION USING ACCESS-PARAMETERS. MAIN-LOGIC. EVALUATE OPERATION-CODE WHEN "READ" PERFORM READ-CUSTOMER WHEN "WRITE" PERFORM WRITE-CUSTOMER WHEN "UPDATE" PERFORM UPDATE-CUSTOMER WHEN "DELETE" PERFORM DELETE-CUSTOMER WHEN OTHER MOVE 99 TO RETURN-CODE END-EVALUATE GOBACK. READ-CUSTOMER. MOVE CUSTOMER-KEY TO CUSTOMER-ID READ CUSTOMER-FILE INVALID KEY MOVE 10 TO RETURN-CODE NOT INVALID KEY MOVE CUSTOMER-RECORD TO CUSTOMER-DATA MOVE 0 TO RETURN-CODE END-READ.
Data access modules encapsulate file operations and data access logic.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546* Business logic module IDENTIFICATION DIVISION. MODULE-ID. BUSINESS-LOGIC-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 BUSINESS-RULES. 05 MIN-BALANCE PIC 9(8)V99 VALUE 100.00. 05 INTEREST-RATE PIC 9V9999 VALUE 0.0525. 05 TRANSACTION-LIMIT PIC 9(8)V99 VALUE 10000.00. LINKAGE SECTION. 01 BUSINESS-PARAMETERS. 05 TRANSACTION-TYPE PIC X(10). 05 ACCOUNT-BALANCE PIC 9(8)V99. 05 TRANSACTION-AMOUNT PIC 9(8)V99. 05 APPROVAL-STATUS PIC X(1). 05 ERROR-CODE PIC 9(2). PROCEDURE DIVISION USING BUSINESS-PARAMETERS. MAIN-LOGIC. EVALUATE TRANSACTION-TYPE WHEN "WITHDRAWAL" PERFORM PROCESS-WITHDRAWAL WHEN "DEPOSIT" PERFORM PROCESS-DEPOSIT WHEN "TRANSFER" PERFORM PROCESS-TRANSFER WHEN OTHER MOVE 99 TO ERROR-CODE END-EVALUATE GOBACK. PROCESS-WITHDRAWAL. IF TRANSACTION-AMOUNT > TRANSACTION-LIMIT MOVE "N" TO APPROVAL-STATUS MOVE 20 TO ERROR-CODE ELSE IF ACCOUNT-BALANCE - TRANSACTION-AMOUNT < MIN-BALANCE MOVE "N" TO APPROVAL-STATUS MOVE 21 TO ERROR-CODE ELSE MOVE "Y" TO APPROVAL-STATUS MOVE 0 TO ERROR-CODE END-IF.
Business logic modules implement domain-specific rules and processing.
Following these best practices ensures effective use of the MODULE clause in COBOL applications.
Pattern | Description | Example |
---|---|---|
Functional | Group by function | VALIDATION-MODULE, CALCULATION-MODULE |
Data Access | Group by data entity | CUSTOMER-MODULE, ORDER-MODULE |
Utility | Common utilities | DATE-UTILS, STRING-UTILS |
Business Logic | Domain-specific logic | BANKING-LOGIC, INVENTORY-LOGIC |
Interface | External system interfaces | API-INTERFACE, LEGACY-INTERFACE |
Use Case | MODULE Suitability | Reasoning |
---|---|---|
Large applications | Excellent | Better organization and maintenance |
Code reuse | Excellent | Share functionality across programs |
Team development | Excellent | Parallel development of components |
Simple programs | Poor | Unnecessary complexity |
Quick prototypes | Poor | Slower development cycle |
Usage | Syntax | Example |
---|---|---|
Basic module | IDENTIFICATION DIVISION. MODULE-ID. name. | MODULE-ID. UTILITY-MODULE. |
Module with parameters | PROCEDURE DIVISION USING params. | PROCEDURE DIVISION USING PARAM-LIST. |
Module call | CALL "module-name" USING params | CALL "VALIDATION-MODULE" USING DATA |
Module return | GOBACK | GOBACK |
Module documentation | AUTHOR, DATE-WRITTEN, etc. | AUTHOR. "Team Name". |
1. What is the primary purpose of the MODULE clause in COBOL?
2. In which COBOL division is the MODULE clause typically defined?
3. How is the MODULE clause used in COBOL programs?
4. Which of the following is a common use case for the MODULE clause?
5. How do you link modules defined with the MODULE clause?
Understanding modular programming in COBOL.
Understanding how to call modules and subprograms.
Understanding parameter passing in modules.
Understanding COBOL program organization.
Best practices for organizing COBOL code.