use strict; use warnings; package PLXML; sub DESTROY { } sub walk { print "walk(" . join(',', @_) . ")\n"; my $self = shift; for my $key (sort keys %$self) { print "\t$key = <$$self{$key}>\n"; } foreach my $kid (@{$$self{Kids}}) { $kid->walk(@_); } } package PLXML::Characters; our @ISA = ('PLXML'); sub walk {} package PLXML::madprops; our @ISA = ('PLXML'); package PLXML::mad_op; our @ISA = ('PLXML'); package PLXML::mad_pv; our @ISA = ('PLXML'); package PLXML::baseop; our @ISA = ('PLXML'); package PLXML::baseop_unop; our @ISA = ('PLXML'); package PLXML::binop; our @ISA = ('PLXML'); package PLXML::cop; our @ISA = ('PLXML'); package PLXML::filestatop; our @ISA = ('PLXML::baseop_unop'); package PLXML::listop; our @ISA = ('PLXML'); package PLXML::logop; our @ISA = ('PLXML'); package PLXML::loop; our @ISA = ('PLXML'); package PLXML::loopexop; our @ISA = ('PLXML'); package PLXML::padop; our @ISA = ('PLXML'); package PLXML::padop_svop; our @ISA = ('PLXML'); package PLXML::pmop; our @ISA = ('PLXML'); package PLXML::pvop_svop; our @ISA = ('PLXML'); package PLXML::unop; our @ISA = ('PLXML'); # New ops always go at the end, just before 'custom' # A recapitulation of the format of this file: # The file consists of five columns: the name of the op, an English # description, the name of the "check" routine used to optimize this # operation, some flags, and a description of the operands. # The flags consist of options followed by a mandatory op class signifier # The classes are: # baseop - 0 unop - 1 binop - 2 # logop - | listop - @ pmop - / # padop/svop - $ padop - # (unused) loop - { # baseop/unop - % loopexop - } filestatop - - # pvop/svop - " cop - ; # 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 # Values for the operands are: # scalar - S list - L array - A # hash - H sub (CV) - C file - F # socket - Fs filetest - F- reference - R # "?" denotes an optional operand. # Nothing. package PLXML::op_null; our @ISA = ('PLXML::baseop'); sub key { 'null' } sub desc { 'null operation' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_stub; our @ISA = ('PLXML::baseop'); sub key { 'stub' } sub desc { 'stub' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_scalar; our @ISA = ('PLXML::baseop_unop'); sub key { 'scalar' } sub desc { 'scalar' } sub check { 'ck_fun' } sub flags { 's%' } sub args { 'S' } # Pushy stuff. package PLXML::op_pushmark; our @ISA = ('PLXML::baseop'); sub key { 'pushmark' } sub desc { 'pushmark' } sub check { 'ck_null' } sub flags { 's0' } sub args { '' } package PLXML::op_wantarray; our @ISA = ('PLXML::baseop'); sub key { 'wantarray' } sub desc { 'wantarray' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_const; our @ISA = ('PLXML::padop_svop'); sub key { 'const' } sub desc { 'constant item' } sub check { 'ck_svconst' } sub flags { 's$' } sub args { '' } package PLXML::op_gvsv; our @ISA = ('PLXML::padop_svop'); sub key { 'gvsv' } sub desc { 'scalar variable' } sub check { 'ck_null' } sub flags { 'ds$' } sub args { '' } package PLXML::op_gv; our @ISA = ('PLXML::padop_svop'); sub key { 'gv' } sub desc { 'glob value' } sub check { 'ck_null' } sub flags { 'ds$' } sub args { '' } package PLXML::op_gelem; our @ISA = ('PLXML::binop'); sub key { 'gelem' } sub desc { 'glob elem' } sub check { 'ck_null' } sub flags { 'd2' } sub args { 'S S' } package PLXML::op_padsv; our @ISA = ('PLXML::baseop'); sub key { 'padsv' } sub desc { 'private variable' } sub check { 'ck_null' } sub flags { 'ds0' } sub args { '' } package PLXML::op_padav; our @ISA = ('PLXML::baseop'); sub key { 'padav' } sub desc { 'private array' } sub check { 'ck_null' } sub flags { 'd0' } sub args { '' } package PLXML::op_padhv; our @ISA = ('PLXML::baseop'); sub key { 'padhv' } sub desc { 'private hash' } sub check { 'ck_null' } sub flags { 'd0' } sub args { '' } package PLXML::op_padany; our @ISA = ('PLXML::baseop'); sub key { 'padany' } sub desc { 'private value' } sub check { 'ck_null' } sub flags { 'd0' } sub args { '' } package PLXML::op_pushre; our @ISA = ('PLXML::pmop'); sub key { 'pushre' } sub desc { 'push regexp' } sub check { 'ck_null' } sub flags { 'd/' } sub args { '' } # References and stuff. package PLXML::op_rv2gv; our @ISA = ('PLXML::unop'); sub key { 'rv2gv' } sub desc { 'ref-to-glob cast' } sub check { 'ck_rvconst' } sub flags { 'ds1' } sub args { '' } package PLXML::op_rv2sv; our @ISA = ('PLXML::unop'); sub key { 'rv2sv' } sub desc { 'scalar dereference' } sub check { 'ck_rvconst' } sub flags { 'ds1' } sub args { '' } package PLXML::op_av2arylen; our @ISA = ('PLXML::unop'); sub key { 'av2arylen' } sub desc { 'array length' } sub check { 'ck_null' } sub flags { 'is1' } sub args { '' } package PLXML::op_rv2cv; our @ISA = ('PLXML::unop'); sub key { 'rv2cv' } sub desc { 'subroutine dereference' } sub check { 'ck_rvconst' } sub flags { 'd1' } sub args { '' } package PLXML::op_anoncode; our @ISA = ('PLXML::padop_svop'); sub key { 'anoncode' } sub desc { 'anonymous subroutine' } sub check { 'ck_anoncode' } sub flags { '$' } sub args { '' } package PLXML::op_prototype; our @ISA = ('PLXML::baseop_unop'); sub key { 'prototype' } sub desc { 'subroutine prototype' } sub check { 'ck_null' } sub flags { 's%' } sub args { 'S' } package PLXML::op_refgen; our @ISA = ('PLXML::unop'); sub key { 'refgen' } sub desc { 'reference constructor' } sub check { 'ck_spair' } sub flags { 'm1' } sub args { 'L' } package PLXML::op_srefgen; our @ISA = ('PLXML::unop'); sub key { 'srefgen' } sub desc { 'single ref constructor' } sub check { 'ck_null' } sub flags { 'fs1' } sub args { 'S' } package PLXML::op_ref; our @ISA = ('PLXML::baseop_unop'); sub key { 'ref' } sub desc { 'reference-type operator' } sub check { 'ck_fun' } sub flags { 'stu%' } sub args { 'S?' } package PLXML::op_bless; our @ISA = ('PLXML::listop'); sub key { 'bless' } sub desc { 'bless' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'S S?' } # Pushy I/O. package PLXML::op_backtick; our @ISA = ('PLXML::baseop_unop'); sub key { 'backtick' } sub desc { 'quoted execution (``, qx)' } sub check { 'ck_open' } sub flags { 't%' } sub args { '' } # glob defaults its first arg to $_ package PLXML::op_glob; our @ISA = ('PLXML::listop'); sub key { 'glob' } sub desc { 'glob' } sub check { 'ck_glob' } sub flags { 't@' } sub args { 'S?' } package PLXML::op_readline; our @ISA = ('PLXML::baseop_unop'); sub key { 'readline' } sub desc { '' } sub check { 'ck_null' } sub flags { 't%' } sub args { 'F?' } package PLXML::op_rcatline; our @ISA = ('PLXML::padop_svop'); sub key { 'rcatline' } sub desc { 'append I/O operator' } sub check { 'ck_null' } sub flags { 't$' } sub args { '' } # Bindable operators. package PLXML::op_regcmaybe; our @ISA = ('PLXML::unop'); sub key { 'regcmaybe' } sub desc { 'regexp internal guard' } sub check { 'ck_fun' } sub flags { 's1' } sub args { 'S' } package PLXML::op_regcreset; our @ISA = ('PLXML::unop'); sub key { 'regcreset' } sub desc { 'regexp internal reset' } sub check { 'ck_fun' } sub flags { 's1' } sub args { 'S' } package PLXML::op_regcomp; our @ISA = ('PLXML::logop'); sub key { 'regcomp' } sub desc { 'regexp compilation' } sub check { 'ck_null' } sub flags { 's|' } sub args { 'S' } package PLXML::op_match; our @ISA = ('PLXML::pmop'); sub key { 'match' } sub desc { 'pattern match (m//)' } sub check { 'ck_match' } sub flags { 'd/' } sub args { '' } package PLXML::op_qr; our @ISA = ('PLXML::pmop'); sub key { 'qr' } sub desc { 'pattern quote (qr//)' } sub check { 'ck_match' } sub flags { 's/' } sub args { '' } package PLXML::op_subst; our @ISA = ('PLXML::pmop'); sub key { 'subst' } sub desc { 'substitution (s///)' } sub check { 'ck_match' } sub flags { 'dis/' } sub args { 'S' } package PLXML::op_substcont; our @ISA = ('PLXML::logop'); sub key { 'substcont' } sub desc { 'substitution iterator' } sub check { 'ck_null' } sub flags { 'dis|' } sub args { '' } package PLXML::op_trans; our @ISA = ('PLXML::pvop_svop'); sub key { 'trans' } sub desc { 'transliteration (tr///)' } sub check { 'ck_match' } sub flags { 'is"' } sub args { 'S' } # Lvalue operators. # sassign is special-cased for op class package PLXML::op_sassign; our @ISA = ('PLXML::baseop'); sub key { 'sassign' } sub desc { 'scalar assignment' } sub check { 'ck_sassign' } sub flags { 's0' } sub args { '' } package PLXML::op_aassign; our @ISA = ('PLXML::binop'); sub key { 'aassign' } sub desc { 'list assignment' } sub check { 'ck_null' } sub flags { 't2' } sub args { 'L L' } package PLXML::op_chop; our @ISA = ('PLXML::baseop_unop'); sub key { 'chop' } sub desc { 'chop' } sub check { 'ck_spair' } sub flags { 'mts%' } sub args { 'L' } package PLXML::op_schop; our @ISA = ('PLXML::baseop_unop'); sub key { 'schop' } sub desc { 'scalar chop' } sub check { 'ck_null' } sub flags { 'stu%' } sub args { 'S?' } package PLXML::op_chomp; our @ISA = ('PLXML::baseop_unop'); sub key { 'chomp' } sub desc { 'chomp' } sub check { 'ck_spair' } sub flags { 'mTs%' } sub args { 'L' } package PLXML::op_schomp; our @ISA = ('PLXML::baseop_unop'); sub key { 'schomp' } sub desc { 'scalar chomp' } sub check { 'ck_null' } sub flags { 'sTu%' } sub args { 'S?' } package PLXML::op_defined; our @ISA = ('PLXML::baseop_unop'); sub key { 'defined' } sub desc { 'defined operator' } sub check { 'ck_defined' } sub flags { 'isu%' } sub args { 'S?' } package PLXML::op_undef; our @ISA = ('PLXML::baseop_unop'); sub key { 'undef' } sub desc { 'undef operator' } sub check { 'ck_lfun' } sub flags { 's%' } sub args { 'S?' } package PLXML::op_study; our @ISA = ('PLXML::baseop_unop'); sub key { 'study' } sub desc { 'study' } sub check { 'ck_fun' } sub flags { 'su%' } sub args { 'S?' } package PLXML::op_pos; our @ISA = ('PLXML::baseop_unop'); sub key { 'pos' } sub desc { 'match position' } sub check { 'ck_lfun' } sub flags { 'stu%' } sub args { 'S?' } package PLXML::op_preinc; our @ISA = ('PLXML::unop'); sub key { 'preinc' } sub desc { 'preincrement (++)' } sub check { 'ck_lfun' } sub flags { 'dIs1' } sub args { 'S' } package PLXML::op_i_preinc; our @ISA = ('PLXML::unop'); sub key { 'i_preinc' } sub desc { 'integer preincrement (++)' } sub check { 'ck_lfun' } sub flags { 'dis1' } sub args { 'S' } package PLXML::op_predec; our @ISA = ('PLXML::unop'); sub key { 'predec' } sub desc { 'predecrement (--)' } sub check { 'ck_lfun' } sub flags { 'dIs1' } sub args { 'S' } package PLXML::op_i_predec; our @ISA = ('PLXML::unop'); sub key { 'i_predec' } sub desc { 'integer predecrement (--)' } sub check { 'ck_lfun' } sub flags { 'dis1' } sub args { 'S' } package PLXML::op_postinc; our @ISA = ('PLXML::unop'); sub key { 'postinc' } sub desc { 'postincrement (++)' } sub check { 'ck_lfun' } sub flags { 'dIst1' } sub args { 'S' } package PLXML::op_i_postinc; our @ISA = ('PLXML::unop'); sub key { 'i_postinc' } sub desc { 'integer postincrement (++)' } sub check { 'ck_lfun' } sub flags { 'disT1' } sub args { 'S' } package PLXML::op_postdec; our @ISA = ('PLXML::unop'); sub key { 'postdec' } sub desc { 'postdecrement (--)' } sub check { 'ck_lfun' } sub flags { 'dIst1' } sub args { 'S' } package PLXML::op_i_postdec; our @ISA = ('PLXML::unop'); sub key { 'i_postdec' } sub desc { 'integer postdecrement (--)' } sub check { 'ck_lfun' } sub flags { 'disT1' } sub args { 'S' } # Ordinary operators. package PLXML::op_pow; our @ISA = ('PLXML::binop'); sub key { 'pow' } sub desc { 'exponentiation (**)' } sub check { 'ck_null' } sub flags { 'fsT2' } sub args { 'S S' } package PLXML::op_multiply; our @ISA = ('PLXML::binop'); sub key { 'multiply' } sub desc { 'multiplication (*)' } sub check { 'ck_null' } sub flags { 'IfsT2' } sub args { 'S S' } package PLXML::op_i_multiply; our @ISA = ('PLXML::binop'); sub key { 'i_multiply' } sub desc { 'integer multiplication (*)' } sub check { 'ck_null' } sub flags { 'ifsT2' } sub args { 'S S' } package PLXML::op_divide; our @ISA = ('PLXML::binop'); sub key { 'divide' } sub desc { 'division (/)' } sub check { 'ck_null' } sub flags { 'IfsT2' } sub args { 'S S' } package PLXML::op_i_divide; our @ISA = ('PLXML::binop'); sub key { 'i_divide' } sub desc { 'integer division (/)' } sub check { 'ck_null' } sub flags { 'ifsT2' } sub args { 'S S' } package PLXML::op_modulo; our @ISA = ('PLXML::binop'); sub key { 'modulo' } sub desc { 'modulus (%)' } sub check { 'ck_null' } sub flags { 'IifsT2' } sub args { 'S S' } package PLXML::op_i_modulo; our @ISA = ('PLXML::binop'); sub key { 'i_modulo' } sub desc { 'integer modulus (%)' } sub check { 'ck_null' } sub flags { 'ifsT2' } sub args { 'S S' } package PLXML::op_repeat; our @ISA = ('PLXML::binop'); sub key { 'repeat' } sub desc { 'repeat (x)' } sub check { 'ck_repeat' } sub flags { 'mt2' } sub args { 'L S' } package PLXML::op_add; our @ISA = ('PLXML::binop'); sub key { 'add' } sub desc { 'addition (+)' } sub check { 'ck_null' } sub flags { 'IfsT2' } sub args { 'S S' } package PLXML::op_i_add; our @ISA = ('PLXML::binop'); sub key { 'i_add' } sub desc { 'integer addition (+)' } sub check { 'ck_null' } sub flags { 'ifsT2' } sub args { 'S S' } package PLXML::op_subtract; our @ISA = ('PLXML::binop'); sub key { 'subtract' } sub desc { 'subtraction (-)' } sub check { 'ck_null' } sub flags { 'IfsT2' } sub args { 'S S' } package PLXML::op_i_subtract; our @ISA = ('PLXML::binop'); sub key { 'i_subtract' } sub desc { 'integer subtraction (-)' } sub check { 'ck_null' } sub flags { 'ifsT2' } sub args { 'S S' } package PLXML::op_concat; our @ISA = ('PLXML::binop'); sub key { 'concat' } sub desc { 'concatenation (.) or string' } sub check { 'ck_concat' } sub flags { 'fsT2' } sub args { 'S S' } package PLXML::op_stringify; our @ISA = ('PLXML::listop'); sub key { 'stringify' } sub desc { 'string' } sub check { 'ck_fun' } sub flags { 'fsT@' } sub args { 'S' } package PLXML::op_left_shift; our @ISA = ('PLXML::binop'); sub key { 'left_shift' } sub desc { 'left bitshift (<<)' } sub check { 'ck_bitop' } sub flags { 'fsT2' } sub args { 'S S' } package PLXML::op_right_shift; our @ISA = ('PLXML::binop'); sub key { 'right_shift' } sub desc { 'right bitshift (>>)' } sub check { 'ck_bitop' } sub flags { 'fsT2' } sub args { 'S S' } package PLXML::op_lt; our @ISA = ('PLXML::binop'); sub key { 'lt' } sub desc { 'numeric lt (<)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_lt; our @ISA = ('PLXML::binop'); sub key { 'i_lt' } sub desc { 'integer lt (<)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_gt; our @ISA = ('PLXML::binop'); sub key { 'gt' } sub desc { 'numeric gt (>)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_gt; our @ISA = ('PLXML::binop'); sub key { 'i_gt' } sub desc { 'integer gt (>)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_le; our @ISA = ('PLXML::binop'); sub key { 'le' } sub desc { 'numeric le (<=)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_le; our @ISA = ('PLXML::binop'); sub key { 'i_le' } sub desc { 'integer le (<=)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_ge; our @ISA = ('PLXML::binop'); sub key { 'ge' } sub desc { 'numeric ge (>=)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_ge; our @ISA = ('PLXML::binop'); sub key { 'i_ge' } sub desc { 'integer ge (>=)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_eq; our @ISA = ('PLXML::binop'); sub key { 'eq' } sub desc { 'numeric eq (==)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_eq; our @ISA = ('PLXML::binop'); sub key { 'i_eq' } sub desc { 'integer eq (==)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_ne; our @ISA = ('PLXML::binop'); sub key { 'ne' } sub desc { 'numeric ne (!=)' } sub check { 'ck_null' } sub flags { 'Iifs2' } sub args { 'S S' } package PLXML::op_i_ne; our @ISA = ('PLXML::binop'); sub key { 'i_ne' } sub desc { 'integer ne (!=)' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_ncmp; our @ISA = ('PLXML::binop'); sub key { 'ncmp' } sub desc { 'numeric comparison (<=>)' } sub check { 'ck_null' } sub flags { 'Iifst2' } sub args { 'S S' } package PLXML::op_i_ncmp; our @ISA = ('PLXML::binop'); sub key { 'i_ncmp' } sub desc { 'integer comparison (<=>)' } sub check { 'ck_null' } sub flags { 'ifst2' } sub args { 'S S' } package PLXML::op_slt; our @ISA = ('PLXML::binop'); sub key { 'slt' } sub desc { 'string lt' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_sgt; our @ISA = ('PLXML::binop'); sub key { 'sgt' } sub desc { 'string gt' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_sle; our @ISA = ('PLXML::binop'); sub key { 'sle' } sub desc { 'string le' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_sge; our @ISA = ('PLXML::binop'); sub key { 'sge' } sub desc { 'string ge' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_seq; our @ISA = ('PLXML::binop'); sub key { 'seq' } sub desc { 'string eq' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_sne; our @ISA = ('PLXML::binop'); sub key { 'sne' } sub desc { 'string ne' } sub check { 'ck_null' } sub flags { 'ifs2' } sub args { 'S S' } package PLXML::op_scmp; our @ISA = ('PLXML::binop'); sub key { 'scmp' } sub desc { 'string comparison (cmp)' } sub check { 'ck_null' } sub flags { 'ifst2' } sub args { 'S S' } package PLXML::op_bit_and; our @ISA = ('PLXML::binop'); sub key { 'bit_and' } sub desc { 'bitwise and (&)' } sub check { 'ck_bitop' } sub flags { 'fst2' } sub args { 'S S' } package PLXML::op_bit_xor; our @ISA = ('PLXML::binop'); sub key { 'bit_xor' } sub desc { 'bitwise xor (^)' } sub check { 'ck_bitop' } sub flags { 'fst2' } sub args { 'S S' } package PLXML::op_bit_or; our @ISA = ('PLXML::binop'); sub key { 'bit_or' } sub desc { 'bitwise or (|)' } sub check { 'ck_bitop' } sub flags { 'fst2' } sub args { 'S S' } package PLXML::op_negate; our @ISA = ('PLXML::unop'); sub key { 'negate' } sub desc { 'negation (-)' } sub check { 'ck_null' } sub flags { 'Ifst1' } sub args { 'S' } package PLXML::op_i_negate; our @ISA = ('PLXML::unop'); sub key { 'i_negate' } sub desc { 'integer negation (-)' } sub check { 'ck_null' } sub flags { 'ifsT1' } sub args { 'S' } package PLXML::op_not; our @ISA = ('PLXML::unop'); sub key { 'not' } sub desc { 'not' } sub check { 'ck_null' } sub flags { 'ifs1' } sub args { 'S' } package PLXML::op_complement; our @ISA = ('PLXML::unop'); sub key { 'complement' } sub desc { '1\'s complement (~)' } sub check { 'ck_bitop' } sub flags { 'fst1' } sub args { 'S' } # High falutin' math. package PLXML::op_atan2; our @ISA = ('PLXML::listop'); sub key { 'atan2' } sub desc { 'atan2' } sub check { 'ck_fun' } sub flags { 'fsT@' } sub args { 'S S' } package PLXML::op_sin; our @ISA = ('PLXML::baseop_unop'); sub key { 'sin' } sub desc { 'sin' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_cos; our @ISA = ('PLXML::baseop_unop'); sub key { 'cos' } sub desc { 'cos' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_rand; our @ISA = ('PLXML::baseop_unop'); sub key { 'rand' } sub desc { 'rand' } sub check { 'ck_fun' } sub flags { 'sT%' } sub args { 'S?' } package PLXML::op_srand; our @ISA = ('PLXML::baseop_unop'); sub key { 'srand' } sub desc { 'srand' } sub check { 'ck_fun' } sub flags { 's%' } sub args { 'S?' } package PLXML::op_exp; our @ISA = ('PLXML::baseop_unop'); sub key { 'exp' } sub desc { 'exp' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_log; our @ISA = ('PLXML::baseop_unop'); sub key { 'log' } sub desc { 'log' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_sqrt; our @ISA = ('PLXML::baseop_unop'); sub key { 'sqrt' } sub desc { 'sqrt' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } # Lowbrow math. package PLXML::op_int; our @ISA = ('PLXML::baseop_unop'); sub key { 'int' } sub desc { 'int' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_hex; our @ISA = ('PLXML::baseop_unop'); sub key { 'hex' } sub desc { 'hex' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_oct; our @ISA = ('PLXML::baseop_unop'); sub key { 'oct' } sub desc { 'oct' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_abs; our @ISA = ('PLXML::baseop_unop'); sub key { 'abs' } sub desc { 'abs' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } # String stuff. package PLXML::op_length; our @ISA = ('PLXML::baseop_unop'); sub key { 'length' } sub desc { 'length' } sub check { 'ck_lengthconst' } sub flags { 'isTu%' } sub args { 'S?' } package PLXML::op_substr; our @ISA = ('PLXML::listop'); sub key { 'substr' } sub desc { 'substr' } sub check { 'ck_substr' } sub flags { 'st@' } sub args { 'S S S? S?' } package PLXML::op_vec; our @ISA = ('PLXML::listop'); sub key { 'vec' } sub desc { 'vec' } sub check { 'ck_fun' } sub flags { 'ist@' } sub args { 'S S S' } package PLXML::op_index; our @ISA = ('PLXML::listop'); sub key { 'index' } sub desc { 'index' } sub check { 'ck_index' } sub flags { 'isT@' } sub args { 'S S S?' } package PLXML::op_rindex; our @ISA = ('PLXML::listop'); sub key { 'rindex' } sub desc { 'rindex' } sub check { 'ck_index' } sub flags { 'isT@' } sub args { 'S S S?' } package PLXML::op_sprintf; our @ISA = ('PLXML::listop'); sub key { 'sprintf' } sub desc { 'sprintf' } sub check { 'ck_fun' } sub flags { 'mfst@' } sub args { 'S L' } package PLXML::op_formline; our @ISA = ('PLXML::listop'); sub key { 'formline' } sub desc { 'formline' } sub check { 'ck_fun' } sub flags { 'ms@' } sub args { 'S L' } package PLXML::op_ord; our @ISA = ('PLXML::baseop_unop'); sub key { 'ord' } sub desc { 'ord' } sub check { 'ck_fun' } sub flags { 'ifsTu%' } sub args { 'S?' } package PLXML::op_chr; our @ISA = ('PLXML::baseop_unop'); sub key { 'chr' } sub desc { 'chr' } sub check { 'ck_fun' } sub flags { 'fsTu%' } sub args { 'S?' } package PLXML::op_crypt; our @ISA = ('PLXML::listop'); sub key { 'crypt' } sub desc { 'crypt' } sub check { 'ck_fun' } sub flags { 'fsT@' } sub args { 'S S' } package PLXML::op_ucfirst; our @ISA = ('PLXML::baseop_unop'); sub key { 'ucfirst' } sub desc { 'ucfirst' } sub check { 'ck_fun' } sub flags { 'fstu%' } sub args { 'S?' } package PLXML::op_lcfirst; our @ISA = ('PLXML::baseop_unop'); sub key { 'lcfirst' } sub desc { 'lcfirst' } sub check { 'ck_fun' } sub flags { 'fstu%' } sub args { 'S?' } package PLXML::op_uc; our @ISA = ('PLXML::baseop_unop'); sub key { 'uc' } sub desc { 'uc' } sub check { 'ck_fun' } sub flags { 'fstu%' } sub args { 'S?' } package PLXML::op_lc; our @ISA = ('PLXML::baseop_unop'); sub key { 'lc' } sub desc { 'lc' } sub check { 'ck_fun' } sub flags { 'fstu%' } sub args { 'S?' } package PLXML::op_quotemeta; our @ISA = ('PLXML::baseop_unop'); sub key { 'quotemeta' } sub desc { 'quotemeta' } sub check { 'ck_fun' } sub flags { 'fstu%' } sub args { 'S?' } # Arrays. package PLXML::op_rv2av; our @ISA = ('PLXML::unop'); sub key { 'rv2av' } sub desc { 'array dereference' } sub check { 'ck_rvconst' } sub flags { 'dt1' } sub args { '' } package PLXML::op_aelemfast; our @ISA = ('PLXML::padop_svop'); sub key { 'aelemfast' } sub desc { 'constant array element' } sub check { 'ck_null' } sub flags { 's$' } sub args { 'A S' } package PLXML::op_aelem; our @ISA = ('PLXML::binop'); sub key { 'aelem' } sub desc { 'array element' } sub check { 'ck_null' } sub flags { 's2' } sub args { 'A S' } package PLXML::op_aslice; our @ISA = ('PLXML::listop'); sub key { 'aslice' } sub desc { 'array slice' } sub check { 'ck_null' } sub flags { 'm@' } sub args { 'A L' } # Hashes. package PLXML::op_each; our @ISA = ('PLXML::baseop_unop'); sub key { 'each' } sub desc { 'each' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'H' } package PLXML::op_values; our @ISA = ('PLXML::baseop_unop'); sub key { 'values' } sub desc { 'values' } sub check { 'ck_fun' } sub flags { 't%' } sub args { 'H' } package PLXML::op_keys; our @ISA = ('PLXML::baseop_unop'); sub key { 'keys' } sub desc { 'keys' } sub check { 'ck_fun' } sub flags { 't%' } sub args { 'H' } package PLXML::op_delete; our @ISA = ('PLXML::baseop_unop'); sub key { 'delete' } sub desc { 'delete' } sub check { 'ck_delete' } sub flags { '%' } sub args { 'S' } package PLXML::op_exists; our @ISA = ('PLXML::baseop_unop'); sub key { 'exists' } sub desc { 'exists' } sub check { 'ck_exists' } sub flags { 'is%' } sub args { 'S' } package PLXML::op_rv2hv; our @ISA = ('PLXML::unop'); sub key { 'rv2hv' } sub desc { 'hash dereference' } sub check { 'ck_rvconst' } sub flags { 'dt1' } sub args { '' } package PLXML::op_helem; our @ISA = ('PLXML::listop'); sub key { 'helem' } sub desc { 'hash element' } sub check { 'ck_null' } sub flags { 's2@' } sub args { 'H S' } package PLXML::op_hslice; our @ISA = ('PLXML::listop'); sub key { 'hslice' } sub desc { 'hash slice' } sub check { 'ck_null' } sub flags { 'm@' } sub args { 'H L' } # Explosives and implosives. package PLXML::op_unpack; our @ISA = ('PLXML::listop'); sub key { 'unpack' } sub desc { 'unpack' } sub check { 'ck_unpack' } sub flags { '@' } sub args { 'S S?' } package PLXML::op_pack; our @ISA = ('PLXML::listop'); sub key { 'pack' } sub desc { 'pack' } sub check { 'ck_fun' } sub flags { 'mst@' } sub args { 'S L' } package PLXML::op_split; our @ISA = ('PLXML::listop'); sub key { 'split' } sub desc { 'split' } sub check { 'ck_split' } sub flags { 't@' } sub args { 'S S S' } package PLXML::op_join; our @ISA = ('PLXML::listop'); sub key { 'join' } sub desc { 'join or string' } sub check { 'ck_join' } sub flags { 'mst@' } sub args { 'S L' } # List operators. package PLXML::op_list; our @ISA = ('PLXML::listop'); sub key { 'list' } sub desc { 'list' } sub check { 'ck_null' } sub flags { 'm@' } sub args { 'L' } package PLXML::op_lslice; our @ISA = ('PLXML::binop'); sub key { 'lslice' } sub desc { 'list slice' } sub check { 'ck_null' } sub flags { '2' } sub args { 'H L L' } package PLXML::op_anonlist; our @ISA = ('PLXML::listop'); sub key { 'anonlist' } sub desc { 'anonymous list ([])' } sub check { 'ck_fun' } sub flags { 'ms@' } sub args { 'L' } package PLXML::op_anonhash; our @ISA = ('PLXML::listop'); sub key { 'anonhash' } sub desc { 'anonymous hash ({})' } sub check { 'ck_fun' } sub flags { 'ms@' } sub args { 'L' } package PLXML::op_splice; our @ISA = ('PLXML::listop'); sub key { 'splice' } sub desc { 'splice' } sub check { 'ck_fun' } sub flags { 'm@' } sub args { 'A S? S? L' } package PLXML::op_push; our @ISA = ('PLXML::listop'); sub key { 'push' } sub desc { 'push' } sub check { 'ck_fun' } sub flags { 'imsT@' } sub args { 'A L' } package PLXML::op_pop; our @ISA = ('PLXML::baseop_unop'); sub key { 'pop' } sub desc { 'pop' } sub check { 'ck_shift' } sub flags { 's%' } sub args { 'A?' } package PLXML::op_shift; our @ISA = ('PLXML::baseop_unop'); sub key { 'shift' } sub desc { 'shift' } sub check { 'ck_shift' } sub flags { 's%' } sub args { 'A?' } package PLXML::op_unshift; our @ISA = ('PLXML::listop'); sub key { 'unshift' } sub desc { 'unshift' } sub check { 'ck_fun' } sub flags { 'imsT@' } sub args { 'A L' } package PLXML::op_sort; our @ISA = ('PLXML::listop'); sub key { 'sort' } sub desc { 'sort' } sub check { 'ck_sort' } sub flags { 'm@' } sub args { 'C? L' } package PLXML::op_reverse; our @ISA = ('PLXML::listop'); sub key { 'reverse' } sub desc { 'reverse' } sub check { 'ck_fun' } sub flags { 'mt@' } sub args { 'L' } package PLXML::op_grepstart; our @ISA = ('PLXML::listop'); sub key { 'grepstart' } sub desc { 'grep' } sub check { 'ck_grep' } sub flags { 'dm@' } sub args { 'C L' } package PLXML::op_grepwhile; our @ISA = ('PLXML::logop'); sub key { 'grepwhile' } sub desc { 'grep iterator' } sub check { 'ck_null' } sub flags { 'dt|' } sub args { '' } package PLXML::op_mapstart; our @ISA = ('PLXML::listop'); sub key { 'mapstart' } sub desc { 'map' } sub check { 'ck_grep' } sub flags { 'dm@' } sub args { 'C L' } package PLXML::op_mapwhile; our @ISA = ('PLXML::logop'); sub key { 'mapwhile' } sub desc { 'map iterator' } sub check { 'ck_null' } sub flags { 'dt|' } sub args { '' } # Range stuff. package PLXML::op_range; our @ISA = ('PLXML::logop'); sub key { 'range' } sub desc { 'flipflop' } sub check { 'ck_null' } sub flags { '|' } sub args { 'S S' } package PLXML::op_flip; our @ISA = ('PLXML::unop'); sub key { 'flip' } sub desc { 'range (or flip)' } sub check { 'ck_null' } sub flags { '1' } sub args { 'S S' } package PLXML::op_flop; our @ISA = ('PLXML::unop'); sub key { 'flop' } sub desc { 'range (or flop)' } sub check { 'ck_null' } sub flags { '1' } sub args { '' } # Control. package PLXML::op_and; our @ISA = ('PLXML::logop'); sub key { 'and' } sub desc { 'logical and (&&)' } sub check { 'ck_null' } sub flags { '|' } sub args { '' } package PLXML::op_or; our @ISA = ('PLXML::logop'); sub key { 'or' } sub desc { 'logical or (||)' } sub check { 'ck_null' } sub flags { '|' } sub args { '' } package PLXML::op_xor; our @ISA = ('PLXML::binop'); sub key { 'xor' } sub desc { 'logical xor' } sub check { 'ck_null' } sub flags { 'fs2' } sub args { 'S S ' } package PLXML::op_cond_expr; our @ISA = ('PLXML::logop'); sub key { 'cond_expr' } sub desc { 'conditional expression' } sub check { 'ck_null' } sub flags { 'd|' } sub args { '' } package PLXML::op_andassign; our @ISA = ('PLXML::logop'); sub key { 'andassign' } sub desc { 'logical and assignment (&&=)' } sub check { 'ck_null' } sub flags { 's|' } sub args { '' } package PLXML::op_orassign; our @ISA = ('PLXML::logop'); sub key { 'orassign' } sub desc { 'logical or assignment (||=)' } sub check { 'ck_null' } sub flags { 's|' } sub args { '' } package PLXML::op_method; our @ISA = ('PLXML::unop'); sub key { 'method' } sub desc { 'method lookup' } sub check { 'ck_method' } sub flags { 'd1' } sub args { '' } package PLXML::op_entersub; our @ISA = ('PLXML::unop'); sub key { 'entersub' } sub desc { 'subroutine entry' } sub check { 'ck_subr' } sub flags { 'dmt1' } sub args { 'L' } package PLXML::op_leavesub; our @ISA = ('PLXML::unop'); sub key { 'leavesub' } sub desc { 'subroutine exit' } sub check { 'ck_null' } sub flags { '1' } sub args { '' } package PLXML::op_leavesublv; our @ISA = ('PLXML::unop'); sub key { 'leavesublv' } sub desc { 'lvalue subroutine return' } sub check { 'ck_null' } sub flags { '1' } sub args { '' } package PLXML::op_caller; our @ISA = ('PLXML::baseop_unop'); sub key { 'caller' } sub desc { 'caller' } sub check { 'ck_fun' } sub flags { 't%' } sub args { 'S?' } package PLXML::op_warn; our @ISA = ('PLXML::listop'); sub key { 'warn' } sub desc { 'warn' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'L' } package PLXML::op_die; our @ISA = ('PLXML::listop'); sub key { 'die' } sub desc { 'die' } sub check { 'ck_die' } sub flags { 'dimst@' } sub args { 'L' } package PLXML::op_reset; our @ISA = ('PLXML::baseop_unop'); sub key { 'reset' } sub desc { 'symbol reset' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'S?' } package PLXML::op_lineseq; our @ISA = ('PLXML::listop'); sub key { 'lineseq' } sub desc { 'line sequence' } sub check { 'ck_null' } sub flags { '@' } sub args { '' } package PLXML::op_nextstate; our @ISA = ('PLXML::cop'); sub key { 'nextstate' } sub desc { 'next statement' } sub check { 'ck_null' } sub flags { 's;' } sub args { '' } package PLXML::op_dbstate; our @ISA = ('PLXML::cop'); sub key { 'dbstate' } sub desc { 'debug next statement' } sub check { 'ck_null' } sub flags { 's;' } sub args { '' } package PLXML::op_unstack; our @ISA = ('PLXML::baseop'); sub key { 'unstack' } sub desc { 'iteration finalizer' } sub check { 'ck_null' } sub flags { 's0' } sub args { '' } package PLXML::op_enter; our @ISA = ('PLXML::baseop'); sub key { 'enter' } sub desc { 'block entry' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_leave; our @ISA = ('PLXML::listop'); sub key { 'leave' } sub desc { 'block exit' } sub check { 'ck_null' } sub flags { '@' } sub args { '' } package PLXML::op_scope; our @ISA = ('PLXML::listop'); sub key { 'scope' } sub desc { 'block' } sub check { 'ck_null' } sub flags { '@' } sub args { '' } package PLXML::op_enteriter; our @ISA = ('PLXML::loop'); sub key { 'enteriter' } sub desc { 'foreach loop entry' } sub check { 'ck_null' } sub flags { 'd{' } sub args { '' } package PLXML::op_iter; our @ISA = ('PLXML::baseop'); sub key { 'iter' } sub desc { 'foreach loop iterator' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_enterloop; our @ISA = ('PLXML::loop'); sub key { 'enterloop' } sub desc { 'loop entry' } sub check { 'ck_null' } sub flags { 'd{' } sub args { '' } package PLXML::op_leaveloop; our @ISA = ('PLXML::binop'); sub key { 'leaveloop' } sub desc { 'loop exit' } sub check { 'ck_null' } sub flags { '2' } sub args { '' } package PLXML::op_return; our @ISA = ('PLXML::listop'); sub key { 'return' } sub desc { 'return' } sub check { 'ck_return' } sub flags { 'dm@' } sub args { 'L' } package PLXML::op_last; our @ISA = ('PLXML::loopexop'); sub key { 'last' } sub desc { 'last' } sub check { 'ck_null' } sub flags { 'ds}' } sub args { '' } package PLXML::op_next; our @ISA = ('PLXML::loopexop'); sub key { 'next' } sub desc { 'next' } sub check { 'ck_null' } sub flags { 'ds}' } sub args { '' } package PLXML::op_redo; our @ISA = ('PLXML::loopexop'); sub key { 'redo' } sub desc { 'redo' } sub check { 'ck_null' } sub flags { 'ds}' } sub args { '' } package PLXML::op_dump; our @ISA = ('PLXML::loopexop'); sub key { 'dump' } sub desc { 'dump' } sub check { 'ck_null' } sub flags { 'ds}' } sub args { '' } package PLXML::op_goto; our @ISA = ('PLXML::loopexop'); sub key { 'goto' } sub desc { 'goto' } sub check { 'ck_null' } sub flags { 'ds}' } sub args { '' } package PLXML::op_exit; our @ISA = ('PLXML::baseop_unop'); sub key { 'exit' } sub desc { 'exit' } sub check { 'ck_exit' } sub flags { 'ds%' } sub args { 'S?' } # continued below #nswitch numeric switch ck_null d #cswitch character switch ck_null d # I/O. package PLXML::op_open; our @ISA = ('PLXML::listop'); sub key { 'open' } sub desc { 'open' } sub check { 'ck_open' } sub flags { 'ismt@' } sub args { 'F S? L' } package PLXML::op_close; our @ISA = ('PLXML::baseop_unop'); sub key { 'close' } sub desc { 'close' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'F?' } package PLXML::op_pipe_op; our @ISA = ('PLXML::listop'); sub key { 'pipe_op' } sub desc { 'pipe' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'F F' } package PLXML::op_fileno; our @ISA = ('PLXML::baseop_unop'); sub key { 'fileno' } sub desc { 'fileno' } sub check { 'ck_fun' } sub flags { 'ist%' } sub args { 'F' } package PLXML::op_umask; our @ISA = ('PLXML::baseop_unop'); sub key { 'umask' } sub desc { 'umask' } sub check { 'ck_fun' } sub flags { 'ist%' } sub args { 'S?' } package PLXML::op_binmode; our @ISA = ('PLXML::listop'); sub key { 'binmode' } sub desc { 'binmode' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'F S?' } package PLXML::op_tie; our @ISA = ('PLXML::listop'); sub key { 'tie' } sub desc { 'tie' } sub check { 'ck_fun' } sub flags { 'idms@' } sub args { 'R S L' } package PLXML::op_untie; our @ISA = ('PLXML::baseop_unop'); sub key { 'untie' } sub desc { 'untie' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'R' } package PLXML::op_tied; our @ISA = ('PLXML::baseop_unop'); sub key { 'tied' } sub desc { 'tied' } sub check { 'ck_fun' } sub flags { 's%' } sub args { 'R' } package PLXML::op_dbmopen; our @ISA = ('PLXML::listop'); sub key { 'dbmopen' } sub desc { 'dbmopen' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'H S S' } package PLXML::op_dbmclose; our @ISA = ('PLXML::baseop_unop'); sub key { 'dbmclose' } sub desc { 'dbmclose' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'H' } package PLXML::op_sselect; our @ISA = ('PLXML::listop'); sub key { 'sselect' } sub desc { 'select system call' } sub check { 'ck_select' } sub flags { 't@' } sub args { 'S S S S' } package PLXML::op_select; our @ISA = ('PLXML::listop'); sub key { 'select' } sub desc { 'select' } sub check { 'ck_select' } sub flags { 'st@' } sub args { 'F?' } package PLXML::op_getc; our @ISA = ('PLXML::baseop_unop'); sub key { 'getc' } sub desc { 'getc' } sub check { 'ck_eof' } sub flags { 'st%' } sub args { 'F?' } package PLXML::op_read; our @ISA = ('PLXML::listop'); sub key { 'read' } sub desc { 'read' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'F R S S?' } package PLXML::op_enterwrite; our @ISA = ('PLXML::baseop_unop'); sub key { 'enterwrite' } sub desc { 'write' } sub check { 'ck_fun' } sub flags { 'dis%' } sub args { 'F?' } package PLXML::op_leavewrite; our @ISA = ('PLXML::unop'); sub key { 'leavewrite' } sub desc { 'write exit' } sub check { 'ck_null' } sub flags { '1' } sub args { '' } package PLXML::op_prtf; our @ISA = ('PLXML::listop'); sub key { 'prtf' } sub desc { 'printf' } sub check { 'ck_listiob' } sub flags { 'ims@' } sub args { 'F? L' } package PLXML::op_print; our @ISA = ('PLXML::listop'); sub key { 'print' } sub desc { 'print' } sub check { 'ck_listiob' } sub flags { 'ims@' } sub args { 'F? L' } package PLXML::op_say; our @ISA = ('PLXML::listop'); sub key { 'say' } sub desc { 'say' } sub check { 'ck_listiob' } sub flags { 'ims@' } sub args { 'F? L' } package PLXML::op_sysopen; our @ISA = ('PLXML::listop'); sub key { 'sysopen' } sub desc { 'sysopen' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'F S S S?' } package PLXML::op_sysseek; our @ISA = ('PLXML::listop'); sub key { 'sysseek' } sub desc { 'sysseek' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'F S S' } package PLXML::op_sysread; our @ISA = ('PLXML::listop'); sub key { 'sysread' } sub desc { 'sysread' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'F R S S?' } package PLXML::op_syswrite; our @ISA = ('PLXML::listop'); sub key { 'syswrite' } sub desc { 'syswrite' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'F S S? S?' } package PLXML::op_send; our @ISA = ('PLXML::listop'); sub key { 'send' } sub desc { 'send' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'Fs S S S?' } package PLXML::op_recv; our @ISA = ('PLXML::listop'); sub key { 'recv' } sub desc { 'recv' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'Fs R S S' } package PLXML::op_eof; our @ISA = ('PLXML::baseop_unop'); sub key { 'eof' } sub desc { 'eof' } sub check { 'ck_eof' } sub flags { 'is%' } sub args { 'F?' } package PLXML::op_tell; our @ISA = ('PLXML::baseop_unop'); sub key { 'tell' } sub desc { 'tell' } sub check { 'ck_fun' } sub flags { 'st%' } sub args { 'F?' } package PLXML::op_seek; our @ISA = ('PLXML::listop'); sub key { 'seek' } sub desc { 'seek' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'F S S' } # truncate really behaves as if it had both "S S" and "F S" package PLXML::op_truncate; our @ISA = ('PLXML::listop'); sub key { 'truncate' } sub desc { 'truncate' } sub check { 'ck_trunc' } sub flags { 'is@' } sub args { 'S S' } package PLXML::op_fcntl; our @ISA = ('PLXML::listop'); sub key { 'fcntl' } sub desc { 'fcntl' } sub check { 'ck_fun' } sub flags { 'st@' } sub args { 'F S S' } package PLXML::op_ioctl; our @ISA = ('PLXML::listop'); sub key { 'ioctl' } sub desc { 'ioctl' } sub check { 'ck_fun' } sub flags { 'st@' } sub args { 'F S S' } package PLXML::op_flock; our @ISA = ('PLXML::listop'); sub key { 'flock' } sub desc { 'flock' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'F S' } # Sockets. package PLXML::op_socket; our @ISA = ('PLXML::listop'); sub key { 'socket' } sub desc { 'socket' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S S S' } package PLXML::op_sockpair; our @ISA = ('PLXML::listop'); sub key { 'sockpair' } sub desc { 'socketpair' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs Fs S S S' } package PLXML::op_bind; our @ISA = ('PLXML::listop'); sub key { 'bind' } sub desc { 'bind' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S' } package PLXML::op_connect; our @ISA = ('PLXML::listop'); sub key { 'connect' } sub desc { 'connect' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S' } package PLXML::op_listen; our @ISA = ('PLXML::listop'); sub key { 'listen' } sub desc { 'listen' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S' } package PLXML::op_accept; our @ISA = ('PLXML::listop'); sub key { 'accept' } sub desc { 'accept' } sub check { 'ck_fun' } sub flags { 'ist@' } sub args { 'Fs Fs' } package PLXML::op_shutdown; our @ISA = ('PLXML::listop'); sub key { 'shutdown' } sub desc { 'shutdown' } sub check { 'ck_fun' } sub flags { 'ist@' } sub args { 'Fs S' } package PLXML::op_gsockopt; our @ISA = ('PLXML::listop'); sub key { 'gsockopt' } sub desc { 'getsockopt' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S S' } package PLXML::op_ssockopt; our @ISA = ('PLXML::listop'); sub key { 'ssockopt' } sub desc { 'setsockopt' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'Fs S S S' } package PLXML::op_getsockname; our @ISA = ('PLXML::baseop_unop'); sub key { 'getsockname' } sub desc { 'getsockname' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'Fs' } package PLXML::op_getpeername; our @ISA = ('PLXML::baseop_unop'); sub key { 'getpeername' } sub desc { 'getpeername' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'Fs' } # Stat calls. package PLXML::op_lstat; our @ISA = ('PLXML::filestatop'); sub key { 'lstat' } sub desc { 'lstat' } sub check { 'ck_ftst' } sub flags { 'u-' } sub args { 'F' } package PLXML::op_stat; our @ISA = ('PLXML::filestatop'); sub key { 'stat' } sub desc { 'stat' } sub check { 'ck_ftst' } sub flags { 'u-' } sub args { 'F' } package PLXML::op_ftrread; our @ISA = ('PLXML::filestatop'); sub key { 'ftrread' } sub desc { '-R' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftrwrite; our @ISA = ('PLXML::filestatop'); sub key { 'ftrwrite' } sub desc { '-W' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftrexec; our @ISA = ('PLXML::filestatop'); sub key { 'ftrexec' } sub desc { '-X' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_fteread; our @ISA = ('PLXML::filestatop'); sub key { 'fteread' } sub desc { '-r' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftewrite; our @ISA = ('PLXML::filestatop'); sub key { 'ftewrite' } sub desc { '-w' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_fteexec; our @ISA = ('PLXML::filestatop'); sub key { 'fteexec' } sub desc { '-x' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftis; our @ISA = ('PLXML::filestatop'); sub key { 'ftis' } sub desc { '-e' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_fteowned; our @ISA = ('PLXML::filestatop'); sub key { 'fteowned' } sub desc { '-O' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftrowned; our @ISA = ('PLXML::filestatop'); sub key { 'ftrowned' } sub desc { '-o' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftzero; our @ISA = ('PLXML::filestatop'); sub key { 'ftzero' } sub desc { '-z' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftsize; our @ISA = ('PLXML::filestatop'); sub key { 'ftsize' } sub desc { '-s' } sub check { 'ck_ftst' } sub flags { 'istu-' } sub args { 'F-' } package PLXML::op_ftmtime; our @ISA = ('PLXML::filestatop'); sub key { 'ftmtime' } sub desc { '-M' } sub check { 'ck_ftst' } sub flags { 'stu-' } sub args { 'F-' } package PLXML::op_ftatime; our @ISA = ('PLXML::filestatop'); sub key { 'ftatime' } sub desc { '-A' } sub check { 'ck_ftst' } sub flags { 'stu-' } sub args { 'F-' } package PLXML::op_ftctime; our @ISA = ('PLXML::filestatop'); sub key { 'ftctime' } sub desc { '-C' } sub check { 'ck_ftst' } sub flags { 'stu-' } sub args { 'F-' } package PLXML::op_ftsock; our @ISA = ('PLXML::filestatop'); sub key { 'ftsock' } sub desc { '-S' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftchr; our @ISA = ('PLXML::filestatop'); sub key { 'ftchr' } sub desc { '-c' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftblk; our @ISA = ('PLXML::filestatop'); sub key { 'ftblk' } sub desc { '-b' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftfile; our @ISA = ('PLXML::filestatop'); sub key { 'ftfile' } sub desc { '-f' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftdir; our @ISA = ('PLXML::filestatop'); sub key { 'ftdir' } sub desc { '-d' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftpipe; our @ISA = ('PLXML::filestatop'); sub key { 'ftpipe' } sub desc { '-p' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftlink; our @ISA = ('PLXML::filestatop'); sub key { 'ftlink' } sub desc { '-l' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftsuid; our @ISA = ('PLXML::filestatop'); sub key { 'ftsuid' } sub desc { '-u' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftsgid; our @ISA = ('PLXML::filestatop'); sub key { 'ftsgid' } sub desc { '-g' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftsvtx; our @ISA = ('PLXML::filestatop'); sub key { 'ftsvtx' } sub desc { '-k' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_fttty; our @ISA = ('PLXML::filestatop'); sub key { 'fttty' } sub desc { '-t' } sub check { 'ck_ftst' } sub flags { 'is-' } sub args { 'F-' } package PLXML::op_fttext; our @ISA = ('PLXML::filestatop'); sub key { 'fttext' } sub desc { '-T' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } package PLXML::op_ftbinary; our @ISA = ('PLXML::filestatop'); sub key { 'ftbinary' } sub desc { '-B' } sub check { 'ck_ftst' } sub flags { 'isu-' } sub args { 'F-' } # File calls. package PLXML::op_chdir; our @ISA = ('PLXML::baseop_unop'); sub key { 'chdir' } sub desc { 'chdir' } sub check { 'ck_fun' } sub flags { 'isT%' } sub args { 'S?' } package PLXML::op_chown; our @ISA = ('PLXML::listop'); sub key { 'chown' } sub desc { 'chown' } sub check { 'ck_fun' } sub flags { 'imsT@' } sub args { 'L' } package PLXML::op_chroot; our @ISA = ('PLXML::baseop_unop'); sub key { 'chroot' } sub desc { 'chroot' } sub check { 'ck_fun' } sub flags { 'isTu%' } sub args { 'S?' } package PLXML::op_unlink; our @ISA = ('PLXML::listop'); sub key { 'unlink' } sub desc { 'unlink' } sub check { 'ck_fun' } sub flags { 'imsTu@' } sub args { 'L' } package PLXML::op_chmod; our @ISA = ('PLXML::listop'); sub key { 'chmod' } sub desc { 'chmod' } sub check { 'ck_fun' } sub flags { 'imsT@' } sub args { 'L' } package PLXML::op_utime; our @ISA = ('PLXML::listop'); sub key { 'utime' } sub desc { 'utime' } sub check { 'ck_fun' } sub flags { 'imsT@' } sub args { 'L' } package PLXML::op_rename; our @ISA = ('PLXML::listop'); sub key { 'rename' } sub desc { 'rename' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S' } package PLXML::op_link; our @ISA = ('PLXML::listop'); sub key { 'link' } sub desc { 'link' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S' } package PLXML::op_symlink; our @ISA = ('PLXML::listop'); sub key { 'symlink' } sub desc { 'symlink' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S' } package PLXML::op_readlink; our @ISA = ('PLXML::baseop_unop'); sub key { 'readlink' } sub desc { 'readlink' } sub check { 'ck_fun' } sub flags { 'stu%' } sub args { 'S?' } package PLXML::op_mkdir; our @ISA = ('PLXML::listop'); sub key { 'mkdir' } sub desc { 'mkdir' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S?' } package PLXML::op_rmdir; our @ISA = ('PLXML::baseop_unop'); sub key { 'rmdir' } sub desc { 'rmdir' } sub check { 'ck_fun' } sub flags { 'isTu%' } sub args { 'S?' } # Directory calls. package PLXML::op_open_dir; our @ISA = ('PLXML::listop'); sub key { 'open_dir' } sub desc { 'opendir' } sub check { 'ck_fun' } sub flags { 'is@' } sub args { 'F S' } package PLXML::op_readdir; our @ISA = ('PLXML::baseop_unop'); sub key { 'readdir' } sub desc { 'readdir' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'F' } package PLXML::op_telldir; our @ISA = ('PLXML::baseop_unop'); sub key { 'telldir' } sub desc { 'telldir' } sub check { 'ck_fun' } sub flags { 'st%' } sub args { 'F' } package PLXML::op_seekdir; our @ISA = ('PLXML::listop'); sub key { 'seekdir' } sub desc { 'seekdir' } sub check { 'ck_fun' } sub flags { 's@' } sub args { 'F S' } package PLXML::op_rewinddir; our @ISA = ('PLXML::baseop_unop'); sub key { 'rewinddir' } sub desc { 'rewinddir' } sub check { 'ck_fun' } sub flags { 's%' } sub args { 'F' } package PLXML::op_closedir; our @ISA = ('PLXML::baseop_unop'); sub key { 'closedir' } sub desc { 'closedir' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'F' } # Process control. package PLXML::op_fork; our @ISA = ('PLXML::baseop'); sub key { 'fork' } sub desc { 'fork' } sub check { 'ck_null' } sub flags { 'ist0' } sub args { '' } package PLXML::op_wait; our @ISA = ('PLXML::baseop'); sub key { 'wait' } sub desc { 'wait' } sub check { 'ck_null' } sub flags { 'isT0' } sub args { '' } package PLXML::op_waitpid; our @ISA = ('PLXML::listop'); sub key { 'waitpid' } sub desc { 'waitpid' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S' } package PLXML::op_system; our @ISA = ('PLXML::listop'); sub key { 'system' } sub desc { 'system' } sub check { 'ck_exec' } sub flags { 'imsT@' } sub args { 'S? L' } package PLXML::op_exec; our @ISA = ('PLXML::listop'); sub key { 'exec' } sub desc { 'exec' } sub check { 'ck_exec' } sub flags { 'dimsT@' } sub args { 'S? L' } package PLXML::op_kill; our @ISA = ('PLXML::listop'); sub key { 'kill' } sub desc { 'kill' } sub check { 'ck_fun' } sub flags { 'dimsT@' } sub args { 'L' } package PLXML::op_getppid; our @ISA = ('PLXML::baseop'); sub key { 'getppid' } sub desc { 'getppid' } sub check { 'ck_null' } sub flags { 'isT0' } sub args { '' } package PLXML::op_getpgrp; our @ISA = ('PLXML::baseop_unop'); sub key { 'getpgrp' } sub desc { 'getpgrp' } sub check { 'ck_fun' } sub flags { 'isT%' } sub args { 'S?' } package PLXML::op_setpgrp; our @ISA = ('PLXML::listop'); sub key { 'setpgrp' } sub desc { 'setpgrp' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S? S?' } package PLXML::op_getpriority; our @ISA = ('PLXML::listop'); sub key { 'getpriority' } sub desc { 'getpriority' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S' } package PLXML::op_setpriority; our @ISA = ('PLXML::listop'); sub key { 'setpriority' } sub desc { 'setpriority' } sub check { 'ck_fun' } sub flags { 'isT@' } sub args { 'S S S' } # Time calls. package PLXML::op_time; our @ISA = ('PLXML::baseop'); sub key { 'time' } sub desc { 'time' } sub check { 'ck_null' } sub flags { 'isT0' } sub args { '' } package PLXML::op_tms; our @ISA = ('PLXML::baseop'); sub key { 'tms' } sub desc { 'times' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_localtime; our @ISA = ('PLXML::baseop_unop'); sub key { 'localtime' } sub desc { 'localtime' } sub check { 'ck_fun' } sub flags { 't%' } sub args { 'S?' } package PLXML::op_gmtime; our @ISA = ('PLXML::baseop_unop'); sub key { 'gmtime' } sub desc { 'gmtime' } sub check { 'ck_fun' } sub flags { 't%' } sub args { 'S?' } package PLXML::op_alarm; our @ISA = ('PLXML::baseop_unop'); sub key { 'alarm' } sub desc { 'alarm' } sub check { 'ck_fun' } sub flags { 'istu%' } sub args { 'S?' } package PLXML::op_sleep; our @ISA = ('PLXML::baseop_unop'); sub key { 'sleep' } sub desc { 'sleep' } sub check { 'ck_fun' } sub flags { 'isT%' } sub args { 'S?' } # Shared memory. package PLXML::op_shmget; our @ISA = ('PLXML::listop'); sub key { 'shmget' } sub desc { 'shmget' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S' } package PLXML::op_shmctl; our @ISA = ('PLXML::listop'); sub key { 'shmctl' } sub desc { 'shmctl' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S' } package PLXML::op_shmread; our @ISA = ('PLXML::listop'); sub key { 'shmread' } sub desc { 'shmread' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S S' } package PLXML::op_shmwrite; our @ISA = ('PLXML::listop'); sub key { 'shmwrite' } sub desc { 'shmwrite' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S S' } # Message passing. package PLXML::op_msgget; our @ISA = ('PLXML::listop'); sub key { 'msgget' } sub desc { 'msgget' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S' } package PLXML::op_msgctl; our @ISA = ('PLXML::listop'); sub key { 'msgctl' } sub desc { 'msgctl' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S' } package PLXML::op_msgsnd; our @ISA = ('PLXML::listop'); sub key { 'msgsnd' } sub desc { 'msgsnd' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S' } package PLXML::op_msgrcv; our @ISA = ('PLXML::listop'); sub key { 'msgrcv' } sub desc { 'msgrcv' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S S S' } # Semaphores. package PLXML::op_semget; our @ISA = ('PLXML::listop'); sub key { 'semget' } sub desc { 'semget' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S' } package PLXML::op_semctl; our @ISA = ('PLXML::listop'); sub key { 'semctl' } sub desc { 'semctl' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S S S' } package PLXML::op_semop; our @ISA = ('PLXML::listop'); sub key { 'semop' } sub desc { 'semop' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S S' } # Eval. package PLXML::op_require; our @ISA = ('PLXML::baseop_unop'); sub key { 'require' } sub desc { 'require' } sub check { 'ck_require' } sub flags { 'du%' } sub args { 'S?' } package PLXML::op_dofile; our @ISA = ('PLXML::unop'); sub key { 'dofile' } sub desc { 'do "file"' } sub check { 'ck_fun' } sub flags { 'd1' } sub args { 'S' } package PLXML::op_entereval; our @ISA = ('PLXML::baseop_unop'); sub key { 'entereval' } sub desc { 'eval "string"' } sub check { 'ck_eval' } sub flags { 'd%' } sub args { 'S' } package PLXML::op_leaveeval; our @ISA = ('PLXML::unop'); sub key { 'leaveeval' } sub desc { 'eval "string" exit' } sub check { 'ck_null' } sub flags { '1' } sub args { 'S' } #evalonce eval constant string ck_null d1 S package PLXML::op_entertry; our @ISA = ('PLXML::logop'); sub key { 'entertry' } sub desc { 'eval {block}' } sub check { 'ck_null' } sub flags { '|' } sub args { '' } package PLXML::op_leavetry; our @ISA = ('PLXML::listop'); sub key { 'leavetry' } sub desc { 'eval {block} exit' } sub check { 'ck_null' } sub flags { '@' } sub args { '' } # Get system info. package PLXML::op_ghbyname; our @ISA = ('PLXML::baseop_unop'); sub key { 'ghbyname' } sub desc { 'gethostbyname' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_ghbyaddr; our @ISA = ('PLXML::listop'); sub key { 'ghbyaddr' } sub desc { 'gethostbyaddr' } sub check { 'ck_fun' } sub flags { '@' } sub args { 'S S' } package PLXML::op_ghostent; our @ISA = ('PLXML::baseop'); sub key { 'ghostent' } sub desc { 'gethostent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_gnbyname; our @ISA = ('PLXML::baseop_unop'); sub key { 'gnbyname' } sub desc { 'getnetbyname' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_gnbyaddr; our @ISA = ('PLXML::listop'); sub key { 'gnbyaddr' } sub desc { 'getnetbyaddr' } sub check { 'ck_fun' } sub flags { '@' } sub args { 'S S' } package PLXML::op_gnetent; our @ISA = ('PLXML::baseop'); sub key { 'gnetent' } sub desc { 'getnetent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_gpbyname; our @ISA = ('PLXML::baseop_unop'); sub key { 'gpbyname' } sub desc { 'getprotobyname' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_gpbynumber; our @ISA = ('PLXML::listop'); sub key { 'gpbynumber' } sub desc { 'getprotobynumber' } sub check { 'ck_fun' } sub flags { '@' } sub args { 'S' } package PLXML::op_gprotoent; our @ISA = ('PLXML::baseop'); sub key { 'gprotoent' } sub desc { 'getprotoent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_gsbyname; our @ISA = ('PLXML::listop'); sub key { 'gsbyname' } sub desc { 'getservbyname' } sub check { 'ck_fun' } sub flags { '@' } sub args { 'S S' } package PLXML::op_gsbyport; our @ISA = ('PLXML::listop'); sub key { 'gsbyport' } sub desc { 'getservbyport' } sub check { 'ck_fun' } sub flags { '@' } sub args { 'S S' } package PLXML::op_gservent; our @ISA = ('PLXML::baseop'); sub key { 'gservent' } sub desc { 'getservent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_shostent; our @ISA = ('PLXML::baseop_unop'); sub key { 'shostent' } sub desc { 'sethostent' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'S' } package PLXML::op_snetent; our @ISA = ('PLXML::baseop_unop'); sub key { 'snetent' } sub desc { 'setnetent' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'S' } package PLXML::op_sprotoent; our @ISA = ('PLXML::baseop_unop'); sub key { 'sprotoent' } sub desc { 'setprotoent' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'S' } package PLXML::op_sservent; our @ISA = ('PLXML::baseop_unop'); sub key { 'sservent' } sub desc { 'setservent' } sub check { 'ck_fun' } sub flags { 'is%' } sub args { 'S' } package PLXML::op_ehostent; our @ISA = ('PLXML::baseop'); sub key { 'ehostent' } sub desc { 'endhostent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_enetent; our @ISA = ('PLXML::baseop'); sub key { 'enetent' } sub desc { 'endnetent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_eprotoent; our @ISA = ('PLXML::baseop'); sub key { 'eprotoent' } sub desc { 'endprotoent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_eservent; our @ISA = ('PLXML::baseop'); sub key { 'eservent' } sub desc { 'endservent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_gpwnam; our @ISA = ('PLXML::baseop_unop'); sub key { 'gpwnam' } sub desc { 'getpwnam' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_gpwuid; our @ISA = ('PLXML::baseop_unop'); sub key { 'gpwuid' } sub desc { 'getpwuid' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_gpwent; our @ISA = ('PLXML::baseop'); sub key { 'gpwent' } sub desc { 'getpwent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_spwent; our @ISA = ('PLXML::baseop'); sub key { 'spwent' } sub desc { 'setpwent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_epwent; our @ISA = ('PLXML::baseop'); sub key { 'epwent' } sub desc { 'endpwent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_ggrnam; our @ISA = ('PLXML::baseop_unop'); sub key { 'ggrnam' } sub desc { 'getgrnam' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_ggrgid; our @ISA = ('PLXML::baseop_unop'); sub key { 'ggrgid' } sub desc { 'getgrgid' } sub check { 'ck_fun' } sub flags { '%' } sub args { 'S' } package PLXML::op_ggrent; our @ISA = ('PLXML::baseop'); sub key { 'ggrent' } sub desc { 'getgrent' } sub check { 'ck_null' } sub flags { '0' } sub args { '' } package PLXML::op_sgrent; our @ISA = ('PLXML::baseop'); sub key { 'sgrent' } sub desc { 'setgrent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_egrent; our @ISA = ('PLXML::baseop'); sub key { 'egrent' } sub desc { 'endgrent' } sub check { 'ck_null' } sub flags { 'is0' } sub args { '' } package PLXML::op_getlogin; our @ISA = ('PLXML::baseop'); sub key { 'getlogin' } sub desc { 'getlogin' } sub check { 'ck_null' } sub flags { 'st0' } sub args { '' } # Miscellaneous. package PLXML::op_syscall; our @ISA = ('PLXML::listop'); sub key { 'syscall' } sub desc { 'syscall' } sub check { 'ck_fun' } sub flags { 'imst@' } sub args { 'S L' } # For multi-threading package PLXML::op_lock; our @ISA = ('PLXML::baseop_unop'); sub key { 'lock' } sub desc { 'lock' } sub check { 'ck_rfun' } sub flags { 's%' } sub args { 'R' } package PLXML::op_threadsv; our @ISA = ('PLXML::baseop'); sub key { 'threadsv' } sub desc { 'per-thread value' } sub check { 'ck_null' } sub flags { 'ds0' } sub args { '' } # Control (contd.) package PLXML::op_setstate; our @ISA = ('PLXML::cop'); sub key { 'setstate' } sub desc { 'set statement info' } sub check { 'ck_null' } sub flags { 's;' } sub args { '' } package PLXML::op_method_named; our @ISA = ('PLXML::padop_svop'); sub key { 'method_named' } sub desc { 'method with known name' } sub check { 'ck_null' } sub flags { 'd$' } sub args { '' } package PLXML::op_dor; our @ISA = ('PLXML::logop'); sub key { 'dor' } sub desc { 'defined or (//)' } sub check { 'ck_null' } sub flags { '|' } sub args { '' } package PLXML::op_dorassign; our @ISA = ('PLXML::logop'); sub key { 'dorassign' } sub desc { 'defined or assignment (//=)' } sub check { 'ck_null' } sub flags { 's|' } sub args { '' } # Add new ops before this, the custom operator. package PLXML::op_custom; our @ISA = ('PLXML::baseop'); sub key { 'custom' } sub desc { 'unknown custom operator' } sub check { 'ck_null' } sub flags { '0' } sub args { '' }