35 years agoperl 3.0: (no announcement message available)
Larry Wall [Wed, 18 Oct 1989 00:00:00 +0000]
perl 3.0: (no announcement message available)

A few of the new features: (18 Oct)

    * Perl can now handle binary data correctly and has functions to pack and unpack binary structures into arrays or lists. You can now do arbitrary ioctl functions.
    * You can now pass things to subroutines by reference.
    * Debugger enhancements.
    * An array or associative array may now appear in a local() list.
    * Array values may now be interpolated into strings.
    * Subroutine names are now distinguished by prefixing with &. You can call subroutines without using do, and without passing any argument list at all.
    * You can use the new -u switch to cause perl to dump core so that you can run undump and produce a binary executable image. Alternately you can use the "dump" operator after initializing any variables and such.
    * You can now chop lists.
    * Perl now uses /bin/csh to do filename globbing, if available. This means that filenames with spaces or other strangenesses work right.
    * New functions: mkdir and rmdir, getppid, getpgrp and setpgrp, getpriority and setpriority, chroot, ioctl and fcntl, flock, readlink, lstat, rindex, pack and unpack, read, warn, dbmopen and dbmclose, dump, reverse, defined, undef.

36 years agoperl 2.0 patch 1: removed redundant debugging code in regexp.c
Larry Wall [Tue, 28 Jun 1988 03:41:16 +0000]
perl 2.0 patch 1: removed redundant debugging code in regexp.c

If you used ++ on a variable that had the value '' (as opposed to
being undefined) it would increment the numeric part but not
invalidate the string part, which could then give false results.

Berkeley recently sent out a patch that disables setuid #! scripts
because of an inherent problem in the semantics as they are
currently defined.  If you have installed that patch, your setuid
and setgid bits are useless on scripts.  I've added a means
for perl to examine those bits and emulate setuid/setgid scripts
itself in what I believe is a secure manner.  If normal perl
detects such a script, it passes it off to another version of
perl that runs setuid root, and can run the script under the
desired uid/gid.  This feature is optional, and Configure will
ask if you want to do it.

Some machines didn't like config.h when it said #/*undef SYMBOL.
Config.h.SH now is smart enough to tuck the # inside the comment.

There were several small problems in Configure: the return code from
ar was hidden by a piped call to sed, so if ar failed it went
undetected.  The Cray uses a program called bld instead of ar.
Let's hear it for compatibilty.  At least one version of gnucpp
adds a space after symbol interpolation, which was giving the
C preprocessor detector fits.  There was a call to grep '-i' that
needed to have the -i protected by a backslash.  Also, Configure
should remove the UU subdirectory that it makes while running.

"make realclean" now knows about the alternate patch extension ~.

In the manual page, I fixed some quotes that were ugly in troff,
and did some clarification of LIST, study, tr and unlink.

regexp.c had some redundant debugging code.

tr/x/y/ could dump core if y is shorter than x.  I found this out
when I tried translating a bunch of characters to space by saying
something like y/a-z/ /.

36 years agoperl 2.0 (no announcement message available)
Larry Wall [Sun, 5 Jun 1988 00:00:00 +0000]
perl 2.0 (no announcement message available)

Some of the enhancements from Perl1 included:

    * New regexp routines derived from Henry Spencer's.
          o Support for /(foo|bar)/.
          o Support for /(foo)*/ and /(foo)+/.
          o \s for whitespace, \S for non-, \d for digit, \D nondigit
    * Local variables in blocks, subroutines and evals.
    * Recursive subroutine calls are now supported.
    * Array values may now be interpolated into lists: unlink 'foo', 'bar', @trashcan, 'tmp';
    * File globbing.
    * Use of <> in array contexts returns the whole file or glob list.
    * New iterator for normal arrays, foreach, that allows both read and write.
    * Ability to open pipe to a forked off script for secure pipes in setuid scripts.
    * File inclusion via do 'foo.pl';
    * More file tests, including -t to see if, for instance, stdin is a terminal. File tests now behave in a more correct manner. You can do file tests on filehandles as well as filenames. The special filetests -T and -B test a file to see if it's text or binary.
    * An eof can now be used on each file of the <> input for such purposes as resetting the line numbers or appending to each file of an inplace edit.
    * Assignments can now function as lvalues, so you can say things like ($HOST = $host) =~ tr/a-z/A-Z/; ($obj = $src) =~ s/\.c$/.o/;
    * You can now do certain file operations with a variable which holds the name of a filehandle, e.g. open(++$incl,$includefilename); $foo = <$incl>;
    * Warnings are now available (with -w) on use of uninitialized variables and on identifiers that are mentioned only once, and on reference to various undefined things.
    * There is now a wait operator.
    * There is now a sort operator.
    * The manual is now not lying when it says that perl is generally faster than sed. I hope.

