summaryrefslogtreecommitdiff
path: root/patchlevel.h
Commit message (Collapse)AuthorAgeFilesLines
* perl 4.0 patch 31: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 30: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 29: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 28: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 27: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 26: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 25: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 24: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 23: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 22: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 21: patch #20, continuedLarry Wall1992-06-081-1/+1
| | | | See patch #20.
* perl 4.0 patch 20: (combined patch)Larry Wall1992-06-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ENHANCEMENTS Subject: relaxed requirement for semicolon at the end of a block Subject: scalar keys %array now counts keys for you Subject: added ... as variant on .. Subject: get*by* routines now return something useful in a scalar context Subject: form feed for formats is now specifiable via $^L Subject: PERLLIB now supports multiple directories Subject: paragraph mode now skips extra newlines automatically MANPAGE Subject: documented that numbers may contain underline Subject: clarified that DATA may only be read from main script Subject: documented need for 1; at the end of a required file Subject: extended bracket-style quotes to two-arg operators: s()() and tr()() Subject: documented PERLLIB and PERLDB Subject: documented limit on size of regexp CONFIGURATION Subject: bcopy() and memcpy() now tested for overlap safety Subject: isascii() may now be supplied by a library routine Subject: Configure now allows optional continuation with files missing Subject: many more hints files added Subject: many more hints added Subject: hints now auto selected on uname -s as well as uname -m Subject: OSF/1 support added Subject: Configure growing-library-list bug fixed Subject: seekdir(), telldir() and rewinddir() now checked for independently Subject: cray didn't give enough memory to /bin/sh Subject: perl -P now uses location of sed determined by Configure Subject: SH files didn't work well with symbolic links Subject: makefiles now display new shift/reduce expectations Subject: support added to installperl for cross-compilation Subject: a2p was installed unexecutable Subject: installperl didn't warn on failed manpage installation Subject: disabled cpp test if cppstdin not yet installed PORTABILITY Subject: O_PIPE conflicted with Atari Subject: config.H updated to reflect more recent config.h Subject: removed implicit int declarations on functions Subject: added Atari ST portability Subject: some machines don't define ENOTSOCK in errno.h Subject: added explicit time_t support Subject: alternate config.h files upgraded Subject: new OS/2 support COMPILER Subject: various error messages have been clarified Subject: the switch optimizer didn't do anything in subroutines Subject: clarified debugging output for literals and double-quoted strings Subject: new warning for use of x with non-numeric right operand Subject: illegal lvalue message could be followed by core dump Subject: new warning for ambiguous use of unary operators Subject: eval "1 #comment" didn't work Subject: semantic compilation errors didn't abort execution Subject: an expression may now start with a bareword Subject: if {block} {block} didn't work any more Subject: "$var{$foo'bar}" didn't scan subscript correctly Subject: an EXPR may now start with a bareword Subject: print $fh EXPR can now expect term rather than operator in EXPR Subject: new warning on spurious backslash Subject: new warning on missing $ for foreach variable Subject: "foo"x1024 now legal without space after x Subject: new warning on print accidentally used as function Subject: 2. now eats the dot Subject: <@ARGV> now notices @ARGV Subject: tr/// now lets you say \- RUNTIME Subject: an eval block containing a null block or statement could dump core Subject: modulus with highest bit in left operand set didn't always work Subject: join() now pre-extends target string to avoid excessive copying Subject: subroutines didn't localize $`, $&, $', $1 et al correctly Subject: usersub routines didn't reclaim temp values soon enough Subject: ($<,$>) = ... didn't work on some architectures Subject: fixed memory leak on system() for vfork() machines Subject: @ in unpack failed too often Subject: slice on null list in scalar context returned random value Subject: splice with negative offset didn't work with $[ = 1 Subject: fixed some memory leaks in splice Subject: dbmclose(%array) didn't work Subject: delete could cause %array to give too low a count of buckets filled Subject: hash tables now split only if the memory is available to do so Subject: realloc(0, size) now does malloc in case library routines call it Subject: running taintperl explicitly now does checks even if $< == $> Subject: fixed memory leak in doube-quote interpretation Subject: a splice on non-existent array elements could dump core Subject: tr/stuff// wasn't working right I/O Subject: new warnings for failed use of stat operators on filenames with \n Subject: wait failed when STDOUT or STDERR reopened to a pipe Subject: end of file latch not reset on reopen of STDIN Subject: seek(HANDLE, 0, 1) went to eof because of ancient Ultrix workaround Subject: h_errno now accessible via $? REGEXP Subject: pattern modifiers i and o didn't interact right Subject: g pattern modifer sometimes returned extra values Subject: m/$pattern/g didn't work Subject: /^stuff/ wrongly assumed an implicit $* == 1 Subject: /x{0}/ was wrongly interpreted as /x{0,}/ Subject: added \W, \S and \D inside /[...]/ Subject: pattern modifiers i and g didn't interact right Subject: in some cases $` and $' didn't get set by match Subject: made /\$$foo/ look for literal '$foo' LIBRARIES Subject: big*.pl library files upgraded Subject: better support in chat2 for multiple children Subject: &ctime didn't handle $[ != 0 Subject: find.pl got confused by unreadable directories Subject: new version of newgetopt.pl Subject: Tom's famous double-ended pipe opener, open2(), is now included Subject: support added to pwd.pl to strip automounter crud Subject: &shellwords looped on bad input, and used inefficient regular exprs Subject: termcap.pl didn't parse termcap terminal names right Subject: timelocal could loop on bad input Subject: timelocal now calculates DST itself Subject: &getcap eventually dumped core in bsdcurses DEBUGGER Subject: support for MSDOS folded into perldb.pl Subject: perldb couldn't debug file containing '-', such as STDIN designator Subject: the debugger now warns you on lines that can't set a breakpoint Subject: the debugger made perl forget the last pattern used by // Subject: fixed double debug break in foreach with implicit array assignment Subject: debugger sometimes displayed wrong source line INTERSTICES Subject: Perl now distinguishes overlapped copies from non-overlapped Subject: fixed confusion between a *var's real name and its effective name Subject: deleted some minor memory leaks Subject: couldn't require . files Subject: -e 'cmd' no longer fails silently if /tmp runs out of space Subject: function key support added to curses.mus TRANSLATORS Subject: find2perl assumed . in PATH Subject: find2perl didn't output portable startup code Subject: find2perl didn't always stat at the right time Subject: s2p didn't output portable startup code Subject: s2p didn't translate s/pat/\&/ or s/pat/\$/ or s/pat/\\1/ right Subject: in a2p, getline should allow variable to be array element Subject: in a2p, now warns about spurious backslashes Subject: in a2p, now allows [ to be backslashed in pattern Subject: in a2p, now allows numbers of the form 2. Subject: in a2p, simplified the filehandle model Subject: in a2p, made RS="" translate to $/ = "\n\n" Subject: in a2p, do {...} while ... was missing some reconstruction code
* perl 4.0 patch 19: (combined patch)Larry Wall1991-11-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ok, here's the cleanup patch I suggested you wait for. Have at it... Subject: added little-endian pack/unpack options This is the only enhancement in this patch, but it seemed unlikely to bust anything else, and added functionality that it was very difficult to do any other way. Compliments of David W. Sanderson. Subject: op/regexp.t failed from missing arg to bcmp() Subject: study was busted by 4.018 Subject: sort $subname was busted by changes in 4.018 Subject: default arg for shift was wrong after first subroutine definition Things that broke in 4.018. Shame on me. Subject: do {$foo ne "bar";} returned wrong value A bug of long standing. How come nobody saw this one? Or if you did, why didn't you report it before now? Or if you did, why did I ignore you? :-) Subject: some machines need -lsocket before -lnsl Subject: some earlier patches weren't propagated to alternate 286 code Subject: compile in the x2p directory couldn't find cppstdin Subject: more hints for aix, isc, hp, sco, uts Subject: installperl no longer updates unchanged library files Subject: uts wrongly defines S_ISDIR() et al Subject: too many preprocessors can't expand a macro right in #if The usual pastiche of portability kludges. Subject: deleted some unused functions from usersub.c And fixed the spelling of John Macdonald's name, and included his suggested workaround for a certain vendor's stdio bug... Subject: added readdir test Subject: made op/groups.t more reliable Subject: added test for sort $subname to op/sort.t Subject: added some hacks to op/stat.t for weird filesystem architectures Improvements (hopefully) to the regression tests.
* perl 4.0 patch 18: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 17: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 16: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 15: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 14: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 13: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 12: patch #11, continuedLarry Wall1991-11-051-1/+1
| | | | See patch #11.
* perl 4.0 patch 11: (combined patch)Larry Wall1991-11-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Subject: added eval {} Subject: eval 'stuff' now optimized to eval {stuff} This set of patches doesn't have many enhancements but this is one of them. The eval operator has two distinct semantic functions. First, it runs the parser on some random string and executes it. Second, it traps exceptions and returns them in $@. There are times when you'd like to get the second function without the first. In order to do that, you can now eval a block of code, which is parsed like ordinary code at compile time, but which traps any run-time errors and returns them in the $@ variable. For instance, to trap divide by zero errors: eval { $answer = $foo / $bar; }; warn $@ if $@; Since single-quoted strings don't ever change, they are optimized to the eval {} form the first time they are encountered at run-time. This doesn't happen too often, though some of you have written things like eval '&try_this;'. However, the righthand side of s///e is evaluated as a single-quoted string, so this construct should run somewhat faster now. Subject: added sort {} LIST Another enhancement that some of you have been hankering for. You can now inline the sort subroutine as a block where the subroutine name used to go: @articles = sort {$a <=> $b;} readdir(DIR); Subject: added some support for 64-bit integers For Convexen and Crayen, which have 64-bit integers, there's now pack, unpack and sprintf support for 64-bit integers. Subject: sprintf() now supports any length of s field You can now use formats like %2048s and %-8192.8192s. Perl will totally bypass your system's sprintf() function on these. No, you still probably can't say %2048d. No, I'm not going to change that any time soon. Subject: substr() and vec() weren't allowed in an lvalue list Subject: extra comma at end of list is now allowed in more places (Hi, Felix!) Subject: underscore is now allowed within literal octal and hex numbers Various syntactic relaxations. You can now get away with (substr($foo,0,3), substr($bar,0,3)) = ('abc', 'def'); (1,2,3,)[$x]; $addr = 0x1a20_ff0b; Subject: safe malloc code now integrated into Perl's malloc when possible To save a bunch of subroutine calls. If you use your system's malloc it still has to use wrappers. Subject: added support for dbz By saying "make dbzperl" you can make a copy of Perl that can access C news's dbz files. You still have to follow the dbz rules, though, if you're going to try to write a dbz file. Subject: there are now subroutines for calling back from C into Perl Subject: usub/curses.mus now supports SysV curses More C linkage support. I still haven't got Perl embeddable, but we're getting there. That's too big an enhancement for this update, in which I've been trying to stick to bug fixes, with some success. Subject: prepared for ctype implementations that don't define isascii() A larger percentage of this update consists of code to do consistent ctype processing whether or not <ctype.h> is 8-bit clean. Subject: /$foo/o optimizer could access deallocated data Subject: certain optimizations of //g in array context returned too many values Subject: regexp with no parens in array context returned wacky $`, $& and $' Subject: $' not set right on some //g Subject: grep of a split lost its values Subject: # fields could write outside allocated memory Subject: length($x) was sometimes wrong for numeric $x Recently added or modified stuff that you kind of expect to be a bit flaky still. Well, I do... Subject: passing non-existend array elements to subrouting caused core dump Subject: "foo" x -1 dumped core Subject: truncate on a closed filehandle could dump Subject: a last statement outside any block caused occasional core dumps Subject: missing arguments caused core dump in -D8 code Subject: cacheout.pl could dump core from invalid comparison operator Subject: *foo = undef coredumped Subject: warn '-' x 10000 dumped core Subject: index("little", "longer string") could visit faraway places A bunch of natty little bugs that you wouldn't generally run into unless you're trying to be coy. Subject: hex() didn't understand leading 0x It wasn't documented that it should work, but oct() understands 0x, so why not hex()? I dunno... Subject: "foo\0" eq "foo" was sometimes optimized to true Subject: eval confused by string containing null Yet more holdovers from the time before Perl was 8-bit clean. Subject: foreach on null list could spring memory leak Subject: local(*FILEHANDLE) had a memory leak Kind of slow leaks, as leaks go. Still... Subject: minimum match length calculation in regexp is now cumulative More substitutions can be done in place now because Perl knows that patterns like in s/foo\s+bar/1234567/ have to match a certain number of characters total. It used to be on that particular pattern that it only knew that it had to match at least 3 characters. Now it know it has to match at least 7. Subject: multiple reallocations now avoided in 1 .. 100000 You still don't want to say 1 .. 1000000, but at least it will refrain from allocating intermediate sized blocks while it's constructing the value, and won't do the extra copies implied by realloc. Subject: indirect subroutine calls through magic vars (e.g. &$1) didn't work Subject: defined(&$foo) and undef(&$foo) didn't work Subject: certain perl errors should set EBADF so that $! looks better Subject: stats of _ forgot whether prior stat was actually lstat Subject: -T returned true on NFS directory Subject: sysread() in socket was substituting recv() Subject: formats didn't fill their fields as well as they could Subject: ^ fields chopped hyphens on line break Subject: -P didn't allow use of #elif or #undef Subject: $0 was being truncated at times Subject: forked exec on non-existent program now issues a warning Various things you'd expect to work the way you expect, but didn't when you did, or I did, or something... Subject: perl mistook some streams for sockets because they return mode 0 too Subject: reopening STDIN, STDOUT and STDERR failed on some machines Problems opening files portably. So what's new? Subject: cppstdin now installed outside of source directory Subject: installperl now overrides installer's umask People who used cppstdin for the cpp filter or who had their umask set to 700 will now be happier. (And Configure will now prefer /lib/cpp over cppstdin like it used to. If this gives your machine heartburn because /lib/cpp doesn't set the symbols it should, write a hints file to poke them into ccflags.) Subject: initial .* in pattern had dependency on value of $* An initial .* was optimized to have a ^ on the front to avoid retrying when we know it won't match. Unfortunately this implicit ^ was paying attention to $*, which it shouldn't have been. Subject: certain patterns made use of garbage pointers from uncleared memory Many of you saw this as a failure in t/op/pat.t. Subject: perl now issues warning if $SIG{'ALARM'} is referenced Since the book mentions "SIGALARM", I thought we needed this. Subject: solitary subroutine references no longer trigger typo warnings You can now use -w (more) profitably on programs that require other files. I figured if you mistype a subroutine name you'll get a fatal error anyway, unlike a variable, which just defaults to being undefined. Subject: $foo .= <BAR> could overrun malloced memory Good old-fashioned bug. Subject: \$ didn't always make it through double-quoter to regexp routines Subject: \x and \c were subject to double interpretation in regexps Subject: nested list operators could miscount parens Subject: sort eval "whatever" didn't work Syntactic misfeatures of various sorts. Subject: find2perl produced incorrect code for -group Subject: find2perl could be confused by names containing whitespace Subject: in a2p, split on whitespace produced extra null field Translator stuff. Subject: new complete.pl from Wayne Thompson Subject: assert.pl and exceptions.pl from Tom Christiansen Subject: added Tom's c2ph stuff Subject: getcwd.pl from Brandon S. Allbery Subject: fastcwd.pl from John Basik Subject: chat2.pl from Randal L. Schwartz New contributed stuff. Thanks! (Not that a lot of the other stuff isn't contributed too...) Subject: debugger got confused over nested subroutine definitions Subject: once-thru blocks didn't display right in the debugger Subject: perldb.pl modified to run within emacs in perldb-mode Debugger stuff. The first two were caused by not saving line numbers at exactly the right moment. Subject: documented meaning of scalar(%foo) I also updated the Errata section of the man page. Subject: various portability fixes Subject: random cleanup Subject: saberized perl Type casts, saber warning message suppression, hints files and various metaconfig fiddlehoods.
* perl 4.0 patch 10: (combined patch)Larry Wall1991-06-091-1/+1
| | | | | | | | | | | | | Subject: pack(hh,1) dumped core Subject: read didn't work from character special files open for writing Subject: close-on-exec wrongly set on system file descriptors Subject: //g only worked first time through Subject: perl -v printed incorrect copyright notice Subject: certain pattern optimizations were botched Subject: documented some newer features in addenda Subject: $) and $| incorrectly handled in run-time patterns Subject: added tests for case-insensitive regular expressions Subject: m'$foo' now treats string as single quoted
* perl 4.0 patch 9: patch #4, continuedLarry Wall1991-06-061-1/+1
| | | | See patch #4.
* perl 4.0 patch 8: patch #4, continuedLarry Wall1991-06-061-1/+1
| | | | See patch #4.
* perl 4.0 patch 7: patch #4, continuedLarry Wall1991-06-061-1/+1
| | | | See patch #4.
* perl 4.0 patch 6: patch #4, continuedLarry Wall1991-06-061-1/+1
| | | | See patch #4.
* perl 4.0 patch 5: patch #4, continuedLarry Wall1991-06-061-1/+1
| | | | See patch #4.
* perl 4.0 patch 4: (combined patch)Larry Wall1991-06-061-1/+1
| | | | | | Random patches, mostly bugs and portability stuff. //g is the only major new feature. Additionally, there is now an alternate license you can distribute Perl under.
* perl 4.0 patch 3: Patch 1 continuedLarry Wall1991-04-111-1/+1
|
* perl 4.0 patch 2: Patch 1 continuedLarry Wall1991-04-111-1/+1
|
* perl 4.0 patch 1: (combined patch)Larry Wall1991-04-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Subject: Configure now handles defaults much better Subject: Configure now knows if config.sh was built on this machine Subject: Configure now checks file existence more efficiently Subject: Configure now handles stupid SCO csh Configure has been heavily revised. Many of the tests that used to simply force a decision now check that decision against the previous value of the variable, and offer to let you change it. The default now is to keep the old value, so that you don't lose information from your previous run. Because of this, it's now more important to know whether, in fact, config.sh was produced on this machine and on this version of the operating system. config.sh now contains a lastuname variable which contains the output of uname -a. If this matches the current output of uname -a, Configure defaults to including the old config.sh. Otherwise not. If there is no valid config.sh, then Configure looks defaults for the current architecture in the hints/ subdirectory instead. The guesswork I've done in this section of code is phenomenal, so you'll have to instruct me where I've misparsed the output of uname (a problem in portability all of its own). Subject: Configure now differentiates getgroups() type from getgid() type Subject: Configure now figures out malloc ptr type Subject: Configure now does better on sprintf() Configure was assuming that the array of values returned from getgroups was the same type as the gids returned by other system calls. Unfortunately, reality set in. Likewise for malloc() and sprintf(), which there is only one portable way to find out the return value of: try it one way or the other, and see if it blows up. Subject: C flags are now settable on a per-file basis Subject: reduced maximum branch distance in eval.c Certain compilers and/or optimizers get bozoed out by large compilation units, or by large structures within those units. Previously, you either had to change the compiler flags for all the files, or do hairy editing in Makefile.SH and remake the Makefile, necessitating a make depend. Now there is a script called cflags.SH whose duty it is to return the proper CFLAGS for any given C file. You can change the flags in just one spot now and they will be immediately reflected in the next make (or even in the current make, if one is running). Eventually I expect that any of the hints files could modify cflags.SH, but I haven't done that yet. The particular problem of long jump offsets in eval.c has been at least partially alleviated by locating some of the labels in the middle of the function instead of at the end. This still doesn't help the poor Vax when you compile with -g, since it puts a jump to the end of the function to allocate the stack frame and then jumps back to the beginning of the function to execute it. For now Vaxen will have to stick with -O or hand assemble eval.c and teval.c with a -J switch. Subject: fixed "Bad free" error Subject: fixed debugger coredump on subroutines Subject: regexec only allocated space for 9 subexpresssions These are problems that were reported on the net and had unofficial patches. Now they have official patches. Be sure to patch a copy of your files without the unofficial patches, or the patch program will get confused. Subject: you may now use "die" and "caller" in a signal handler Someone pointed out that using die to raise an exception out of a signal handler trashed the expression value stack if the exception was caught by eval. While fixing that, I also fixed the longstanding problem that signal handlers didn't have a normal call frame, which prevented the caller function from working. Subject: fixed undefined environ problem Subject: hopefully straightened out some of the Xenix mess Subject: random cleanup in cpp namespace Just keeping up with the current progress in non-standardization. Subject: fixed failed fork to return undef as documented The open function returns undef on failed implicit forks. The Book assumed that the same was true of an explicit fork. I've made the function behave like the Book says. It's a pity there's no way to have an undefined value that returns -1 in a numeric context but false in a boolean context... Subject: generalized the yaccpar fixer some Thanks to Andy Dougherty, perly.fixer now knows how to fix SVR3 2.2's yaccpar code to do dynamic parse stack allocation. He also made it easy for other people to insert their code there. Hooray! Subject: find2perl sometimes needs to stat on the 2nd leg of a -o Subject: find2perl didn't correctly handle switches with an argument of 0 In attempting to delay the lstat to the last moment, in case a filename could be rejected on the basis of its name, find2perl neglected to take into account the fact that control might pass to the 2nd half of a -o without executing all of the 1st half, in particular without executing the lstat. find2perl was wisely removing leading zeroes from numbers that would mistakenly be interpreted as octal numbers by Perl. Unfortunately, this caused it to delete the number 0 entirely. Subject: fixed dumpvar not to dump internal debugging info Subject: substr($ENV{"PATH"},0,0) = "/foo:" didn't modify environment Subject: $foo .= <BAR> could cause core dump for certain lengths of $foo Subject: perl -de "print" wouldn't stop at the first statement Random glitchy little things. Subject: I'm at NetLabs now I'm now working for NetLabs, Inc., and I hadn't changed my address everywhere.
* perl 4.0.00: (no release announcement available)perl-4.0.00Larry Wall1991-03-211-1/+1
| | | | So far, 4.0 is still a beta test version. For the last production version, look in pub/perl.3.0/kits@44.
* perl 3.0 patch #44 patch #42, continuedperl-3.044Larry Wall1991-01-111-1/+1
| | | | See patch #42.
* perl 3.0 patch #43 patch #42, continuedLarry Wall1991-01-111-1/+1
| | | | See patch #42.
* perl 3.0 patch #42 (combined patch)Larry Wall1991-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of these patches are pretty self-explanatory. Much of this is random cleanup in preparation for version 4.0, so I won't talk about it here. A couple of things should be noted, however. First, there's a new -0 option that allows you to specify (in octal) the initial value of $/, the record separator. It's primarily intended for use with versions of find that support -print0 to delimit filenames with nulls, but it's more general than that: null ^A default CR paragraph mode file slurp mode This feature is so new that it didn't even make it into the book. The other major item is that different patchlevels of perl can now coexist in your bin directory. The names "perl" and "taintperl" are just links to "perl3.044" and "tperl3.044". This has several benefits. The perl3.044 invokes the corresponding tperl3.044 rather than taintperl, so it always runs the correct version. Second, you can "freeze" a script by putting a #! line referring to a version that it is known to work with. Third, you can put a new version out there to try out before making it the default perl. Lastly, it sells more disk drives. :-) Barring catastrophe, this will likely be the last patch before version 4.0 comes out.
* perl 3.0 patch #41 (combined patch)Larry Wall1990-11-131-1/+1
| | | | | | | | | | | | | | | | Here's the requisite dinky patch to fix the problems of the preceding large set of patches. In this case, a couple of malloc/free problems--one of which involved overrunning the end of an allocated string, and the other of which involved freeing with invalid pointers. (There was also a bug in there involving variable magicalness propagating incorrectly, which resulting in a dbm anomoly.) I updated README to mention that dnix needs to avoid -O. I added the hp malloc union overhead strut that Jan Dr{rv posted. (Eventually this should be determined by Configure, but laziness has its advantages.)
* perl 3.0 patch #40 patch #38, continuedLarry Wall1990-11-091-1/+1
| | | | See patch #38.
* perl 3.0 patch #39 patch #38, continuedLarry Wall1990-11-091-1/+1
| | | | See patch #38.
* perl 3.0 patch #38 (combined patch)Larry Wall1990-11-091-1/+1
| | | | Forget the description, it's too late at night...
* perl 3.0 patch #37 (combined patch)Larry Wall1990-10-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | I tried to take the strlen of an integer on systems without wait4() or waitpid(). For some reason this didn't work too well... In hash.c there was a call to dbm_nextkey() which needed to be ifdefed on old dbm systems. A pattern such as /foo.*bar$/ was wrongly optimized to do tail matching on "foo". This was a longstanding bug that was unmasked by patch 36. Some systems have some SYS V IPC but not all of it. Configure now figures this out. Patch 36 put the user's PATH in front of Configures, but to make it work right I needed to change all calls of loc to ./loc in Configure. $cryptlib needed to be mentioned in the Makefile. Apollo 10.3 and Sun 3.5 have some compilation problems, so I mentioned them in README. Cray has weird restrictions on setjmp locations--you can't say if (result = setjmp(...)) Random typos and cleanup.
* perl 3.0 patch #36 patch #29, continuedLarry Wall1990-10-151-1/+1
| | | | See patch #29.
* perl 3.0 patch #35 patch #29, continuedLarry Wall1990-10-151-1/+1
| | | | See patch #29.
* perl 3.0 patch #34 patch #29, continuedLarry Wall1990-10-151-1/+1
| | | | See patch #29.
* perl 3.0 patch #33 patch #29, continuedLarry Wall1990-10-151-1/+1
| | | | See patch #29.
* perl 3.0 patch #32 patch #29, continuedLarry Wall1990-10-161-1/+1
| | | | See patch #29.
* perl 3.0 patch #31 patch #29, continuedLarry Wall1990-10-161-1/+1
| | | | See patch #29.
* perl 3.0 patch #30 patch #29, continuedLarry Wall1990-10-151-1/+1
| | | | See patch #29.
* perl 3.0 patch #29 (combined patch)Larry Wall1990-10-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This set of patches pretty much brings you up to the functionality that version 4.0 will have. The Perl Book documents version 4.0. Perhaps these should be called release notes... :-) Enhancements: Many of the changes relate to making the debugger work better. It now runs your scripts at nearly full speed because it no longer calls a subroutine on every statement. The debugger now doesn't get confused about packages, evals and other filenames. More variables (though still not all) are available within the debugger. Related to this is the fact that every statement now knows which package and filename it was compiled in, so package semantics are now much more straightforward. Every variable also knows which package it was compiled in. So many places that used to print out just the variable name now prefix the variable name with the package name. Notably, if you print *foo it now gives *package'foo. Along with these, there is now a "caller" function which returns the context of the current subroutine call. See the man page for more details. Chip Salzenberg sent the patches for System V IPC (msg, sem and shm) so I dropped them in. There was no way to wait for a specific pid, which was silly, since Perl was already keeping track of the information. So I added the waitpid() call, which uses Unix's wait4() or waitpid() if available, and otherwise emulates them (at least as far as letting you wait for a particular pid--it doesn't emulate non-blocking wait). For use in sorting routines, there are now two new operators, cmp and <=>. These do string and numeric comparison, returning -1, 0 or 1 when the first argument is less than, equal to or greater than the second argument. Occasionally one finds that one wants to evaluate an operator in a scalar context, even though it's part of a LIST. For this purpose, there is now a scalar() operator. For instance, the approved fix for the novice error of using <> in assigning to a local is now: local($var) = scalar(<STDIN>); Perl's ordinary I/O is done using standard I/O routines. Every now and then this gets in your way. You may now access the system calls read() and write() via the Perl functions sysread() and syswrite(). They should not be intermixed with ordinary I/O calls unless you know what you're doing. Along with this, both the sysread() and read() functions allow you an optional 4th argument giving an offset into the string you're reading into, so for instance you can easily finish up partial reads. As a bit of syntactic sugar, you can now use the file tests -M, -A and -C to determine the age of a file in (possibly fractional) days as of the time the script started running. This makes it much easier to write midnight cleanup scripts with precision. The index() and rindex() functions now have an optional 3rd argument which tells it where to start looking, so you can now iterate through a string using these functions. The substr() function's 3rd argument is now optional, and if omitted, the function returns everything to the end of the string. The tr/// translation function now understands c, d and s options, just like the tr program. (Well, almost just like. The d option only deletes characters that aren't in the replacement string.) The c complementes the character class to match and the s option squishes out multiple occurrences of any replacement class characters. The reverse function, used in a scalar context, now reverses its scalar argument as a string. Dale Worley posted a patch to add @###.## type fields to formats. I said, "Neat!" and dropped it in, lock, stock and sinker. Kai Uwe Rommel sent a bunch of MSDOS and OS/2 updates, which I (mostly) incorporated. I can't vouch for them, but they look okay. Any data stored after the __END__ marker can be accesses now via the DATA filehandle, which is automatically opened onto the script at that point. (Well, actually, it's just kept open, since it was already open to read the script.) The taintperl program now checks for world writable PATH components, and complains if any are found (if PATH is used). Bug fixes: It used to be that you could get core dumps by such means as @$foo=(); @foo[42]; (1,2,3)[42]; $#foo = 50; foreach $elem (@foo) { $elem = 1; } This is no longer so. (For those who are up on Perl internals, the stack policy no longer allows Nullstr--all undefined values must be passed as &str_undef.) If you say something like local($foo,$bar); or local($initialized,$foo,$bar) = ('one value'); $foo and $bar are now initialized to the undefined value, rather than the defined null string. Array assignment to special arrays is now better supported. For instance, @ENV = () clears the environment, and %foo = () will now clear any dbm file bound to %foo. On the subject of dbm files, the highly visible bugs at patchlevel 28 have been fixed. You can now open dbm files readonly, and you don't have to do a dummy assignment to make the cache allocate itself. The modulus operator wasn't working right on negative values because of a misplaced cast. For instance, -5 % 5 was returning the value 5, which is clearly wrong. Certain operations coredumped if you didn't supply a value: close; eof; Previously, if the subroutine supplied for a sort operation didn't exist, it failed quietly. Now it produces a fatal error. The bitwise complement operator ~ didn't work on vec() strings longer than one byte because of failure to increment a loop variable. The oct and hex functions returned a negative result if the highest bit was set. They now return an unsigned result, which seems a little less confusing. Likewise, the token 0x80000000 also produces an unsigned value now. Some machines didn't like to see 0x87654321 in an #ifdef because they think of the symbols as signed. The tests have been changed to just look at the lower 4 nybbles of the value, which is sufficient to determine endianness, at least as far as the #ifdefs are concerned. The unshift operator did not return the documented value, which was the number of elements in the new array. Instead it returned the last unshifted argument, more or less by accident. -w sometimes printed spurious warnings about ARGV and ENV when referencing the arrays indirectly through shift or exec. This was because the typo test was misplaced before the code that exempts special variables from the typo test. If you said 'require "./foo.pl"', it would look in someplace like /usr/local/lib/perl/./foo.pl instead of the current directory. This works more like people expect now. The require error messages also referred to wrong file, if they worked at all. The h2ph program didn't translate includes right--it should have changed .h to .ph. Patterns with multiple short literal strings sometimes failed. This was a problem with the code that looks for a maximal literal string to feed to the Boyer-Moore searching routine. The code was gluing together literal strings that weren't continuous. The $* variable controls multi-line pattern matching. When it's 0, patterns are supposed to match as if the string contained a single line. Unfortunately, /^pat/ occasionally matched in middle of string under certain conditions. Recently the regular expression routines were upgraded to do {n,m} more efficiently. In doing this, however, I manufactured a couple of bugs: /.{n,m}$/ could match with fewer than n characters remaining on the line, and patterns like /\d{9}/ could match more than 9 characters. The undefined value has an actual physical location in Perl, and pointers to it are passed around. By certain circuitous routes it was possible to clobber the undefined value so that it was no longer undefined--kind of like making /dev/null into a real file. Hopefully this can't happen any more. op.stat could fail if /bin/0 existed, because of a while (<*>) {... This has been changed to a while (defined($_ = <*>)) {... The length of a search pattern was limited by the length of tokenbuf internally. This restriction has been removed. The null character gave the tokener indigestion when used as a delimiter for m// or s///. There was a bunch of other cleanupish things that are too trivial to mention here.
* perl 3.0 patch #28 (combined patch)Larry Wall1990-08-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Certain systems, notable Ultrix, set the close-on-exec flag by default on dup'ed file descriptors. This is anti-social when you're creating a new STDOUT. The flag is now forced off for STDIN, STDOUT and STDERR. Some yaccs report 29 shift/reduce conflicts and 59 reduce/reduce conflicts, while other yaccs and bison report 27 and 61. The Makefile now says to expect either thing. I'm not sure if there's a bug lurking there somewhere. The defined(@array) and defined(%array) ended up defining the arrays they were trying to determine the status of. Oops. Using the status of NSIG to determine whether <signal.h> had been included didn't work right on Xenix. A fix seems to be beyond Configure at the moment, so we've got some OS dependent #ifdefs in there. There were some syntax errors in the new code to determine whether it is safe to emulate rename() with unlink/link/unlink. Obviously heavily tested code... :-) Patch 27 introduced the possibility of using identifiers as unquoted strings, but the code to warn against the use of totally lowercase identifiers looped infinitely. I documented that you can't interpolate $) or $| in pattern. It was actually implied under s///, but it should have been more explicit. Patterns with {m} rather than {m,n} didn't work right. Tests io.fs and op.stat had difficulties under AFS. They now ignore the tests in question if they think they're running under /afs. The shift/reduce expectation message was off for a2p's Makefile.
* perl 3.0 patch #27 patch #19, continuedLarry Wall1990-08-081-1/+1
| | | | See patch #19.