perl 3.0 patch #2 (combined patch)
authorLarry Wall <lwall@jpl-devvax.jpl.nasa.gov>
Fri, 10 Nov 1989 16:10:36 +0000 (16:10 +0000)
committerLarry Wall <lwall@jpl-devvax.jpl.nasa.gov>
Fri, 10 Nov 1989 16:10:36 +0000 (16:10 +0000)
commit91407755d9b894ac1239c4fafe586e52138db38d
treeb03123d2811be49b7c5b935c0107c99ac6fa63c2
parent03a14243eca2d4d041778dac4abcfa3a19c06a56
perl 3.0 patch #2 (combined patch)

The metaconfig problem with pw_* fields has been fixed.

When you specify extra libraries to link in, Configure now
uses those libraries as well as libc to look for the functions
that are available.  From the ccflags you give it now derives
the corresponding flags for the C preprocessor.  And it has
better support for the Gnu C preprocessor.

Configure now detects USGness by the behavior of the tr program.
If USGness isn't found, then SIGTSTP determines BSDness.

The define of DEBUGGING has been taken out of perl.h and a2p.h.
If you want debugging you have to add -DDEBUGGING in a cc flag.
If you give an optimizer flag of -g, you get DEBUGGING as a
default.

Machines like the Cray have longs longer than 4 bytes.  There
is now support for that.

Some machines have csh in other places than /bin.  Configure
now figures out where it is.

Configure now supports Wollongong sockets and knows about
/usr/netinclude and /usr/lib/libnet.a.

Configure now gets sig names directly from signal.h if possible,
and only if that fails does it try to use kill -l.

The $sockethdr variable has been incorporated into $ccflags

Non-BSD machines required two ^D's to exit

while (<>) { ... }

This has been fixed, I believe, though I can't test it here.

It's now possible to compile perl without the DEBUGGING code.
It runs about 10% faster when you take the code out.

Configure now discovers if <sys/time.h> includes <time.h>, or
whether perl must include it itself.

Configure now finds the wait4() routine if available.

'-' x 26 made warnings about undefined value because of a bug
in evalstatic().  (Non-static 'x' didn't have the problem.)

A local list consisting of nothing but an array didn't work
right.  Now it does.

A printf %c omitted the format string between the preceeding % field
and the %c.  Code to printf %D, %X and %O was misplaced.

Some machines complain about printing signed values with
unsigned format specifiers like %x.  The unsigned specifiers
now have a separate cast from the signed specifiers like %d.

The various file modes were not orthogonal.  Now you can use
any of:
< > >> +< +> +>> <& >& >>& +<& +>& +>>&

Perl can now detect when a parent process passes in a socket so
that you can write reasonable inetd servers.

File descriptors above 2 are now closed on exec, either by using
the fcntl(), or if unavailable, brute force closing in a loop.

The return values of getsockopt(), getsockname() and getpeername()
were always undefined.

There were several places where a warn("shutdown") had to be
changed to some other function name.

The C routine gethostbyname() was misdeclared as gethostbynam().

telldir() is sometimes a macro, so we can't declare its return
value if it's defined.

Components of a slice corresponding to non-existent index elements
are now undefined rather than just null.

The mkdir and rmdir function will call the mkdir and rmdir
programs if the corresponding system calls aren't available.
The name of the directory was not quoted properly however.
Also, some attempt is now made to translate the odd messages
that some mkdirs and rmdir return into reasonable error codes.
As a final check for mkdir programs that return NO useful status,
a stat is done following the mkdir or rmdir to make sure the
directory is really there or gone.

The fileno, seekdir, rewinddir and closedir functions now specifically
disallow defaults and return undef.  Previously they would just crash
perl.

CX/UX needs to set the key each time when iterating over associative
arrays due to a non-standard dbm_nextkey() function.

The lib/getopts.pl routine needed to shift @ARGV explicitly in
several spots.

The malloc pointer corruption check was made more portable by just
checking for alignment errors.  It also is removed if DEBUGGING
is not enabled.

The include of <netinet/in.h> needed to be moved down below the
include of <sys/types.h> for some machines.

Not all machines declare the yydebug variable as the same type.
The reference to yydebug was moved to perl.y where it doesn't care.

I documented that a space must separate any word and a subsequent
single-quoted string because of package name prefixes.

Some long lines were broken for nroff, but not for troff.

One example of unshift in the manual had its arguments backwards.

I clarified that operation of ^ and $ on multiline strings when $*
is false is somewhat inconsistent.

People were forced to say !($foo++) when !$foo++ should be legal.

None of the unary operators correctly handled their default
arguments because of a screw-up in the parser actions.

/[\000]/ never matched a null due to some left over non-binary-ness
of perl 2.0.

/\b$foo/ gave up too early in trying to match at the end of a string.

sys_nerr was being used as the maximum error message number, when
in fact it's the maximum+1.

The identifier "uchar" is a typedef on Crays, so the variable of that
name was changed to "unchar".

The TEST program tried to run patch reject files.  The reject files
are now rejected by TEST.

One test failed on picky systems because it referred to a filename
longer than 14 chars.

The op.split test assumed that the perl -D switch was available,
when in fact it's only available if perl was compiled with DEBUGGING.

Some header file somewhere defined macro CLINE, which conflicted
with toke.c's CLINE macro.

In s2p, + within patterns needed backslashing because + isn't a
metacharacter for sed.  s2p was also printing out some debugging
info to the output file.

In a2p, an awk script with no line actions didn't make a main
loop, but it needs one to keep the awk semantics.
Configure
Makefile.SH
patchlevel.h