36 years agoperl 1.0 patch 14: a2p incorrectly translates 'for (a in b)' construct.
Jeff Siegal [Mon, 1 Feb 1988 22:56:10 +0000]
perl 1.0 patch 14: a2p incorrectly translates 'for (a in b)' construct.

The code a2p creates for the 'for (a in b)' construct ends
up assigning the wrong value to the key variable.

36 years agoperl 1.0 patch 13: fix for faulty patch 12, plus random portability glitches
Kriton Kyrimis [Mon, 1 Feb 1988 22:28:33 +0000]
perl 1.0 patch 13: fix for faulty patch 12, plus random portability glitches

I botched patch #12, so that split(' ') only works on the first
line of input due to unintended interference by the optimization
that was added at the same time.  Yes, I tested it, but only on
one line of input.  *Sigh*

Some glitches have turned up on some of the rusty pig iron out there,
so here are some unglitchifications.

36 years agoperl 1.0 patch 12: scripts made by a2p doen't handle leading white space right on...
Kriton Kyrimis [Mon, 1 Feb 1988 04:35:21 +0000]
perl 1.0 patch 12: scripts made by a2p doen't handle leading white space right on input

Awk ignores leading whitespace on split.  Perl by default does not.
The a2p translator couldn't handle this.  The fix is partly to a2p
and partly to perl.  Perl now has a way to specify to split to
ignore leading white space as awk does.  A2p now takes advantage of
that.

I also threw in an optimization that let's runtime patterns
compile just once if they are known to be constant, so that
split(' ') doesn't compile the pattern every time.

36 years agoperl 1.0 patch 11: documentation upgrade
Mark Biggar [Sun, 31 Jan 1988 20:00:34 +0000]
perl 1.0 patch 11: documentation upgrade

I documented the new eval operator for patch 8 but my automatic
patch generator overlooked it for some reason.

Here's the documentation for the eval operator, along with some
other documentation changes suggested by Mark.

36 years agoperl 1.0 patch 10: if your libc is in a strange place, Configure blows up
Peter E. Yee [Fri, 29 Jan 1988 20:22:10 +0000]
perl 1.0 patch 10: if your libc is in a strange place, Configure blows up

There's a line in Configure that says libc=ans which should say
libc=$ans.  This only shows up if libc.a isn't in /lib.

