Here is compile JCL. Change the SET var=value" statement to ones appropriate for your site, an go play.
//COMPILEP JOB (PRINO),
// 'PRINO COMP/LINK/GO',
// CLASS=A,
// MSGCLASS=H,
// MSGLEVEL=(2,0),
// NOTIFY=&SYSUID
//*********************************************************************
//* PL/I Compile & Go (Enterprise Compiler)
//*********************************************************************
// SET INCLIB='MY.INC.SRCE'
// SET PLILIB='PLI.V3R9M0.SIBMZCMP'
//*********************************************************************
//IEFBR14 EXEC PGM=IEFBR14
//LIST DD DSN=&SYSUID..&SRCE..LIST,
// DISP=(MOD,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,1)
//*********************************************************************
//IBMZPLI EXEC PGM=IBMZPLI,
// REGION=0M,
// PARM=('+DD:PLISTD +DD:PLIUSER')
//STEPLIB DD DSN=&PLILIB,DISP=SHR
// DD DSN=CEE.SCEERUN,DISP=SHR
// DD DSN=CEE.SCEERUN2,DISP=SHR
//SYSUEXIT DD DSN=NULLFILE,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
//PLISTD DD *
aggregate(dec)
arch(8)
attributes(s)
backreg(5)
bifprec(31)
blank('05'x)
blkoff
ceestart(last)
check(noconformance nostorage)
cmpat(v2)
codepage(1140)
nocommon
compile
csect
csectcut(4)
currency('$')
nodbcs
dd(sysprint,sysin,syslib,syspunch,*,*,*,*)
dd(*,*,*,*,syslin,sysadata,sysxmlsd,sysdebug)
ddsql('')
decimal(foflonasgn nofoflonmult noforcedsign)
default(ibm)
default(aligned)
default(assignable)
default(byaddr)
default(connected)
default(desclocator)
default(descriptor)
default(dummy(unaligned))
default(e(hexadec))
default(ebcdic)
default(hexadec)
default(linkage(optlink))
default(native)
default(nativeaddr)
default(nobin1arg)
default(noevendec)
default(noinitfill)
default(noinline)
default(nonrecursive)
default(nooverlap)
default(noretcode)
default(nullstraddr)
default(nullstrptr(sysnull))
default(null370)
default(ordinal(max))
default(reorder)
default(returns(byaddr))
default(short(hexadec))
display(wto)
nodllinit
noexit
extrn(full)
flag(i)
float(afp(novolatile) nodfp)
floatinmath(asis)
gonumber
nographic
hgpr(nopreserve)
ignore(put, display)
noignore
incafter(process(''))
noinitauto
noinitbased
noinitctl
noinitstatic
nis
nointerrupt
langlvl(os saa2)
limits(extname(7) fixeddec(15,31) fixedbin(31,63) name(31))
lc(32767)
nolist
listview(afterall)
nomacro
nomap
margini(' ')
mar(2,72,1)
maxgen(1024)
maxmem(1048576)
maxmsg(e 32767)
maxnest(block(8) do(8) if(8))
maxstmt(2048)
maxtemp(4096)
nomdeck
names('#@$','#@$')
natlang(enu)
nest
not('^')
number
obj
nooffset
noonsnap
opt(3)
options(all)
or('|')
pp(macro('case(asis)'))
prectype(ans)
noproceed(s)
process(delete)
quote('"')
reduce
norent
resexp
rtcheck(nonullptr)
rules(ibm)
rules( byname)
rules(nodecsize)
rules( elseif)
rules(noevendec)
rules(nogoto(strict))
rules(nolaxbif)
rules(nolaxctl)
rules(nolaxdcl)
rules(nolaxdef)
rules(nolaxentry)
rules(nolaxif)
rules(nolaxinout)
rules(nolaxlink)
rules(nolaxmargins(xnumeric))
rules(nolaxpunc)
rules( laxqual)
rules( laxscale)
rules(nolaxsemi)
rules(nolaxstg)
rules(nolaxstrz)
rules(nomulticlose)
rules(noprocendonly)
rules( stop)
rules(nounref)
semantic
source
spill(512)
static(full)
stmt
nostorage
syntax
sysparm('')
system(mvs)
test(all,sym,separate,sepname)
notest
usage(hex(currentsize))
usage(round(ibm))
usage(substr(strict))
usage(unspec(ibm))
widechar(bigendian)
window(1950)
writable
xref(s)
//*
//PLIUSER DD *
prefix(size strz subrg)
list
test(all,sym,separate,sepname) sysparm('TEST') opt(0)
notest opt(2)
//*
//SYSIN DD *
/* Your test program goes here */
test: proc options(main) reorder;
end test;
//SYSLIB DD DSN=&INCLIB,DISP=SHR
//SYSLIN DD DSN=&&OBJECT(OBJECT),
// DISP=(,PASS),
// UNIT=SYSDA,
// SPACE=(CYL,(2,2,1)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
//SYSPUNCH DD DUMMY
//*********************************************************************
//IEWL EXEC PGM=IEWL,
// PARM=('LET,LINECT=0,LIST,XREF,AMODE=31,RMODE=ANY')
//*
//SYSLIN DD *
INCLUDE OBJECT(OBJECT)
NAME LOAD(R)
//*
//OBJECT DD DSN=&&OBJECT,DISP=(OLD,PASS)
//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
// DD DSN=SYS1.CSSLIB,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSLMOD DD DSN=&&LOAD,
// DISP=(,PASS),
// UNIT=SYSDA,
// SPACE=(CYL,(2,2,1)),
// DCB=(RECFM=U,LRECL=27988,BLKSIZE=0)
//SYSPRINT DD SYSOUT=*
//*********************************************************************
//GO EXEC PGM=LOAD
//STEPLIB DD DSN=&&LOAD,DISP=(OLD,PASS)
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CEEDUMP DD SYSOUT=*
//CEESNAP DD SYSOUT=*
//PLIDUMP DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
FWIW, the compiler options in //PLISTD are very strict, learn to live with them, it will save you much grief later!