.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
.\" ========================================================================
.de Sh \" Subsection heading
.de Sp \" Vertical space (when we can't use .PP)
.de Vb \" Begin verbatim text
.de Ve \" End verbatim text
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
. tm Index:\\$1\t\\n%\t"\\$2"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. \" simple accents for nroff and troff
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
.\" ========================================================================
.TH PSHDEVEL 1 "2003-01-02" "perl v5.8.0" "User Contributed Perl Documentation"
psh \- Developing for Perl Shell
Developing for the Perl Shell.
.IX Subsection "DEBUGGING"
The \fB\-d\fR option puts \fBpsh\fR into \*(L"debugging\*(R" mode, which prints
diagnostic output. Note that you can also enter/leave this
debugging mode in a running \fBpsh\fR via the \f(CW$Psh::debugging\fR variable.
Possible values for \fB\-d\fR/\f(CW$Psh::debugging\fR are either 0 to disable
it, 1 to enable all debug messages or a string of characters where
each character denotes a certain class of debug messages.
.ie n .IP """s"" \- enables printing of information about the chosen strategy for each command" 4
.el .IP "\f(CWs\fR \- enables printing of information about the chosen strategy for each command" 4
.IX Item "s - enables printing of information about the chosen strategy for each command"
.ie n .IP """o"" \- enables printing of ""other"" debug info \- info which has not been further categorized" 4
.el .IP "\f(CWo\fR \- enables printing of ``other'' debug info \- info which has not been further categorized" 4
.IX Item "o - enables printing of other debug info - info which has not been further categorized"
.ie n .IP """f"" \- enables printing of the rc files read by psh on startup while it is executed and allows easy tracing of problems in these files" 4
.el .IP "\f(CWf\fR \- enables printing of the rc files read by psh on startup while it is executed and allows easy tracing of problems in these files" 4
.IX Item "f - enables printing of the rc files read by psh on startup while it is executed and allows easy tracing of problems in these files"
.ie n .IP """i"" \- enables printing of initialization debug info" 4
.el .IP "\f(CWi\fR \- enables printing of initialization debug info" 4
.IX Item "i - enables printing of initialization debug info"
.ie n .IP """e"" \- enables printing of otherwise suppressed error messages" 4
.el .IP "\f(CWe\fR \- enables printing of otherwise suppressed error messages" 4
.IX Item "e - enables printing of otherwise suppressed error messages"
.ie n .IP """c"" \- enables printing of debug messages for completion" 4
.el .IP "\f(CWc\fR \- enables printing of debug messages for completion" 4
.IX Item "c - enables printing of debug messages for completion"
Even though \fBpsh\fR aims to be an interactive shell instead of a scripting
environment, speed is important. The main concern here is that startup
speed of \fBpsh\fR, which is primarily determined by two factors:
.IP "perl startup and module loading" 4
.IX Item "perl startup and module loading"
.IP "command processing speed" 4
.IX Item "command processing speed"
The startup time on a normal, not to busy, computer should be smaller than
one second. To make this possible, keep some simple rules in mind:
.ie n .IP "prefer ""require""\fR to \f(CW""use"" whenever possible" 4
.el .IP "prefer \f(CWrequire\fR to \f(CWuse\fR whenever possible" 4
.IX Item "prefer require to use whenever possible"
.IP "delay loading modules until they are really needed" 4
.IX Item "delay loading modules until they are really needed"
.ie n .IP "let the ""applies"" method of evaluation strategies be as fast as possible" 4
.el .IP "let the \f(CWapplies\fR method of evaluation strategies be as fast as possible" 4
.IX Item "let the applies method of evaluation strategies be as fast as possible"
.Sh "BUILT-IN \s-1FUNCTIONS\s0"
.IX Subsection "BUILT-IN FUNCTIONS"
On startup, \f(CW\*(C`psh\*(C'\fR scans the Psh::Builtins:: namespace and will add
the names of all found dynamic loadable builtins to \f(CW%Psh::built_ins\fR.
During evaluation of an input line, \f(CW\*(C`psh\*(C'\fR will first check the
\&\f(CW%Psh::built_ins\fR variable. If this fails it will try to locate an
appropriate built-in function in Psh::Builtins.pm.
A dynamical loadable builtin has to be in a file called Builtinname.pm
within the Psh::Builtins:: namespace and has at least one subroutine, called
\&'bi_builtinname'. Additionally, it may provide a cmpl_builtinname
subroutine for a custom completion. Furthermore, a builtin should
contain some pod documentation, starting with \*(L"=item * \*(R" and ending
with \*(L"=cut\*(R". The builtin will be called with 2 arguments, the first
one if the rest of the line while the second one is an array to
all the words psh discovered.
For a list of the predefined \fBpsh\fR builtins, use the \*(L"help\*(R" command from within \fBpsh\fR.
.Sh "\s-1DEFINING\s0 \s-1EVALUATION\s0 \s-1STRATEGIES\s0"
.IX Subsection "DEFINING EVALUATION STRATEGIES"
Currently empty due to overhaul of strategies
Copyright (C) 1999\-2003 Gregor N. Purdy. All rights reserved.
This script is free software. It may be copied or modified according
to the same terms as Perl itself.