36 years agoperl 1.0 patch 9: 3 portability problems
Marnix (ain't unix!) A. van Ammers [Fri, 29 Jan 1988 19:58:36 +0000]
perl 1.0 patch 9: 3 portability problems

There's a #define YYDEBUG; in perl.h that ought to be
#define YYDEBUG 1.  Interesting that it works the former way on
any systems at all.

Patch 2 was defective and introduced a couple of lines with missing
right parens.  Learn something old every day...

Some awks can't handle
awk '$6 != "" {print substr($6,2,100)}' </tmp/Cppsym2$$ ;;
if field 6 doesn't exist.  Changed conditional to NF > 5.

There was also a problem that I fixed in metaconfig that involved
Configure grepping .SH files out of MANIFEST when the .SH was only
in the commentary.  This doesn't affect perl's Configure because
there aren't any comments containing .SH in the MANIFEST file.
But that's the nice thing about metaconfig--you generate a new
Configure script and also get the changes you don't need (yet).

36 years agoperl 1.0 patch 8: perl needed an eval operator and a symbolic debugger
Larry Wall [Wed, 27 Jan 1988 22:18:25 +0000]
perl 1.0 patch 8: perl needed an eval operator and a symbolic debugger

I didn't add an eval operator to the original perl because
I hadn't thought of any good uses for it.  Recently I thought
of some.  Along with creating the eval operator, this patch
introduces a symbolic debugger for perl scripts, which makes
use of eval to interpret some debugging commands.  Having eval
also lets me emulate awk's FOO=bar command line behavior with
a line such as the one a2p now inserts at the beginning of
translated scripts.

36 years agoperl 1.0 patch 7: use of included malloc.c should be optional
Arnold D. Robbins [Tue, 26 Jan 1988 01:16:41 +0000]
perl 1.0 patch 7: use of included malloc.c should be optional

The version of malloc.c that comes with perl was not really intended
to be used everywhere--it was included mostly for debugging purposes.
It's a nice little package, however, so I'm making it optional (via
Configure) as to whether you want it or not.

36 years agoperl 1.0 patch 6: printf doesn't finish processing format string when out of args.
Andrew Burt [Mon, 25 Jan 1988 23:31:23 +0000]
perl 1.0 patch 6: printf doesn't finish processing format string when out of args.

printf "%% %d %%", 1;  produces "% 1 %%", which is counterintuitive.

36 years agoperl 1.0 patch 5: a2p didn't make use of the config.h generated by Configure
Arnold D. Robbins [Mon, 25 Jan 1988 20:53:22 +0000]
perl 1.0 patch 5: a2p didn't make use of the config.h generated by Configure

The a2p program used index() and bcopy(), both of do not exist
everywhere.  Since Configure was already figuring out about those
functions, it is fairly trivial to get a2p to make use of the info.

36 years agoperl 1.0 patch 4: make depend doesn't work if . isn't in your PATH
Paul Eggert [Mon, 25 Jan 1988 19:48:31 +0000]
perl 1.0 patch 4: make depend doesn't work if . isn't in your PATH

make depend doesn't work if . isn't in your PATH.

36 years agoperl 1.0 patch 3: Patch 2 was incomplete
Larry Wall [Sat, 23 Jan 1988 15:23:55 +0000]
perl 1.0 patch 3: Patch 2 was incomplete

I left one file out of patch 2.  This is perhaps forgivable since
it is a file that is produced automatically by metaconfig along
with Configure.

36 years agoperl 1.0 patch 2: Various portability fixes.
Andrew Burt [Sat, 23 Jan 1988 14:57:57 +0000]
perl 1.0 patch 2: Various portability fixes.

Some things didn't work right on System V and Pyramids.

36 years agoperl 1.0 patch 1: Portability bugs and one possible SIGSEGV
Dan Faigin, Doug Landauer [Thu, 21 Jan 1988 09:21:04 +0000]
perl 1.0 patch 1: Portability bugs and one possible SIGSEGV

On some systems the Configure script and C compilations get
warning messages that may scare some folks unnecessarily.

Also, use of the "redo" command if debugging is compiled in
overflows a stack on which the trace context is kept.

36 years agoa "replacement" for awk and sed
Larry Wall [Fri, 18 Dec 1987 00:00:00 +0000]
a "replacement" for awk and sed

[  Perl is kind of designed to make awk and sed semi-obsolete.  This posting
   will include the first 10 patches after the main source.  The following
   description is lifted from Larry's manpage. --r$  ]

   Perl is a interpreted language optimized for scanning arbitrary text
   files, extracting information from those text files, and printing
   reports based on that information.  It's also a good language for many
   system management tasks.  The language is intended to be practical
   (easy to use, efficient, complete) rather than beautiful (tiny,
   elegant, minimal).  It combines (in the author's opinion, anyway) some
   of the best features of C, sed, awk, and sh, so people familiar with
   those languages should have little difficulty with it.  (Language
   historians will also note some vestiges of csh, Pascal, and even
   BASIC-PLUS.) Expression syntax corresponds quite closely to C
   expression syntax.  If you have a problem that would ordinarily use sed
   or awk or sh, but it exceeds their capabilities or must run a little
   faster, and you don't want to write the silly thing in C, then perl may
   be for you.  There are also translators to turn your sed and awk
   scripts into perl scripts.