*** perl.texinfo-0.4-release Fri Apr 19 18:26:06 1991 --- perl.texinfo Thu Dec 5 10:35:52 1991 *************** *** 8,14 **** This file documents perl, Practical Extraction and Report Language, and was originally based on Larry Wall's unix-style man page for perl. ! GNU Texinfo version adapted by Jeff Kellem . Copyright @copyright{} 1989, 1990, 1991 Larry Wall Texinfo version Copyright @copyright{} 1990, 1991 Jeff Kellem --- 8,14 ---- This file documents perl, Practical Extraction and Report Language, and was originally based on Larry Wall's unix-style man page for perl. ! GNU Texinfo version adapted by Jeff Kellem . Copyright @copyright{} 1989, 1990, 1991 Larry Wall Texinfo version Copyright @copyright{} 1990, 1991 Jeff Kellem *************** *** 40,53 **** @titlepage @title Perl Manual (Texinfo version) ! @subtitle for perl version 4.0 patchlevel 03 ! @subtitle Edition 0.4, dated 15 April 1991, printed on @today{} @sp 2 @center This is a @strong{DRAFT} copy of the Texinfo version of the perl manual! ! @author Original man page by Larry Wall ! @author Texinfo version by Jeff Kellem @page @vskip 0pt plus 1filll Copyright @copyright{} 1989, 1990, 1991 Larry Wall --- 40,53 ---- @titlepage @title Perl Manual (Texinfo version) ! @subtitle for perl version 4.0 patchlevel 19 ! @subtitle Edition 0.5, dated 04 December 1991, printed on @today{} @sp 2 @center This is a @strong{DRAFT} copy of the Texinfo version of the perl manual! ! @author Original man page by Larry Wall ! @author Texinfo version by Jeff Kellem @page @vskip 0pt plus 1filll Copyright @copyright{} 1989, 1990, 1991 Larry Wall *************** *** 77,84 **** @comment node-name, next, previous, up @ifinfo ! This Info file contains edition 0.4, dated 15 April 1991, "printed" on ! @today{} of the Perl Manual for Perl version 4.0 patchlevel 03. This is a @strong{DRAFT} copy of the Texinfo version of the perl manual! @end ifinfo --- 77,84 ---- @comment node-name, next, previous, up @ifinfo ! This Info file contains edition 0.5, dated 04 December 1991, "printed" on ! @today{} of the Perl Manual for Perl version 4.0 patchlevel 19. This is a @strong{DRAFT} copy of the Texinfo version of the perl manual! @end ifinfo *************** *** 141,147 **** examples.@refill The Texinfo version of the perl manual is maintained and distributed by ! Jeff Kellem. His electronic mail address is composer@@chem.bu.edu. There is a mailing list for discussion of the Texinfo version of the perl manual and a mailing address for reporting bugs in this version of the manual. They are:@refill --- 141,147 ---- examples.@refill The Texinfo version of the perl manual is maintained and distributed by ! Jeff Kellem. His electronic mail address is composer@@Beyond.Dreams.ORG. There is a mailing list for discussion of the Texinfo version of the perl manual and a mailing address for reporting bugs in this version of the manual. They are:@refill *************** *** 159,164 **** --- 159,167 ---- perl-manual-request@@chem.bu.edu @end example + The mailing list will be maintained on chem.bu.edu for some time, but + will probably move to Beyond.Dreams.ORG, in the future. FYI. + @node Copying, Conditions, Introduction, Top @unnumbered GNU General Public License @cindex GNU General Public License (GPL) *************** *** 832,839 **** @item -U allows @emph{perl} to do unsafe operations. Currently the only ! @samp{unsafe} operation is the unlinking of directories while ! running as superuser.@refill @item -v prints the version and patchlevel of your @emph{perl} executable.@refill --- 835,843 ---- @item -U allows @emph{perl} to do unsafe operations. Currently the only ! @samp{unsafe} operations are the unlinking of directories while ! running as superuser, and running setuid programs with fatal taint ! checks turned into warnings.@refill @item -v prints the version and patchlevel of your @emph{perl} executable.@refill *************** *** 951,959 **** the array. The following is always true:@refill @example ! @@whatever == $#whatever - $[ + 1; @end example Multi-dimensional arrays are not directly supported, but see the discussion of the @samp{$;} variable later for a means of emulating multiple subscripts with an associative array. You could also write a --- 955,969 ---- the array. The following is always true:@refill @example ! scalar(@@whatever) == $#whatever - $[ + 1; @end example + If you evaluate an associative array in a scalar context, it returns + a value which is true if and only if the array contains any elements. + (If there are any elements, the value returned is a string consisting + of the number of used buckets and the number of allocated buckets, separated + by a slash.)@refill + Multi-dimensional arrays are not directly supported, but see the discussion of the @samp{$;} variable later for a means of emulating multiple subscripts with an associative array. You could also write a *************** *** 2197,2202 **** --- 2207,2214 ---- f A single-precision float in the native format. d A double-precision float in the native format. p A pointer to a string. + v A short in @samp{@sc{vax}} (little-endian) order. + V A long in @samp{@sc{vax}} (little-endian) order. x A null byte. X Back up a byte. @@ Null fill to absolute position. *************** *** 2289,2294 **** --- 2301,2307 ---- @} @end example + @noindent and then there's @cindex Example, emulating @code{ord} with @code{unpack} *************** *** 2625,2630 **** --- 2638,2644 ---- @item sort(@var{SUBROUTINE} @var{LIST}) @itemx sort(@var{LIST}) @itemx sort @var{SUBROUTINE} @var{LIST} + @itemx sort @var{BLOCK} @var{LIST} @itemx sort @var{LIST} @cindex @code{sort} function @cindex Sorting a list *************** *** 2631,2648 **** @cindex Sorting @findex sort Sorts the @var{LIST} and returns the sorted array value. Nonexistent ! values of arrays are stripped out. If @var{SUBROUTINE} is omitted, ! sorts in standard string comparison order. If @var{SUBROUTINE} is ! specified, gives the name of a subroutine that returns an integer less ! than, equal to, or greater than 0, depending on how the elements of the ! array are to be ordered. In the interests of efficiency the normal ! calling code for subroutines is bypassed, with the following effects: ! the subroutine may not be a recursive subroutine, and the two elements ! to be compared are passed into the subroutine not via @samp{@@_} but as ! @samp{$a} and @samp{$b} (see example below). They are passed by ! reference so don't modify @samp{$a} and @samp{$b}. @var{SUBROUTINE} may ! be a scalar variable name, in which case the value provides the name of ! the subroutine to use. Examples:@refill @ifinfo @cindex Example, sorting using your own comparison routine --- 2645,2667 ---- @cindex Sorting @findex sort Sorts the @var{LIST} and returns the sorted array value. Nonexistent ! values of arrays are stripped out. If @var{SUBROUTINE} or @var{BLOCK} ! is omitted, sorts in standard string comparison order. If ! @var{SUBROUTINE} is specified, gives the name of a subroutine that ! returns an integer less than, equal to, or greater than 0, depending on ! how the elements of the array are to be ordered. (The @code{<=>} and ! @code{cmp} operators are extremely useful in such routines.) ! @var{SUBROUTINE} may be a scalar variable name, in which case the value ! provides the name of the subroutine to use. In place of a ! @var{SUBROUTINE} name, you can provide a @var{BLOCK} as an anonymous, ! in-line sort subroutine. ! ! In the interests of efficiency the normal calling code for subroutines ! is bypassed, with the following effects: the subroutine may not be a ! recursive subroutine, and the two elements to be compared are passed ! into the subroutine not via @samp{@@_} but as @samp{$a} and @samp{$b} ! (see example below). They are passed by reference so don't modify ! @samp{$a} and @samp{$b}. Examples:@refill @ifinfo @cindex Example, sorting using your own comparison routine *************** *** 2654,2667 **** @cindex Example, sorting by age @cindex Sorting using a user routine @example sub byage @{ ! $age@{$a@} - $age@{$b@}; # presuming integers @} @@sortedclass = sort byage @@class; @cindex Sorting examples @cindex Examples, sorting ! sub reverse @{ $a lt $b ? 1 : $a gt $b ? -1 : 0; @} @@harry = ('dog','cat','x','Cain','Abel'); @@george = ('gone','chased','yz','Punished','Axed'); print sort @@harry; --- 2673,2702 ---- @cindex Example, sorting by age @cindex Sorting using a user routine @example + # sort lexically + @@articles = sort @@files; + + # same thing, but with explicit sort routine + @@articles = sort @{ $a cmp $b; @} @@files; + + # same thing in reversed order + @@articles = sort @{ $b cmp $a; @} @@files; + + # sort numerically ascending + @@articles = sort @{ $a <=> $b; @} @@files; + + # sort numerically descending + @@articles = sort @{ $b <=> $a; @} @@files; + + # sort using explicit subroutine name sub byage @{ ! $age@{$a@} <=> $age@{$b@}; # presuming integers @} @@sortedclass = sort byage @@class; @cindex Sorting examples @cindex Examples, sorting ! sub reverse @{ $b cmp $a; @} @@harry = ('dog','cat','x','Cain','Abel'); @@george = ('gone','chased','yz','Punished','Axed'); print sort @@harry; *************** *** 2881,2887 **** chown $uid, $gid, @@filenames; @end example ! Here's an example of looking up non-numeric uids: @example @cindex Looking up non-numeric uids example --- 2916,2922 ---- chown $uid, $gid, @@filenames; @end example ! Here's an example that looks up non-numeric uids in the passwd file: @example @cindex Looking up non-numeric uids example *************** *** 3056,3061 **** --- 3091,3100 ---- @} @end example + @noindent + (This only works on machines for which the device number is negative + under NFS.) + @item symlink(@var{OLDFILE},@var{NEWFILE}) @cindex @code{symlink} function @cindex Creating symbolic links *************** *** 3704,3713 **** insufficient room on the current page for the formatted record, the page is advanced by writing a form feed, a special top-of-page format is used to format the new page header, and then the record is written. By ! default the top-of-page format is @code{top}, but it may be set to the ! format of your choice by assigning the name to the @samp{$^} variable. ! The number of lines remaining on the current page is in variable ! @samp{$-}, which can be set to 0 to force a new page.@refill If @var{FILEHANDLE} is unspecified, output goes to the current default output channel, which starts out as @samp{STDOUT} but may be changed by --- 3743,3754 ---- insufficient room on the current page for the formatted record, the page is advanced by writing a form feed, a special top-of-page format is used to format the new page header, and then the record is written. By ! default the top-of-page format is the name of the filehandle with ! @code{_TOP} appended, but it may be dynamically set to the format of ! your choice by assigning the name to the @samp{$^} variable while the ! filehandle is @code{select}ed. The number of lines remaining on the ! current page is in variable @samp{$-}, which can be set to 0 to force a ! new page.@refill If @var{FILEHANDLE} is unspecified, output goes to the current default output channel, which starts out as @samp{STDOUT} but may be changed by *************** *** 3726,3733 **** @cindex Replace and Search Functions @table @asis ! @item m/@var{PATTERN}/io ! @itemx /@var{PATTERN}/io @cindex Match function @cindex Matching, Pattern @cindex Pattern Matching --- 3767,3774 ---- @cindex Replace and Search Functions @table @asis ! @item m/@var{PATTERN}/gio ! @itemx /@var{PATTERN}/gio @cindex Match function @cindex Matching, Pattern @cindex Pattern Matching *************** *** 3792,3797 **** --- 3833,3867 ---- @samp{$F2} and @samp{$Etc}. The conditional is true if any variables were assigned, i.e. if the pattern matched.@refill + The @samp{g} modifier specifies global pattern matching---that is, + matching as many times as possible within the string. How it behaves + depends on the context. In an array context, it returns a list of + all the substrings matched by all the parentheses in the regular expression. + If there are no parentheses, it returns a list of all the matched strings, + as if there were parentheses around the whole pattern. In a scalar context, + it iterates through the string, returning TRUE each time it matches, and + FALSE when it eventually runs out of matches. (In other words, it remembers + where it left off last time and restarts the search at that point.) It + presumes that you have not modified the string since the last match. + Modifying the string between matches may result in undefined behavior. + (You can actually get away with in-place modifications via @code{substr()} + that do not change the length of the entire string. In general, however, + you should be using @code{s///g} for such modifications.) Examples:@refill + + @example + # array context + ($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g); + + # scalar context + $/ = 1; $* = 1; + while ($paragraph = <>) @{ + while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) @{ + $sentences++; + @} + @} + print "$sentences\n"; + @end example + @item ?@var{PATTERN}? @findex ?PATTERN? This is just like the @code{/pattern/} search, except that it matches only *************** *** 4393,4400 **** @cindex Sleeping for EXPR seconds @findex sleep Causes the script to sleep for @var{EXPR} seconds, or forever if no ! @var{EXPR}. May be interrupted by sending the process a ! @samp{SIGALARM}. Returns the number of seconds actually slept.@refill @item syscall(@var{LIST}) @itemx syscall @var{LIST} --- 4463,4472 ---- @cindex Sleeping for EXPR seconds @findex sleep Causes the script to sleep for @var{EXPR} seconds, or forever if no ! @var{EXPR}. May be interrupted by sending the process a @samp{SIGALRM}. ! Returns the number of seconds actually slept. You probably cannot mix ! @code{alarm()} and @code{sleep()} calls, since @code{sleep()} is often ! implemented using @code{alarm()}.@refill @item syscall(@var{LIST}) @itemx syscall @var{LIST} *************** *** 4976,4982 **** @var{DBNAME} is the name of the database (without the @file{.dir} or @file{.pag} extension). If the database does not exist, it is created with protection specified by @var{MODE} (as modified by the umask). If ! your system only supports the older dbm functions, you may only have one @code{dbmopen} in your program. If your system has neither dbm nor ndbm, calling @code{dbmopen} produces a fatal error.@refill --- 5048,5054 ---- @var{DBNAME} is the name of the database (without the @file{.dir} or @file{.pag} extension). If the database does not exist, it is created with protection specified by @var{MODE} (as modified by the umask). If ! your system only supports the older dbm functions, you may perform only one @code{dbmopen} in your program. If your system has neither dbm nor ndbm, calling @code{dbmopen} produces a fatal error.@refill *************** *** 5235,5250 **** may use the @code{defined} operator to determine if a subroutine exists.) If you pass arrays as part of @var{LIST} you may wish to pass the length of the array in front of each array. (@xref{Subroutines}.) ! @var{SUBROUTINE} may be a scalar variable, in which case the variable ! contains the name of the subroutine to execute. The parentheses are ! required to avoid confusion with the @samp{do @var{EXPR}} form.@refill ! As an alternate form, you may call a subroutine by prefixing the name ! with an ampersand: @samp{&foo(@@args)}. If you aren't passing any ! arguments, you don't have to use parentheses. If you omit the ! parentheses, no @samp{@@_} array is passed to the subroutine. The @samp{&} ! form is also used to specify subroutines to the @code{defined} and ! @code{undef} operators.@refill @item local(@var{LIST}) @cindex @code{local} function --- 5307,5328 ---- may use the @code{defined} operator to determine if a subroutine exists.) If you pass arrays as part of @var{LIST} you may wish to pass the length of the array in front of each array. (@xref{Subroutines}.) ! The parentheses are required to avoid confusion with the @samp{do ! @var{EXPR}} form.@refill ! ! @var{SUBROUTINE} may also be a single scalar variable, in which case the ! name of the subroutine to execute is take from the variable.@refill ! ! As an alternate (and preferred) form, you may call a subroutine by ! prefixing the name with an ampersand: @samp{&foo(@@args)}. If you ! aren't passing any arguments, you don't have to use parentheses. If you ! omit the parentheses, no @samp{@@_} array is passed to the subroutine. ! The @samp{&} form is also used to specify subroutines to the ! @code{defined} and @code{undef} operators.@refill ! @example ! if (defined &$var) @{ &$var($parm); undef &$var; @} ! @end example @item local(@var{LIST}) @cindex @code{local} function *************** *** 5357,5363 **** unless defined($value = readlink $sym); eval '@@foo = ()' if defined(@@foo); die "No XYZ package defined" unless defined %_XYZ; ! sub foo @{ defined &bar ? &bar(@@_) : die "No bar"; @} @end example See also @code{undef}. --- 5435,5441 ---- unless defined($value = readlink $sym); eval '@@foo = ()' if defined(@@foo); die "No XYZ package defined" unless defined %_XYZ; ! sub foo @{ defined &$bar ? &$bar(@@_) : die "No bar"; @} @end example See also @code{undef}. *************** *** 5482,5487 **** --- 5560,5566 ---- @item eval(@var{EXPR}) @itemx eval @var{EXPR} + @itemx eval @var{BLOCK} @itemx eval @c @@@@ above not in orig man pg pl28 @@@@ @cindex @code{eval} function *************** *** 5505,5510 **** --- 5584,5615 ---- trapping mechanism, where the @code{die} operator is used to raise exceptions.@refill + If the code to be executed doesn't vary, you may use the @code{eval + @var{BLOCK}} form to trap run-time errors without incurring the penalty + of recompiling each time. The error, if any, is still returned in + @samp{$@@}. Evaluating a single-quoted string (as @var{EXPR}) has the + same effect, except that the @code{eval @var{EXPR}} form reports syntax + errors at run time via @samp{$@@}, whereas the @code{eval @var{BLOCK}} + form reports syntax errors at compile time. The @code{eval @var{EXPR}} + form is optimized to @code{eval @var{BLOCK}} the first time it succeeds. + (Since the replacement side of a substitution is considered a + single-quoted string when you use the @samp{e} modifier, the same + optimization occurs there.) Examples:@refill + + @example + # make divide-by-zero non-fatal + eval @{ $answer = $a / $b; @}; warn $@@ if $@@; + + # optimized to same thing after first use + eval '$answer = $a / $b'; warn $@@ if $@@; + + # a compile-time error + eval @{ $answer = @}; + + # a run-time error + eval '$answer ='; # sets $@@ + @end example + @item ord(@var{EXPR}) @itemx ord @var{EXPR} @itemx ord *************** *** 6073,6079 **** @cindex Format example, @file{/etc/passwd} file @example # a report on the /etc/passwd file ! format top = Passwd File Name Login Office Uid Gid Home ------------------------------------------------------------------ --- 6178,6184 ---- @cindex Format example, @file{/etc/passwd} file @example # a report on the /etc/passwd file ! format STDOUT_TOP = Passwd File Name Login Office Uid Gid Home ------------------------------------------------------------------ *************** *** 6087,6093 **** @cindex Bug report format example @cindex Format example, bug report # a report from a bug report form ! format top = Bug Reports @@<<<<<<<<<<<<<<<<<<<<<<< @@||| @@>>>>>>>>>>>>>>>>>>>>>>> $system, $%, $date --- 6192,6198 ---- @cindex Bug report format example @cindex Format example, bug report # a report from a bug report form ! format STDOUT_TOP = Bug Reports @@<<<<<<<<<<<<<<<<<<<<<<< @@||| @@>>>>>>>>>>>>>>>>>>>>>>> $system, $%, $date *************** *** 6346,6356 **** @item $~ The name of the current report format for the currently selected output ! channel. (Mnemonic: brother to @samp{$^}.)@refill @item $^ The name of the current top-of-page format for the currently selected ! output channel. (Mnemonic: points to top of page.)@refill @item $| If set to nonzero, forces a flush after every @code{write} or @code{print} --- 6451,6463 ---- @item $~ The name of the current report format for the currently selected output ! channel. Default is name of the filehandle. (Mnemonic: brother to ! @samp{$^}.)@refill @item $^ The name of the current top-of-page format for the currently selected ! output channel. Default is name of the filehandle with @code{_TOP} ! appended. (Mnemonic: points to top of page.)@refill @item $| If set to nonzero, forces a flush after every @code{write} or @code{print} *************** *** 6571,6582 **** The current value of the debugging flags. (Mnemonic: value of @samp{-D} switch.)@refill @item $^I The current value of the inplace-edit extension. Use @code{undef} to disable inplace editing. (Mnemonic: value of @samp{-i} switch.)@refill @item $^P ! The name that Perl itself was invoked as, from argv[0]. @item $^T The time at which the script began running, in seconds since the epoch. --- 6678,6698 ---- The current value of the debugging flags. (Mnemonic: value of @samp{-D} switch.)@refill + @item $^F + The maximum system file descriptor, ordinarily 2. System file descriptors + are passed to subprocesses, while higher file descriptors are not. + During an open, system file descriptors are preserved even if the open + fails. Ordinary file descriptors are closed before the open is + attempted.@refill + @item $^I The current value of the inplace-edit extension. Use @code{undef} to disable inplace editing. (Mnemonic: value of @samp{-i} switch.)@refill @item $^P ! The internal flag that the debugger clears so that it doesn't debug ! itself. You could conceivably disable debugging yourself by clearing ! it.@refill @item $^T The time at which the script began running, in seconds since the epoch. *************** *** 6587,6592 **** --- 6703,6711 ---- The current value of the warning switch. (Mnemonic: related to the @samp{-w} switch.) + @item $^X + The name that Perl itself was executed as, from argv[0]. + @item $ARGV The scalar variable @samp{$ARGV} contains the name of the current file when reading from @samp{<>}.@refill *************** *** 7573,7584 **** on a particular stream, so does @emph{perl}. (This doesn't apply to @code{sysread()} and @code{syswrite()}.)@refill ! While none of the built-in data types have any arbitrary size limits (apart ! from memory size), there are still a few arbitrary limits: a given ! identifier may not be longer than 255 characters; @code{sprintf} is limited ! on many machines to 128 characters per field (unless the format specifier ! is exactly @samp{%s}); and no component of your @samp{PATH} may be longer ! than 255 if you use @samp{-S}.@refill @emph{Perl} actually stands for Pathologically Eclectic Rubbish Lister, but don't tell anyone I said that.@refill --- 7692,7701 ---- on a particular stream, so does @emph{perl}. (This doesn't apply to @code{sysread()} and @code{syswrite()}.)@refill ! While none of the built-in data types have any arbitrary size limits ! (apart from memory size), there are still a few arbitrary limits: a ! given identifier may not be longer than 255 characters, and no component ! of your @samp{PATH} may be longer than 255 if you use @samp{-S}.@refill @emph{Perl} actually stands for Pathologically Eclectic Rubbish Lister, but don't tell anyone I said that.@refill *************** *** 7591,7603 **** @noindent Perl was designed and implemented by@dots{} ! @dots{}Larry Wall @* MS-DOS port of perl by@dots{} @dots{}Diomidis Spinellis @* Texinfo version of @emph{perl} manual by@dots{} ! @dots{}Jeff Kellem @node Errata, Command Summary, Credits, Top @comment node-name, next, previous, up --- 7708,7720 ---- @noindent Perl was designed and implemented by@dots{} ! @dots{}Larry Wall @* MS-DOS port of perl by@dots{} @dots{}Diomidis Spinellis @* Texinfo version of @emph{perl} manual by@dots{} ! @dots{}Jeff Kellem @node Errata, Command Summary, Credits, Top @comment node-name, next, previous, up *************** *** 7632,7637 **** --- 7749,7757 ---- @end example @item + The descriptions of @code{alarm} and @code{sleep} refer to signal + @samp{SIGALARM}. These should refer to @samp{SIGALRM}. + @item The @samp{-0} switch to set the initial value of @samp{$/} was added to Perl after the book went to press. @item *************** *** 7658,7663 **** --- 7778,7797 ---- \l, \L, \u, \U, \E. The latter five control up/lower case translation. @item The @samp{$/} variable may now be set to a multi-character delimiter. + @item + There is now a @samp{g} modifier on ordinary pattern matching that + causes it to iterate through a string finding multiple matches. + @item + All of the @samp{$^X} variables are new except for @samp{$^T}. + @item + The default top-of-form format for @var{FILEHANDLE} is now + @code{@var{FILEHANDLE}_TOP} rather than @code{top}. + @item + The @code{eval @{@}} and @code{sort @{@}} constructs were added in + version 4.018. + @item + The @samp{v} and @samp{V} (little-endian) template options for + @code{pack} and @code{unpack} were added in 4.019. @end itemize @node Command Summary, Function Index, Errata, Top *************** *** 8005,8010 **** --- 8139,8163 ---- @ignore ''' $Log: perl.man.1,v $ + ''' Revision 4.0.1.5 91/11/11 16:42:00 lwall + ''' patch19: added little-endian pack/unpack options + ''' + ''' Revision 4.0.1.4 91/11/05 18:11:05 lwall + ''' patch11: added sort {} LIST + ''' patch11: added eval {} + ''' patch11: documented meaning of scalar(%foo) + ''' patch11: sprintf() now supports any length of s field + ''' + ''' Revision 4.0.1.3 91/06/10 01:26:02 lwall + ''' patch10: documented some newer features in addenda + ''' + ''' Revision 4.0.1.2 91/06/07 11:41:23 lwall + ''' patch4: added global modifier for pattern matches + ''' patch4: default top-of-form format is now FILEHANDLE_TOP + ''' patch4: added $^P variable to control calling of perldb routines + ''' patch4: added $^F variable to specify maximum system fd, default 2 + ''' patch4: changed old $^P to $^X + ''' ''' Revision 3.0.1.11 91/01/11 18:15:46 lwall ''' patch42: added -0 option '''