# logop - | listop - @ pmop - /
# padop/svop - $ padop - # (unused) loop - {
# baseop/unop - % loopexop - } filestatop - -
-# pvop/svop - " cop - ;
+# pvop/svop - " cop - ; methop - .
+# unop_aux - +
# Other options are:
-# needs stack mark - m
-# needs constant folding - f
-# produces a scalar - s
-# produces an integer - i
-# needs a target - t
-# target can be in a pad - T
-# has a corresponding integer version - I
-# has side effects - d
-# uses $_ if no argument given - u
+# needs stack mark - m (OA_MARK)
+# needs constant folding - f (OA_FOLDCONST)
+# produces a scalar - s (OA_RETSCALAR)
+# produces an integer - i (unused)
+# needs a target - t (OA_TARGET)
+# target can be in a pad - T (OA_TARGET|OA_TARGLEX)
+# has a corresponding integer version - I (OA_OTHERINT)
+# make temp copy in list assignment - d (OA_DANGEROUS)
+# uses $_ if no argument given - u (OA_DEFGV)
# Values for the operands are:
# scalar - S list - L array - A
# hash - H sub (CV) - C file - F
# socket - Fs filetest - F- filetest_access - F-+
-# num-compare - S< dirhandle - DF
+# num-compare - S< dirhandle - DF infix bitwise - S|
# reference - R
# "?" denotes an optional operand.
gvsv scalar variable ck_null ds$
gv glob value ck_null ds$
-gelem glob elem ck_null d2 S S
+gelem glob elem ck_null ds2 S S
padsv private variable ck_null ds0
padav private array ck_null d0
padhv private hash ck_null d0
padany private value ck_null d0
-pushre push regexp ck_null d/
-
# References and stuff.
rv2gv ref-to-glob cast ck_rvconst ds1
rv2sv scalar dereference ck_rvconst ds1
av2arylen array length ck_null is1
rv2cv subroutine dereference ck_rvconst d1
-anoncode anonymous subroutine ck_anoncode $
-prototype subroutine prototype ck_null s% S
+anoncode anonymous subroutine ck_anoncode s$
+prototype subroutine prototype ck_prototype su% S?
refgen reference constructor ck_spair m1 L
srefgen single ref constructor ck_null fs1 S
ref reference-type operator ck_fun stu% S?
# Pushy I/O.
-backtick quoted execution (``, qx) ck_open tu% S?
+backtick quoted execution (``, qx) ck_backtick tu% S?
# glob defaults its first arg to $_
glob glob ck_glob t@ S?
readline <HANDLE> ck_readline t% F?
regcmaybe regexp internal guard ck_fun s1 S
regcreset regexp internal reset ck_fun s1 S
regcomp regexp compilation ck_null s| S
-match pattern match (m//) ck_match d/
+match pattern match (m//) ck_match /
qr pattern quote (qr//) ck_match s/
-subst substitution (s///) ck_match dis/ S
-substcont substitution iterator ck_null dis|
+subst substitution (s///) ck_match is/ S
+substcont substitution iterator ck_null is|
trans transliteration (tr///) ck_match is" S
# y///r
transr transliteration (tr///) ck_match is" S
# Lvalue operators.
-# sassign is special-cased for op class
-sassign scalar assignment ck_sassign s0
+sassign scalar assignment ck_sassign s2 S S
aassign list assignment ck_null t2 L L
chop chop ck_spair mts% L
chomp chomp ck_spair mTs% L
schomp scalar chomp ck_null sTu% S?
defined defined operator ck_defined isu% S?
-undef undef operator ck_lfun s% S?
+undef undef operator ck_fun s% R?
study study ck_fun su% S?
-pos match position ck_lfun stu% S?
+pos match position ck_fun stu% R?
preinc preincrement (++) ck_lfun dIs1 S
i_preinc integer preincrement (++) ck_lfun dis1 S
predec predecrement (--) ck_lfun dIs1 S
i_predec integer predecrement (--) ck_lfun dis1 S
-postinc postincrement (++) ck_lfun dIst1 S
-i_postinc integer postincrement (++) ck_lfun disT1 S
-postdec postdecrement (--) ck_lfun dIst1 S
-i_postdec integer postdecrement (--) ck_lfun disT1 S
+postinc postincrement (++) ck_lfun Ist1 S
+i_postinc integer postincrement (++) ck_lfun ist1 S
+postdec postdecrement (--) ck_lfun Ist1 S
+i_postdec integer postdecrement (--) ck_lfun ist1 S
# Ordinary operators.
i_divide integer division (/) ck_null ifsT2 S S
modulo modulus (%) ck_null IifsT2 S S
i_modulo integer modulus (%) ck_null ifsT2 S S
-repeat repeat (x) ck_repeat mt2 L S
+repeat repeat (x) ck_repeat fmt2 L S
add addition (+) ck_null IfsT2 S S
i_add integer addition (+) ck_null ifsT2 S S
subtract subtraction (-) ck_null IfsT2 S S
i_subtract integer subtraction (-) ck_null ifsT2 S S
concat concatenation (.) or string ck_concat fsT2 S S
-stringify string ck_fun fsT@ S
+multiconcat concatenation (.) or string ck_null sT+
+stringify string ck_stringify fsT@ S
left_shift left bitshift (<<) ck_bitop fsT2 S S
right_shift right bitshift (>>) ck_bitop fsT2 S S
i_le integer le (<=) ck_cmp ifs2 S S<
ge numeric ge (>=) ck_cmp Iifs2 S S<
i_ge integer ge (>=) ck_cmp ifs2 S S<
-eq numeric eq (==) ck_null Iifs2 S S<
-i_eq integer eq (==) ck_null ifs2 S S<
-ne numeric ne (!=) ck_null Iifs2 S S<
-i_ne integer ne (!=) ck_null ifs2 S S<
+eq numeric eq (==) ck_cmp Iifs2 S S<
+i_eq integer eq (==) ck_cmp ifs2 S S<
+ne numeric ne (!=) ck_cmp Iifs2 S S<
+i_ne integer ne (!=) ck_cmp ifs2 S S<
ncmp numeric comparison (<=>) ck_null Iifst2 S S<
i_ncmp integer comparison (<=>) ck_null ifst2 S S<
sne string ne ck_null ifs2 S S
scmp string comparison (cmp) ck_null ifst2 S S
-bit_and bitwise and (&) ck_bitop fst2 S S
-bit_xor bitwise xor (^) ck_bitop fst2 S S
-bit_or bitwise or (|) ck_bitop fst2 S S
+bit_and bitwise and (&) ck_bitop fst2 S S|
+bit_xor bitwise xor (^) ck_bitop fst2 S S|
+bit_or bitwise or (|) ck_bitop fst2 S S|
+nbit_and numeric bitwise and (&) ck_bitop fsT2 S S|
+nbit_xor numeric bitwise xor (^) ck_bitop fsT2 S S|
+nbit_or numeric bitwise or (|) ck_bitop fsT2 S S|
+sbit_and string bitwise and (&.) ck_bitop fst2 S S|
+sbit_xor string bitwise xor (^.) ck_bitop fst2 S S|
+sbit_or string bitwise or (|.) ck_bitop fst2 S S|
negate negation (-) ck_null Ifst1 S
-i_negate integer negation (-) ck_null ifsT1 S
+i_negate integer negation (-) ck_null ifst1 S
not not ck_null ifs1 S
complement 1's complement (~) ck_bitop fst1 S
+ncomplement numeric 1's complement (~) ck_bitop fsT1 S
+# scomplement uses ck_bitop only for the experimental warning. Once the
+# warning is gone, this can change to ck_null.
+scomplement string 1's complement (~) ck_bitop fsT1 S
-smartmatch smart match ck_smartmatch s2
+smartmatch smart match ck_null ifs2 S S
# High falutin' math.
# Arrays.
rv2av array dereference ck_rvconst dt1
-aelemfast constant array element ck_null s$ A S
+aelemfast constant array element ck_null ds$ A S
aelemfast_lex constant lexical array element ck_null d0 A S
aelem array element ck_null s2 A S
aslice array slice ck_null m@ A L
+kvaslice index/value array slice ck_null m@ A L
-aeach each on array ck_each % A
+aeach each on array ck_each d% A
+avalues values on array ck_each dt% A
akeys keys on array ck_each t% A
-avalues values on array ck_each t% A
# Hashes.
-each each ck_each % H
-values values ck_each t% H
+each each ck_each d% H
+values values ck_each dt% H
keys keys ck_each t% H
delete delete ck_delete % S
exists exists ck_exists is% S
rv2hv hash dereference ck_rvconst dt1
helem hash element ck_null s2 H S
hslice hash slice ck_null m@ H L
-boolkeys boolkeys ck_fun % H
+kvhslice key/value hash slice ck_null m@ H L
+
+# mixed array and hash access
+
+multideref array or hash lookup ck_null ds+
# Explosives and implosives.
unpack unpack ck_fun u@ S S?
-pack pack ck_fun mst@ S L
-split split ck_split t@ S S S
-join join or string ck_join mst@ S L
+pack pack ck_fun fmst@ S L
+split split ck_split t/ S S S
+join join or string ck_join fmst@ S L
# List operators.
list list ck_null m@ L
lslice list slice ck_null 2 H L L
-anonlist anonymous list ([]) ck_fun ms@ L
+anonlist anonymous array ([]) ck_fun ms@ L
anonhash anonymous hash ({}) ck_fun ms@ L
splice splice ck_fun m@ A S? S? L
pop pop ck_shift s% A?
shift shift ck_shift s% A?
unshift unshift ck_fun imsT@ A L
-sort sort ck_sort dm@ C? L
+sort sort ck_sort m@ C? L
reverse reverse ck_fun mt@ L
-grepstart grep ck_grep dm@ C L
-grepwhile grep iterator ck_null dt|
+grepstart grep ck_grep m@ C L
+grepwhile grep iterator ck_null t|
-mapstart map ck_grep dm@ C L
-mapwhile map iterator ck_null dt|
+mapstart map ck_grep m@ C L
+mapwhile map iterator ck_null t|
# Range stuff.
or logical or (||) ck_null |
xor logical xor ck_null fs2 S S
dor defined or (//) ck_null |
-cond_expr conditional expression ck_null d|
+cond_expr conditional expression ck_null |
andassign logical and assignment (&&=) ck_null s|
orassign logical or assignment (||=) ck_null s|
dorassign defined or assignment (//=) ck_null s|
-method method lookup ck_method d1
-entersub subroutine entry ck_subr dmt1 L
+entersub subroutine entry ck_subr dm1 L
leavesub subroutine exit ck_null 1
leavesublv lvalue subroutine return ck_null 1
+argcheck check subroutine arguments ck_null +
+argelem subroutine argument ck_null +
+argdefelem subroutine argument default value ck_null |
caller caller ck_fun t% S?
warn warn ck_fun imst@ L
-die die ck_die dimst@ L
+die die ck_fun imst@ L
reset symbol reset ck_fun is% S?
lineseq line sequence ck_null @
iter foreach loop iterator ck_null 0
enterloop loop entry ck_null d{
leaveloop loop exit ck_null 2
-return return ck_return dm@ L
-last last ck_null ds}
-next next ck_null ds}
-redo redo ck_null ds}
+return return ck_return m@ L
+last last ck_null s}
+next next ck_null s}
+redo redo ck_null s}
dump dump ck_null ds}
-goto goto ck_null ds}
-exit exit ck_exit ds% S?
-method_named method with known name ck_null d$
-
-entergiven given() ck_null d|
+goto goto ck_null s}
+exit exit ck_fun s% S?
+method method lookup ck_method d.
+method_named method with known name ck_null d.
+method_super super with known name ck_null d.
+method_redir redirect method with known name ck_null d.
+method_redir_super redirect super method with known name ck_null d.
+
+entergiven given() ck_null d{
leavegiven leave given block ck_null 1
enterwhen when() ck_null d|
leavewhen leave when block ck_null 1
tie tie ck_fun idms@ R S L
untie untie ck_fun is% R
-tied tied ck_fun s% R
+tied tied ck_fun ds% R
dbmopen dbmopen ck_fun is@ H S S
dbmclose dbmclose ck_fun is% H
getc getc ck_eof st% F?
read read ck_fun imst@ F R S S?
-enterwrite write ck_fun dis% F?
+enterwrite write ck_fun is% F?
leavewrite write exit ck_null 1
prtf printf ck_listiob ims@ F? L
# File calls.
# chdir really behaves as if it had both "S?" and "F?"
-chdir chdir ck_chdir isT% S?
+chdir chdir ck_trunc isT% S?
chown chown ck_fun imsT@ L
chroot chroot ck_fun isTu% S?
unlink unlink ck_fun imsTu@ L
wait wait ck_null isT0
waitpid waitpid ck_fun isT@ S S
system system ck_exec imsT@ S? L
-exec exec ck_exec dimsT@ S? L
-kill kill ck_fun dimsT@ L
+exec exec ck_exec imsT@ S? L
+kill kill ck_fun imsT@ L
getppid getppid ck_null isT0
getpgrp getpgrp ck_fun isT% S?
setpgrp setpgrp ck_fun isT@ S? S?
# Eval.
-require require ck_require du% S?
+require require ck_require dsu% S?
dofile do "file" ck_fun d1 S
hintseval eval hints ck_svconst s$
entereval eval "string" ck_eval du% S?
leaveeval eval "string" exit ck_null 1 S
-#evalonce eval constant string ck_null d1 S
entertry eval {block} ck_eval d|
leavetry eval {block} exit ck_null @
custom unknown custom operator ck_null 0
-# For smart dereference for each/keys/values
-reach each on reference ck_each % S
-rkeys keys on reference ck_each t% S
-rvalues values on reference ck_each t% S
-
# For CORE:: subs
coreargs CORE:: subroutine ck_null $
+avhvswitch Array/hash switch ck_null t1
runcv __SUB__ ck_null s0
# fc and \F
fc fc ck_fun fstu% S?
+
+padcv private subroutine ck_null d0
+introcv private subroutine ck_null d0
+clonecv private subroutine ck_null d0
+padrange list of private variables ck_null d0
+refassign lvalue ref assignment ck_refassign ds2
+lvref lvalue ref assignment ck_null d%
+lvrefslice lvalue ref assignment ck_null d@
+lvavref lvalue array reference ck_null d%
+anonconst anonymous constant ck_null ds1