100 Helloslanguages
Home / Languages / COBOL

COBOL

1959fraglet
historicalimperativeobject-oriented.cob
docker run --rm --platform="linux/amd64" 100hellos/cobol:latest

MCP + fragletc

MCPstdinargs
This language supports code execution via MCP and the fragletc CLI. Stdin piping and argument passing are both supported.
Install fragletc โ†’

COBOL is a historical imperative and object-oriented language first appearing in 1959.

Hello World

*> So... yeah, this is cobol.
*> BEGIN_FRAGLET
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_WORLD.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
    DISPLAY "Hello World!"
    STOP RUN.
*> END_FRAGLET

Coding Guide

Language Version

COBOL (GnuCOBOL 3.x), compiled to native code via C

Execution Model

  • Compiled language using GnuCOBOL (cobc)
  • Code is compiled to a binary, then executed
  • Your fraglet is the entire program: IDENTIFICATION DIVISION through PROCEDURE DIVISION

Key Characteristics

  • Free format (no leading columns required); case-insensitive keywords
  • Divisions: IDENTIFICATION, ENVIRONMENT, DATA (optional), PROCEDURE
  • PROGRAM-ID required; PROCEDURE DIVISION contains executable logic
  • DISPLAY for output; ACCEPT for input (stdin or COMMAND-LINE)

Fragment Authoring

Write a complete COBOL program. The fraglet replaces the whole source between the markers. You must include:

  • IDENTIFICATION DIVISION with PROGRAM-ID
  • PROCEDURE DIVISION with your logic
  • DATA DIVISION / WORKING-STORAGE SECTION when you need variables

Stdin and Args

  • Read stdin: Use ACCEPT ws-line in a loop; each ACCEPT reads one line. Use FUNCTION UPPER-CASE for uppercase.
  • Command-line args: Use ACCEPT ws-cmd FROM COMMAND-LINE to get the full command line; parse or display as needed (e.g. skip program name for "Args: ...").

Common Patterns

  • Output: DISPLAY "message"
  • Variables: WORKING-STORAGE SECTION, 01 my-var PIC X(20).
  • Numeric: 01 n PIC 99 VALUE 5.
  • Loop: PERFORM UNTIL condition ... END-PERFORM or PERFORM VARYING i FROM 1 BY 1 UNTIL i > 5 ...
  • Uppercase: FUNCTION UPPER-CASE(ws-line)
  • Trim: FUNCTION TRIM(ws-cmd)

Examples

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.
       PROCEDURE DIVISION.
           DISPLAY "Hello, World!"
           STOP RUN.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. GREET.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  A PIC 99 VALUE 5.
       01  B PIC 99 VALUE 10.
       PROCEDURE DIVISION.
           COMPUTE A = A + B
           DISPLAY "Sum: " A
           STOP RUN.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SQUARES.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  I PIC 99.
       01  S PIC 999 VALUE ZERO.
       01  N PIC 99 VALUE 5.
       PROCEDURE DIVISION.
           PERFORM VARYING I FROM 1 BY 1 UNTIL I > N
               COMPUTE S = S + I * I
           END-PERFORM
           DISPLAY "Sum of squares: " S
           STOP RUN.

Caveats

  • PROGRAM-ID must be a valid COBOL name (alphanumeric, hyphen).
  • Use STOP RUN to exit cleanly.
  • String length in PIC (e.g. PIC X(80)) must be large enough for input.
  • GnuCOBOL supports both fixed-format (columns 8โ€“72) and free format (-free); the container uses free format so you can left-justify code (no leading spaces required).

Fraglet Scripts

Cobol Fortune

#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. FORTUNE.
PROCEDURE DIVISION.
    DISPLAY "COBOL: 60 years of moving decimal points."
    STOP RUN.

Echo Args

#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. ECHOARGS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  CMD-LINE PIC X(512).
01  PROG-NAME PIC X(256).
01  ARGS-PART PIC X(256).
01  PTR PIC 9999.
01  REST-LEN PIC 9999.
01  SLASH-POS PIC 9999.
PROCEDURE DIVISION.
    ACCEPT CMD-LINE FROM COMMAND-LINE
    MOVE 1 TO PTR
    UNSTRING CMD-LINE DELIMITED BY SPACE
        INTO PROG-NAME WITH POINTER PTR
    END-UNSTRING
    MOVE 1 TO SLASH-POS
    INSPECT PROG-NAME TALLYING SLASH-POS
        FOR CHARACTERS BEFORE INITIAL "/"
    IF SLASH-POS < 256
        COMPUTE REST-LEN = 512 - PTR + 1
        MOVE CMD-LINE(PTR:REST-LEN) TO ARGS-PART
        DISPLAY "Args: " FUNCTION TRIM(ARGS-PART)
    ELSE
        DISPLAY "Args: " FUNCTION TRIM(CMD-LINE)
    END-IF
    STOP RUN.

Stdin Upper

#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. STDINUPPER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-LINE PIC X(256).
PROCEDURE DIVISION.
    ACCEPT WS-LINE
    DISPLAY FUNCTION UPPER-CASE(FUNCTION TRIM(WS-LINE))
    STOP RUN.

Test

#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_WORLD.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
    DISPLAY "Hello World!"
    STOP RUN.

Connections

influenced by

Container Info

image100hellos/cobol:latest
build scheduleFriday
fragletenabled