App-sh2p
view release on metacpan or search on metacpan
lib/App/sh2p/Parser.pm view on Meta::CPAN
my %idelimiter =
( '\'' => \&App::sh2p::Handlers::Handle_delimiter,
'"' => \&App::sh2p::Handlers::Handle_delimiter,
'`' => \&App::sh2p::Handlers::Handle_delimiter,
'$(' => \&App::sh2p::Handlers::Handle_2char_qx,
'${' => \&App::sh2p::Handlers::Handle_expansion, # Problems, do specific testing?
'(' => \&App::sh2p::Handlers::Handle_delimiter,
')' => \&App::sh2p::Handlers::Handle_delimiter,
'[' => \&App::sh2p::Compound::sh_test,
'#' => \&App::sh2p::Handlers::Handle_delimiter, # 'COMMENT',
';' => \&App::sh2p::Handlers::Handle_delimiter,
'|' => \&App::sh2p::Handlers::Handle_pipe,
'[[' => \&App::sh2p::Compound::ksh_test,
'((' => \&App::sh2p::Compound::arith,
'$((' => \&App::sh2p::Compound::arith,
);
my %ibuiltins =
( ':' => \&App::sh2p::Builtins::do_colon,
'.' => \&App::sh2p::Builtins::do_source,
'alias' => 2,
'autoload' => \&App::sh2p::Builtins::do_autoload,
'bg' => 3,
'bind' => 4,
'break' => \&App::sh2p::Builtins::do_break,
'builtin' => 6,
'cd' => \&App::sh2p::Builtins::do_cd,
'command' => 8,
'continue' => \&App::sh2p::Builtins::do_continue,
'echo' => \&App::sh2p::Builtins::do_print,
'eval' => 2,
'exec' => \&App::sh2p::Builtins::do_exec,
'exit' => \&App::sh2p::Builtins::do_exit,
'export' => \&App::sh2p::Builtins::do_export,
'false' => \&App::sh2p::Builtins::do_false,
'fc' => 7,
'fg' => 8,
'functions'=> \&App::sh2p::Builtins::do_functions,
'getopts' => 9,
'integer' => \&App::sh2p::Builtins::do_integer,
'hash' => 10,
'jobs' => 11,
'kill' => \&App::sh2p::Builtins::do_kill,
'let' => \&App::sh2p::Builtins::do_let,
'print' => \&App::sh2p::Builtins::do_print,
'read' => \&App::sh2p::Builtins::do_read,
'readonly' => 7,
'return' => \&App::sh2p::Builtins::do_return,
'set' => \&App::sh2p::Builtins::do_set,
'shift' => \&App::sh2p::Builtins::do_shift,
'test' => \&App::sh2p::Compound::sh_test,
'[' => \&App::sh2p::Compound::sh_test,
'time' => 12,
'times' => 13,
'tr' => \&App::sh2p::Builtins::do_tr,
'trap' => \&App::sh2p::Trap::do_trap,
'true' => \&App::sh2p::Builtins::do_true,
'typeset' => \&App::sh2p::Builtins::do_typeset,
'ulimit' => 17,
'umask' => \&App::sh2p::Builtins::do_chmod,
'unalias' => 19,
'unset' => \&App::sh2p::Builtins::do_unset,
'wait' => 21,
'whence' => 22,
# Bash specifics
'declare' => \&App::sh2p::Builtins::do_typeset,
'local' => \&App::sh2p::Builtins::do_typeset,
'shopt' => \&App::sh2p::Builtins::do_shopt,
'source' => \&App::sh2p::Builtins::do_source,
);
my %perl_builtins =
( 'awk' => [\&App::sh2p::Builtins::advise,'Perl code, often split'],
'basename'=> [\&App::sh2p::Builtins::advise,'File::Basename::basename'],
'cat' => [\&App::sh2p::Builtins::advise,'ExtUtils::Command::cat'],
'chmod' => [\&App::sh2p::Builtins::do_chmod],
'chown' => [\&App::sh2p::Builtins::do_chown],
'chgrp' => [\&App::sh2p::Builtins::do_chown],
'cp' => [\&App::sh2p::Builtins::advise,'File::Copy'],
'cut' => [\&App::sh2p::Builtins::advise,'split'],
'date' => [\&App::sh2p::Builtins::advise,'localtime or POSIX::strftime'],
'df' => [\&App::sh2p::Builtins::advise,'Filesys::Df'],
'diff' => [\&App::sh2p::Builtins::advise,'File::Compare'],
'dirname' => [\&App::sh2p::Builtins::advise,'File::Basename::dirname'],
'egrep' => [\&App::sh2p::Builtins::advise,'while(<>){print if /re/} or perl grep'],
'eval' => [\&App::sh2p::Builtins::one4one,'eval'],
'exec' => [\&App::sh2p::Builtins::advise,'exec or pipe (co-processes) or open (file descriptors)'],
'expr' => [\&App::sh2p::Builtins::do_expr],
'find' => [\&App::sh2p::Builtins::advise,'File::Find'],
'file' => [\&App::sh2p::Builtins::advise,'File::Type'],
'ftp' => [\&App::sh2p::Builtins::advise,'Net::Ftp'],
'grep' => [\&App::sh2p::Builtins::advise,'while(<>){print if /re/} or perl grep'],
'ln' => [\&App::sh2p::Builtins::one4one,'link'],
'ln -s' => [\&App::sh2p::Builtins::one4one,'symlink'],
'ls' => [\&App::sh2p::Builtins::advise,'glob or opendir/readdir/closedir or stat/lstat'],
'mkdir' => [\&App::sh2p::Builtins::one4one,'mkdir'],
'mkpath' => [\&App::sh2p::Builtins::advise,'ExtUtils::Command::mkpath'],
'mv' => [\&App::sh2p::Builtins::one4one,'rename'],
'od' => [\&App::sh2p::Builtins::advise,'ord or printf'],
'printf' => [\&App::sh2p::Builtins::one4one,'printf'],
'pwd' => [\&App::sh2p::Builtins::advise,'Cwd::getcwd'],
'rand' => [\&App::sh2p::Builtins::one4one,'rand'],
'rm' => [\&App::sh2p::Builtins::one4one,'unlink'],
'rm -f' => [\&App::sh2p::Builtins::advise,'ExtUtils::Command::rm_rf'],
'sed' => [\&App::sh2p::Builtins::advise,'s/// (usually)'],
'select' => [\&App::sh2p::Builtins::advise,'Shell::POSIX::select'],
'sleep' => [\&App::sh2p::Builtins::one4one,'sleep'],
'sort' => [\&App::sh2p::Builtins::one4one,'sort'],
'tail' => [\&App::sh2p::Builtins::advise,'File::Tail'],
'telnet' => [\&App::sh2p::Builtins::advise,'Net::Telnet'],
'touch' => [\&App::sh2p::Builtins::do_touch],
);
###########################################################
# $ibuiltins added 0.04
sub get_perl_builtin {
my $func = shift;
if (defined $perl_builtins{$func}) {
return @{$perl_builtins{$func}};
}
elsif (defined $ibuiltins{$func}) {
return ($ibuiltins{$func}, $func);
}
else {
return ();
}
}
###########################################################
sub tokenise {
my @tokens;
my $index = 0;
my $q = 0;
my $qq = 0;
( run in 0.610 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )