| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is my patch patch.1d for perl5.001. A complete description is
given below, but here are the basic changes.
1. Linux: more tweaks so dynamic loading works under ELF
or (maybe) under dld. There are so many different dld versions
and so many different tool sets, it's hard to be more specific.
2. perl -e '$v=1e19+0' no longer dumps core on Intel x86
processors.
3. pod stuff:
a. Wrapped pod2* translators in a 'SH' wrapper so that they
have the proper path to perl at the top.
b. Fixed pod/ Makefile to call the pod2html translator
correctly. (Why do pod2man and pod2html work differently?)
c. Include latest (Feb 2, 1995) version of pod2html, fresh from
ftp.metronet.com.
4. MakeMaker 4.093.
5. GIMME and installperl patches from Tim Bunce.
6. Miscellaneous hint file updates.
Configure
Allow ' ' to mean 'none' in a few more places. This provides
a way for hint files to set something to an empty value and to
ensure that the empty value will be maintained when config.sh is
reused.
Fix silly ld typo that prevented hint file from actually setting
$ld.
MANIFEST
Now has pod/pod2*.SH.
Makefile.SH
Remove old libperl.a instead of blindly adding to it. Failure to
do this causes a problem if you originally used perl's malloc but
later changed your mind. The old malloc.o would still be in
libperl.a
ext/DynaLoader/dl_dlopen.xs
Use strerror(errno) instead of dlerror for NetBSD.
handy.h
Clarify & rework HAS_BOOL comments and code. No functionality is
changed, but I hope this is easier to follow.
hints/freebsd.sh
hints/isc.sh
hints/linux.sh
hints/netbsd.sh
hints/next_3_0.sh
hints/next_3_2.sh
hints/sco_3.sh
Miscellaneous updates. See the individual comments in the patches.
installperl
Run ranlib on installed .a libraries.
unlink() old versions of files before installing new ones, in
case the old ones are are write-protected.
lib/ExtUtils/MakeMaker.pm
Updated to 4.092 by Andreas Koenig. This features better
selection of shared library versions and shorter command lines for
static linking of new extensions. It is also more robust against
broken csh on Linux. (There's still a glob in the library
selection loop, however.)
I further updated it to 4.093 because I didn't like the
distclean target :-). It's just a sloppy quick fix, but that's
all I have time for now. I've also worked on the library version
selection stuff and the $(CC) command stuff a little more.
lib/TieHash.pm
Overdue removal of ambiguous ${pack} construction.
perl.h
New U_V macro to cast to the UV type (usually unsigned long).
pod/Makefile
Updated.
pod/pod2html.SH
Updated.
Converted to 'SH' wrapper so correct #!/path/to/perl gets used.
pod/pod2latex.SH
pod/pod2man.SH
Converted to 'SH' wrapper so correct #!/path/to/perl gets used.
pp_hot.c
GIMME patch from Tim Bunce.
pp_sys.c
Allow use of F_FREESP fcntl() directive to truncate files.
If HAS_MKDIR is not defined, the stat() call to check the result
of the system "mkdir" call was failing because the filename
pointer no longer pointed to the right location.
sv.c
Protect some (UV) casts by the new U_V() macro.
util.c
New cast_uv() function to support the U_V() macro, if needed.
cast_iv() and cast_uv() no longer assume 32-bit longs.
The various cast_() functions have also been simplified.
|
|
|
|
| |
[See the Changes file for a list of changes]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch addresses a few more Configure and build nits. Full
details are given below, but the main hightligths are (slightly)
better support for nested extensions and DLD and AIX MakeMaker fixes.
Configure
Detect MachTen. Thanks to Mark Pease <peasem@primenet.com>.
Delete some tabs that caused a MachTen /bin/sh core dump!
Detect extensions nested 1 level deep, e.g. Devel/DProf/DProf.xs
MANIFEST
MANIFEST.new
Include new hints/machten.sh hint file.
Makefile.SH
Document why we use ./makedir instead of mkdir.
U/Extensions.U
Detect extensions nested 1 level deep, e.g. Devel/DProf/DProf.xs
U/dist3_051.pat
Include MachTen patches.
configpm
Convert nested extension names from filesytem-dependent Devel/DProf
to perl5's internal naming scheme Devel::DProf.
doio.c
A dup-related buglet fix from Hallvard B. Furuseth
<h.b.furuseth@usit.uio.no>.
ext/DB_File/DB_File.pm
ext/DynaLoader/DynaLoader.pm
ext/Fcntl/Fcntl.pm
ext/GDBM_File/GDBM_File.pm
ext/POSIX/POSIX.pm
ext/Socket/Socket.pm
Throw a qw() around @ISA elements to show "good style".
hints/machten.sh
new file.
lib/ExtUtils/MakeMaker.pm
Bump version number to 4.086.
Fix AIX buglet -- needed to specify NAME.
Linux/DLD/gcc-2.6.2: We no longer load .sa libraries (except
libm.sa, which is apparently still o.k.
util.c
Another dup-related buglet fix.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is my patch patch.0m for perl5.000.
This patch fixes all remaining problems that I am aware of, and for
which I have a solution. It also updates some hint files and
documentation.
Here's what's new:
Configure
Protect against spaces in uname -m output (unicos).
Look in <stdlib.h> for malloctype and freetype.
Check if user has void free() or int free().
Look in linux/signal.h for signal names.
MANIFEST
MANIFEST.new
Two new hint files: cxux.sh and PowerUNIX.sh.
Sorted.
README
Indicate what gets installed and where it usually goes.
Thanks to Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
for suggesting this.
U/Myinit.U
Update extliblist comment.
U/dist3_051.pat
This file contains patches to dist 3 (PL 51) that I used to generate
Configure for perl.
U/mallocsrc.U
Look in <stdlib.h> for malloctype and freetype.
Check if user has void free() or int free().
config_h.SH
config.H
Add Free_t to handle void free() vs. int free().
ext/DynaLoader/README
Updated comment.
ext/POSIX/POSIX.pm
creat() has 2 arguments, not 3 (thanks, Paul).
ext/POSIX/POSIX.xs
Fix return type of lseek.
ext/SDBM_File/sdbm/sdbm.h
Add I_STDLIB guard on #include <stdlib.h>
ext/util/extliblist
Add note indicating this is obsolete. Don't remove it because
people might be using it for their own private extensions.
hints/PowerUNIX.sh
hints/cxux.sh
New files. Written by Tom.Horsley@mail.hcsc.com
hints/linux.sh
Simplified.
lib/ExtUtils/MakeMaker.pm
Typo fixed, only affected aix?
malloc.c
Allow for possible int free().
perl.h
pp_sys.c
util.c
If the user is not using vfork, move the #define vfork fork
util after various #include files. Since vfork() and fork() might
have different prototypes, the #define could cause a conflict in
system header files. (Reported for 386bsd.)
Makefile.SH
make realclean will remove h2xs and makeaperl (but leave behind
the .SH versions, of course).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Here's what's new:
Configure
Generated by metaconfig PL 51.
Correctly set ./mips on a MIPS system.
Improved (we hope) handling of $archname.
MANIFEST
MANIFEST.new
Made .SH files out of h2xs and makeaperl so that they get the
correct path-to-perl at the top.
Makefile.SH
Propagate $(perllib) to extensions.
U/dist3_051.patches
Two patches to apply on top of metaconfig PL 51. I've sent
them off for inclusion in the next metaconfig update.
config_h.SH
config.H
Regenerated. Only the order of elements has changed.
ext/DB_File/Makefile.PL
ext/GDBM_File/Makefile.PL
ext/NDBM_File/Makefile.PL
Add -L/usr/local/lib to LIBS variable.
ext/POSIX/POSIX.xs
Place #ifdef around FD_CLOEXEC (needed for Apollo).
ext/SDBM_File/sdbm/Makefile.PL
Simplified, thanks to MakeMaker enhancements.
ext/util/make_ext
Pass through $(perllib) argument for cflags.
h2xs.SH
Changed from h2xs to h2xs.SH. Now finds correct path to perl.
hints/next_3_2.sh
Updated for hppa.
hints/solaris_2.sh
Remove potentially problematic -lmalloc from $libswanted.
hints/unicos.sh
Look in /usr/include/rpcsvc for dbm.h.
installperl
Install h2xs.
lib/Cwd.pm
Use 'my' variable to avoid clobbering $_.
lib/ExtUtils/MakeMaker.pm
Upgraded from 4.06 to 4.085.
Lots of documentation improvements.
EXE_FILES to refer to an array of executable files to install.
Reduce chatter during build process.
Don't count a useful -L/path option as a successful search for
a particular library.
Cleanup handling of aix external symbols.
Create/update perllocal.pod to indicate what we've done.
makeaperl.SH
Changed from makeaperl to makeaperl.SH. Now finds correct path
to perl.
x2p/util.c
Delete unused setenv() and envix() functions.
x2p/util.h
Delete unused setenv() and envix() prototypes.
vms/config.vms
Define I_SYS_STAT and I_SYS_TYPES.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
problems reported even after patches 0a through 0j
MakeMaker 4.06 allows you to build extensions away from the source
tree with either static or dynamic loading.
In a rare act of prescience, I've also fixed some un-reported bugs.
Specifically, there were several places where Configure said you could
specify things using ~name notation, but, in fact, you couldn't.
In detail, here's what's included:
Configure
Check I_SYS_TYPES for x2p/a2p.h
Improve and generalize $osvers detection for DEC Alpha
(now will work even for osvers > 3.)
No longer override hint-file setting of $archname.
Don't tell users ~name is ok for Dynamic loading file. It's not.
MANIFEST
MANIFEST.new
Updated.
Makefile.SH
Some trailing ' ' removed from lines.
New target lib/ExtUtils/Miniperl.pm built. This stashes away
miniperlmain.c in the library so new static extensions can be
built away from the source tree.
Minor cleanup.
U/Oldconfig.pat.2
This is a patch to be applied against dist-PL 50 to upgrade
the DEC OSF/1 version detection.
U/archlib.U
Preserve previous value for $archname. Otherwise this is
identical to the unit in dist-PL 50.
U/dlsrc.U
Users may not use ~name notation to find the dynamic loading
module. (Back in early alpha days they could, but that hasn't
worked since the DynaLoader module was introduced.
config.H
Updated.
config_h.SH
Updated.
hints/dec_osf.sh
Updated. Simplified. Don't use ld -no_archive (at least as
the default). It only worked because some versions *ignored* it.
hints/mpeix.sh
Add a few comments. I should have added more.
hints/next_3_0.sh
New hint file from Kevin White <klwhite@magnus.acs.ohio-state.edu>
hints/ultrix_4.sh
Separate out flags not appropriate for gcc.
installperl
Install sperl.o.
lib/ExtUtils/MakeMaker.pm
Upgraded from 4.03 to 4.06. Many improvements. Now possible
to build and install new extensions outside the source tree,
for both static and dynamic loading.
lib/File/Path.pm
New. Creates or removes a series of directories
makeaperl
New utility to create a new perl binary from static extensions
minimod.PL
New. minimod.PL writes the contents of miniperlmain.c into the
module ExtUtils::Miniperl for later perusal (when the perl
source is deleted)
perl.c
ARCHLIB and PRIVLIB changed to ARCHLIB_EXP and PRIVLIB_EXP,
since perl is not prepared to deal with ~name expansion. The
_EXP variables are pre-expanded by Configure.
proto.h
NeXt 3.0 couldn't handle the #ifdef __attribute line.
It said 'illegal #ifdef'.
vms/config.vms
s/ARCHLIB/ARCHLIB_EXP/;
s/PRIVLIB/PRIVLIB_EXP/;
Add in I_SYS_STAT and I_SYS_TYPES, since the source now looks
for them.
vms/ext/MM_VMS.pm
New file.
x2p/a2p.h
Include <sys/types.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
after patches 0a through 0i
Specifically, here's what's included:
Configure
Regenerated with metaconfig patchlevel 50. This changed
a variety of things, mostly related to selecting and changing
the installation prefix.
Handle csh, sed, and byacc no matter what the setting of
d_portable. (This was causing glob problems in patch.0i).
Set d_portable to default to 'y'. It doesn't matter anyway,
but gives people a warm fuzzy feeling.
Remove useless d_group and d_passwd tests.
Add check for <sys/stat.h>.
Improve & generalize AIX version detection.
Consider /opt/man/man1 as a possible place to install man pages.
Be a little more robust about OS version changes when deciding
if the output of uname -a has really changed.
MANIFEST
MANIFEST.new
Added hints/mpeix.sh.
README
Tell users the Configure defaults are probably right.
Makefile.SH
Better detection of whether user has byacc.
Use $(MAKE) instead of make.
U/Loc_sed.U
Works again with d_portable='define'.
U/Myinit.U
Set d_portable=define as default.
U/d_byacc.U
Detect whether user has byacc even if d_portable=define.
U/d_csh.U
Works again with d_portable='define'.
U/d_group.U
Empty file to avoid useless metaconfig test.
U/d_passwd.U
Empty file to avoid useless metaconfig test.
U/dist.patch
This file contains two minor updates to dist3 PL50 that were used
to generage Configure.
U/i_sysstat.U
New test. See if sys/stat.h is available.
config.H
Updated.
config_h.SH
Updated to metaconfig patchlevel 50.
ext/NDBM_File/Makefile.PL
ext/ODBM_File/Makefile.PL
Add -lucb for SVR4 systems.
handy.h
Protect agains g++-2.6.3, which predefines bool. g++ can be
used to compile an extension, but not perl itself. Still, the
extension will #include "perl.h", which eventually gets
"handy.h", which #define's bool. If this happens to you, add
-DHAS_BOOL to your ccflags in your extension, or else ensure that
_G_config.h is #include'd before perl.h. (_G_config.h will define
_G_HAVE_BOOL, if indeed your version of g++ has bool.)
hints/aix.sh
Updated. Handles AIX 3.2.x and 4.1. Comments included!
hints/hpux_9.sh
Updated.
hints/irix_4.sh
Updated. Includes comments for IRIX 4.0.4
hints/linux.sh
Updated. Beginnings of ELF support added, but completely
untested.
hints/mpeix.sh
New hint file.
hints/solaris_2.sh
Useless ccflags="$ccflags" line removed.
hints/svr4.sh
Updated.
installperl
Doesn't use Config anymore (it already reads config.sh
directly. That's probably backwards, but, oh well.
Install perl.exp for AIX.
lib/ExtUtils/MakeMaker.pm
Upgraded from 4.01 to 4.03.
makedepend.SH
Use $MAKE instead of plain make.
Index: op.c
Remove overlapping strcpy().
perl.h
Add test for <sys/stat.h>.
Delete unused VOIDSIG stuff.
Delete unused typedef struct lstring Lstring;
perl_exp.SH
Add safexxxx calls.
pp_sys.c
Delete wayward break in HAS_ALARM section.
proto.h
Change true and false (!) in function prototypes to please
g++-2.6.3, which has true and false built in. (See notes for
handy.h.)
Index: unixish.h
Long-overdue housekeeping.
HAS_GROUP and HAS_PASSWD are always defined.
util.c
Yet another (char*) cast for bcmp.
vms/config.vms
Changed comments to match unixish.h.
writemain.SH
Now correctly handles nested static extensions. Recent
MakeMakers have moved where they get built.
x2p/a2p.h
More definitions that will doubtless cause trouble somewhere
else.
x2p/a2py.c
x2p/walk.c
Remove unprotected char *strchr();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
for Configure]
This patch incorporates various portability fixes and uses the latest
metaconfig to generate Configure (and config_h.SH).
It would take a long time to summarize all that I've changed. I
haven't included many code changes because I'm trying *not* to
duplicate bug fixes Larry may already have applied.
Here's an older description I prepared that's still mostly accurate:
I've also included a few portability fixes in the main source, but
these are certainly not a complete set of everything that's been
reported.
Don't be put off by the size of the patch. Mostly, it's just
rearrangement of the parts in Configure and some cosmetic changes.
Since gcc often supports long long, I had started to add quad support
to Configure. Since SunOS 4.1.3 defines a conflicting "quad"
structure, I changed the name from 'quad' to Quad_t, consistent with
other Configure "types." I also changed "QUAD" to "HAS_QUAD".
However, it turns out it's pretty hard to actually *use* Quad_t.
Neither system I have access to can sprintf() a "long long", nor can
they carry one around in an IV, unless I make IV "long long", which I
didn't want to force generally. Thus I wonder whether any but a
precious few could actually use Quad_t, and dropped the tests from
Configure. I left in the s/quad/Quad_t/ and s/QUAD/HAS_QUAD/ stuff in
case someone else wants to pick it up, and also because I was too lazy
to take it back out :-).
Some highlights:
Configure
Several new options. Use Configure -h to learn more. Also,
read the directions Configure prints. :-)
Spaces now allowed in -D command line options.
New -O option that overrides config.sh.
You can start interactively and then change that to accepting
all the defaults by specifying &-d at any Configure prompt. This
is useful if you have to re-run Configure to only change a few
settings.
Signal type set correctly for the cast{i32,neg} tests.
archname detection improved a bit
guard against ksh users who have set -u
Oldconfig.U cleaned up and regularized a bit more.
Guard against hint files using (and over-writing) $tmp.
Command line options now are processed after metaconfig INIT
lines. Thus things like Configure -Uuseposix should work now.
Various miscellaneous clean-ups.
better use/detection of tr.
i_db.U now checks for hash and prefix type (I think!) I can't
test it here.
i_?db*.U now all check for an associated function before deciding
to include or not the header.
MANIFEST
MANIFEST.new
Sorted & updated.
Makefile.SH
Some shells/makes bombed out on test -d lib/auto || mkdir lib/auto
Use makedir instead.
README
Some additional notes that people won't read :-).
cflags.SH
Now calls $startsh. Weird things were happening on Intergraph,
and this might be related.
config.H
Updated.
config_h.SH
Regenerated.
deb.c
Varargs dependencies on STANDARD_C replaced by I_STDARG.
doop.c
quad stuff.
ext/DB_File/DB_File.xs
Use the new DB_Hash_t and DB_Prefix_t symbols.
ext/SDBM_File/sdbm/sdbm.h
Fix #defines to be more robust.
mg.c
Replace VOIDSIG by metaconfig's Signal_t.
opcode.h
opcode.pl
semop only takes 2 arguments, not 3.
perl.c
Better guard on getenv() prototype. A hint file can use this, if
necessary. Me, I think some compilers are just too picky.
perl.h
The (very) beginnings of some Quad support. See above.
Remove the very troublesome sprintf() prototype. Since we don't
_use_ the return value anyway (since it's not portable) this
should be o.k. The problem was that some systems CAN_PROTOTYPE
but include char *sprintf(); in <stdio.h>. That's incompatible
with the version we used to have in perl.h. Most people have
a prototype for sprintf() in <stdio.h>. Those that don't probably
can get by without it anyway.
Protect the timesbuf by the specific HAS_TIMES test. Some older
gcc-2.something/Solaris 2.something installations apparently don't
have times.
pp.c
More quad stuff.
pp_ctl.c
s/STANDARD_C/I_STDARG/ for varargs stuff.
pp_sys.c
use Signal_t.
proto.h
Update to match new metaconfig names.
util.c
s/STANDARD_C/I_STDARG/ for varargs stuff.
comment out <unistd.h>. A pause prototype was causing problems on
some systems.
vms/config.vms
Changed to use Signal_t.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[Actually, that's a lie. This is just MakeMaker 3.6. I've just
usurped the letter 'a' to fit it into my patch sequence.]
Andy Dougherty doughera@lafcol.lafayette.edu
Dept. of Physics
Lafayette College, Easton PA
this patch includes:
- My recently posted 'Very small patches to AutoSplit.pm and Cwd.pm'
(with no changes).
- A previous small patch to DynaLoader .bs handling with one addition:
! if (-f $bs) {
! if (-s $bs) { # only read file if it's not empty
- A recently posted patch to hints/aix.sh (with cosmetic changes).
Hopefully no further changes to MakeMaker will be needed before perl5.001.
If any changes are required I intend that they will be release as patches
to be applied over this one. This is the last MakeMaker jumbo patch for
perl5.000.
Patch and enjoy.
Regards,
Tim Bunce.
p.s. I'll be around until about 4pm GMT tomorrow (Tuesday), after that
I'm off for Christmas. This has been a great year for me. I have very
much enjoyed working with the perl5-porters and I wish you all a
wonderful and merry Christmas and a very happy New Year.
|
|
|
|
|
|
|
|
|
|
|
| |
[editor's note: this commit combines approximate 4 months of furious
releases of Andy Dougherty and Larry Wall - see pod/perlhist.pod for
details. Andy notes that;
Alas neither my "Irwin AccuTrack" nor my DC 600A quarter-inch cartridge
backup tapes from that era seem to be readable anymore. I guess 13 years
exceeds the shelf life for that backup technology :-(.
]
|
|
|
|
| |
[editor's note: the sparc executables have not been included,
and emacs backup files have been removed]
|
|
|
|
|
| |
[the last one taken from the September '94 InfoMagic CD; a similar
style of cleanup as the previous commits was performed]
|
|
|
|
|
|
|
| |
[editor's note: the sparc executables have not been included, and
emacs backup files have been removed. This was reconstructed from a
tarball found on the September 1994 InfoMagic CD; the date of this is
approximate]
|
|
|
|
| |
[editor's note: from history.perl.org. The sparc executables
originally included in the distribution are not in this commit.]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Subject: bad interaction between backslash and hyphen in tr///
Among other things, tr/\040-\126/ / was not doing a character range,
due to a earlier botched fix to make \- work right.
Subject: Configure test for presence of nroff was wrong
If Loc doesn't find nroff, it sets $nroff to 'nroff'. The man
page test was tesing against the null string.
Subject: installperl error message printed file mode in decimal, not octal
A real, honest-to-goodnes nit.
Subject: fixed up some filenames in MANIFEST
Erroneously contained "pstruct", omitted hints/isc_3_2_3.sh.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
See patch #11.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
So far, 4.0 is still a beta test version. For the last production
version, look in pub/perl.3.0/kits@44.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Forget the description, it's too late at night...
|
|
|
|
| |
See patch #29.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
You now have the capability of linking C subroutines into a
special version of perl. See the files in usub/ for an example.
There is now an operator to include library modules with duplicate
suppression and error checking, called "require". (makelib has been
renamed to h2ph, and Tom Christiansen's h2pl stuff has been included
too. Perl .h files are now called .ph files to avoid confusion.)
It's now possible to truncate files if your machines supports any
of ftruncate(fd, size), chsize(fd, size) or fcntl(fd, F_FREESP, size).
Added -c switch to do compilation only, that is, to suppress
execution. Useful in combination with -D1024.
There's now a -x switch to extract a script from the input stream
so you can pipe articles containing Perl scripts directly into perl.
Previously, the only places you could use bare words in Perl were as
filehandles or labels. You can now put bare words (identifiers)
anywhere. If they have no interpretation as filehandles or labels,
they will be treated as if they had single quotes around them.
This works together nicely with the fact that you can use a
symbol name indirectly as a filehandle or to assign to *name.
It basically means you can write subroutines and pass filehandles
without quoting or *-ing them. (It also means the grammar is even
more ambiguous now--59 reduce/reduce conflicts!!! But it seems
to do the Right Thing.)
Added __LINE__ and __FILE__ tokens to let you interpolate the
current line number or filename, such as in a call to an error
routine, or to help you translate eval linenumbers to real
linenumbers.
Added __END__ token to let you mark the end of the program in
the input stream. (^D and ^Z are allowed synonyms.) Program text
and data can now both come from STDIN.
`command` in array context now returns array of lines. Previously
it would return a single element array holding all the lines.
An empty %array now returns 0 in scalar context so that you can
use it profitably in a conditional: &blurfl if %seen;
The include search path (@INC) now includes . explicity at the
end, so you can change it if you wish. Library routines now
have precedence by default.
Several pattern matching optimizations: I sped up /x+y/ patterns
greatly by not retrying on every x, and disabled backoff on
patterns anchored to the end like /\s+$/. This made /\s+$/ run
100 times faster on a string containing 70 spaces followed by an X.
Actual improvements will generally be less than that. I also
sped up {m,n} on simple items by making it a variant of *.
And /.*whatever/ is now optimizaed to /^.*whatever/ to avoid
retrying at every position in the event of failure. I fixed
character classes to allow backslashing hyphen, by popular
request.
In the past, $ in a pattern would sometimes match in the middle
of the string and sometimes not, if $* == 0. Now it will never
match except at the end of the string, or just before a terminating
newline. When $* == 1 behavior is as before.
In the README file, I've expanded on just how I think the GNU
General Public License applies to Perl and to things you might
want to do with Perl.
The interpreter used to set the global variable "line" to be
the current line number. Instead, it now sets a global pointer
to the current Perl statement, which is no more overhead, but
now we will have access to the file name and package name associated
with that statement, so that the debugger soon be upgraded to
allow debugging of evals and packages.
In the past, a conditional construct in an array context passed
the array context on to the conditional expression, causing
general consternation and confusion. Conditionals now always
supply a scalar context to the expression, and if that expression
turns out to be the one whose value is returned, the value is
coerced to an array value of one element.
The switch optimizer was confused by negative fractional values,
and truncating them the wrong direction.
Configure now checks for chsize, select and truncate functions, and
now asks if you want to put scripts into some separate directory
from your binaries. More and more people are establishing a common
directory across architectures for scripts, so this is getting
important.
It used to be that a numeric literal ended up being stored both
as a string and as a double. This could make for lots of wasted
storage if you said things like "$seen{$key} = 1;". So now
numeric literals are now stored only in floating point format,
which saves space, and generates at most one extra conversion per
literal over the life of the script.
The % operator had an off-by-one error if the left argument was
negative.
The pack and unpack functions have been upgraded. You
can now convert native float and double fields using f and d.
You can specify negative relative positions with X<n>, and absolute
positions in the record with @<n>. You can have a length of *
on the final field to indicate that it is to gobble all the rest
of the available fields. In unpack, if you precede a field
spec with %<n>, it does an n-bit checksum on it instead of the
value itself. (Thus "%16C*" will checksum just like the Sys V sum
program.) One totally wacked out evening I hacked a u format
in to pack and unpack uudecode-style strings.
A couple bugs were fixed in unpack--it couldn't unpack an A or a
format field in a scalar context, which is just supposed to
return the first field. The c and C formats were also calling
bcopy to copy each character. Yuck.
Machines without the setreuid() system call couldn't manipulate
$< and $> easily. Now, if you've got setuid(), you can say $< = $>
or $> = $< or even ($<, $>) = ($uid, $uid), as long as it's
something that can be done with setuid(). Similarly for setgid().
I've included various MSDOS and OS/2 patches that people have sent.
There's still more in the hopper...
An open on a pipe for output such as 'open(STDOUT,"|command")' left
STDOUT attached to the wrong file descriptor. This didn't matter
within Perl, but it made subprocesses expecting stdout to be on fd 1
rather irate.
The print command could fail to detect errors such as running out
room on the disk. Now it checks a little better.
Saying "print @foo" might only print out some of the elements
if there undefined elements in the middle of the array, due to
a reversed bit of logic in the print routine.
On machines with vfork the child process would allocate memory
in the parent without the parent knowing about it, or having any way
to free the memory so allocated. The parent now calls a cleanup
routine that knows whether that's what happened.
If the getsockname or getpeername functions returned a normal
Unix error, perl -w would report that you tried I/O on an
unopened socket, even though it was open.
MACH doesn't have seekdir or telldir. Who ever uses them anyway?
Under certain circumstances, an optimized pattern match could
pass a hint into the standard pattern matching routine which
the standard routine would then ignore. The next pattern match
after that would then get a "panic: hint in do_match" because the
hint didn't point into the current string of interest.
The $' variable returned a short string if it contained an
embedded null.
Two common split cases are now special-cased to avoid the regular
expression code. One is /\s+/ (and its cousin ' ', which also
trims leading whitespace). The other is /^/, which is very useful
for splitting a "here-is" quote into lines:
@lines = split(/^/, <<END);
Element 0
Element 1
Element 2
END
You couldn't split on a single case-insensitive letter because
the single character split optimization ignore the case folding
flag.
Sort now handles undefined strings right, and sorts lists
a little more efficiently because it weeds them out before
sorting so it doesn't have to check for them on every comparison.
The each() and keys() functions were returning garbage on null
keys in DBM files because the DBM iterator merely returns a pointer
into the buffer to a string that's not necessarily null terminated.
Internally, Perl keeps a null at the end of every string (though
allowing embedded nulls) and some routines make use of this
to avoid checking for the end of buffer on every comparison. So
this just needed to be treated as a special case.
The &, | and ^ operators will do bitwise operations on two strings,
but for some reason I hadn't implemented ~ to do a complement.
Using an associative array name with a % in dbmopen(%name...)
didn't work right, not because it didn't parse, but because the
dbm opening routine internally did the wrong thing with it.
You can now say dbmopen(name, 'filename', undef) to prevent it
from opening the dbm file if it doesn't exist.
The die operator simply exited if you didn't give an argument,
because that made sense before eval existed. But now it will be
equivalent to "die 'Died';".
Using the return function outside a subroutine returned a cryptic
message about not being able to pop a magical label off the stack.
It's now more informative.
On systems without the rename() system call, it's emulated with
unlink()/link()/unlink(), which could clobber a file if it
happened to unlink it before it linked it. Perl now checks to
make sure the source and destination filenames aren't in fact
the same directory entry.
The -s file test now returns size of file. Why not?
If you tried to write a general subroutine to open files, passing
in the filehandle as *filehandle, it didn't work because nobody
took responsibility to allocate the filehandle structure internally.
Now, passing *name to subroutine forces filehandle and array
creation on that symbol if they're already not created.
Reading input via <HANDLE> is now a little more efficient--it
does one less string copy.
The dumpvar.pl routine now fixes weird chars to be printable, and
allows you to specify a list of varables to display. The debugger
takes advantage of this. The debugger also now allows \ continuation
lines, and has an = command to let you make aliases easily. Line
numbers should now be correct even after lines containing only
a semicolon.
The action code for parsing split; with no arguments didn't
pass correct a corrent value of bufend to the scanpat it was
using to establish the /\s+/ pattern.
The $] variable returned the rcsid string and patchlevel. It still
returns that in a string context, but in a numeric context it
returns the version number (as in 4.0) + patchlevel / 1000.
So these patches are being applied to 3.018.
The variables $0, %ENV, @ARGV were retaining incorrect information
from the previous incarnation in dumped/undumped scripts.
The %ENV array is suppose to be global even inside packages, but
and off-by-one error kept it from being so.
The $| variable couldn't be set on a filehandle before the file
was opened. Now you can.
If errno == 0, the $! variable returned "Error 0" in a string
context, which is, unfortunately, a true string. It now returns ""
in string context if errno == 0, so you can use it reasonable in
a conditional without comparing it to 0: &cleanup if $!;
On some machines, conversion of a number to a string caused
a malloc string to be overrun by 1 character. More memory is
now allocated for such a string.
The tainting mechanism didn't work right on scripts that were setgid
but not setuid.
If you had reference to an array such as @name in a program, but
didn't invoke any of the usual array operations, the array never
got initialized.
The FPS compiler doesn't do default in a switch very well if the
value can be interpreted as a signed character. There's now a
#ifdef BADSWITCH for such machines.
Certain combinations of backslashed backslashes weren't correctly
parsed inside double-quoted strings.
"Here" strings caused warnings about uninitialized variables because
the string used internally to accumulate the lines wasn't initialized
according to the standards of the -w switch.
The a2p translator couldn't parse {foo = (bar == 123)} due to
a hangover from the old awk syntax. It also needed to put a
chop into a program if the program referenced NF so that the
field count would come out right when the split was done.
There was a missing semicolon when local($_) was emitted.
I also didn't realize that an explicity awk split on ' ' trims
leading whitespace just like the implicit split at the beginning
of the loop. The awk for..in loop has to be translated in one
of two ways in a2p, depending on whether the array was produced
by a split or by subscripting. If the array was a normal array,
a2p put out code that iterated over the array values rather than
the numeric indexes, which was wrong.
The s2p didn't translate \n correctly, stripping the backslash.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There is now support for compiling perl under the Microsoft C
compiler on MSDOS. Special thanks go to Diomidis Spinellis
<dds@cc.ic.ac.uk> for this. To compile under MSDOS, look at the
readme file in the msdos subdirectory.
As a part of this, six files will be renamed when you run
Configure. These are config.h.SH, perl.man.[1-4] and t/op.subst.
Suns (and perhaps other machines) can't cast negative floating
point numbers to unsigned ints reasonably. Configure now detects
this and takes appropriate action.
Configure looked for optional libraries but then didn't ever use
them, even if there was no config.sh value to override.
System V Release 4 provides us with yet another nm format for
Configure to parse. No doubt it's "better". Sigh.
MIPS CPUs running under Ultrix were getting configured for volatile
support, but they don't like volatile when applied to a type generated
by a typedef. Configure now tests for this.
I've added two new perl library routines: ctime.pl from
Waldemar Kebsch and Marion Hakanson, and syslog.pl from Tom
Christiansen and me.
In subroutines, non-terminal blocks should never have arrays
requested of them, even if the subroutine call's context is
looking for an array.
Formats didn't work inside eval. Now they do.
Any $foo++ that doesn't return a value is now optimized to ++$foo
since the latter doesn't require generation of a temporary to hold
the old value.
A self-referential printf pattern such as sprintf($s,...,$s,...)
would end up with a null as the first character of the next field.
On machines that don't support executing scripts in the kernel,
perl has to emulate that when an exec fails. In this case,
the do_exec() routine can lose arguments passed to the script.
A memory leakage in pattern matching triggered by use of $`, $& or $'
has been fixed.
A splice that pulls up the front of an array such as splice(@array,0,$n)
can cause a duplicate free error.
The grep operator blew up on undefined array values. It now handles
them reasonably, setting $_ to undef.
The .. operator in an array context is used to generate number
ranges. This has been generalized to allow any string ranges that
can be generated with the magical increment code of ++. So
you can say 'a' .. 'f', '000'..'999', etc.
The ioctl function didn't return non-zero values correctly.
Associative array slices from dbm files like @dbmvalues{'foo','bar'}
could use the same cache entry for multiple values, causing loss of
some of the values of the slice. Cache values are now not flushed
until the end of a statement.
The do FILE operator blew up when used inside an eval, due to trying
to free the eval code it was still executing.
If you did s/^prefix// on a string, and subsequently assigned a
value that didn't contain a string value to the string, you could
get a bad free error.
One of the taint checks blew up on undefined array elements, which
showed up only when taintperl was run.
The final semicolon in program is supposed to be optional now.
Unfortunately this wasn't true when -p or -n added extra code
around your code. Now it's true all the time.
A tail anchored pattern such as /foo$/ could cause grief if you
searched a string that was shorter than that.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The select operator didn't interpret bit vectors correctly on
non-little-endian machines such as Suns. Rather than bollux up
the rather straightforward interpretation of bit vectors, I made
the select operator rearrange the bytes as necessary. So it
is still true that vec($foo,0,1) refers to the first bit of the
first byte of string $foo, even on big-endian machines.
The send() socket operator didn't correctly allow you to specify
a TO argument even though this was documented. (The TO argument
is desirable for sending datagram packets.)
In ANSI standard C, they decided that longjmp() didn't have to
guarantee anything about registers. Several people sent me
some patches that declared certain variables as volatile
rather than register for such compilers. Rather than go that
route, however, I wanted to keep some of these variables in
registers, so I just made sure that the important ones are
restored from non-register locations after longjmp(). I think
"volatile" encourages people to punt too easily.
The foreach construct still had some difficulty with two nested
foreach loops referring to the same array, and to a single
foreach that called its enclosing subroutine recursively.
I think I've got this straight now. You wouldn't think
a little iterator would give some much trouble.
A pattern like /b*/ wouldn't match a null string before the
first character. And certain patterns didn't match correctly
at end of string. The upshot was that
$_ = 'aaa';
s/b*/x/g;
produced 'axaxa' rather than the expected 'xaxaxax'. This has
been fixed. Note however that the split operator will still
not match a null string before the first character, so that
split(/b*/,'aaa') produces ('a','a','a'), not ('','a','a','a','').
The saga continues, and hopefully concludes. I realized I was
fighting a losing battle trying to grep out all the includes
from <time.h> and <sys/time.h>. There are just too many funny
includes, symbols, links and such on too many kinds of machines.
Configure now compiles a test program several different ways to
figure out which way to define the various symbols.
Configure now lets you pick between yacc or bison for your
compiler compiler. If you pick bison, be sure you have alloca
somewhere on your system.
The ANSI function strerror() is now supported where available.
In addition, errno may now be a macro with an lvalue, so errno
isn't declared extern if it's defined as a macro in <errno.h>.
The memcpy() and memset() are now allowed to return void.
There is now support for sys/ndir.h for systems such as Xenix.
It's now also easier to cross compile on a 386 for a 286.
DG/UX has functions setpgrp2() and getpgrp2() to keep the BSD
sematics separate from the SystemV semantics. So now we have
yet another wonderful non-standard way of doing things. There
is also a utime.h file which lets them put time stamps on
files to microsecond resolutions, though perl doesn't take
advantage of this.
The list of optional libraries to be searched for now includes
-lnet_s, -lnsl_s, -lsocket and -lx. We can now find .h files
down in /usr/include/lan.
Microport systems have problems. I've added some CRIPPLED_CC
support for them, but you still need to read the README.uport
file for some extra rigamarole.
In the README file, there are now hints for what to do if your
compile doesn't work right, and specific hints for machines
known to require certain switches.
The grep operator with a simple first argument, such as grep(1,@array),
didn't work right. That one seems silly, but grep($_,@array)
didn't work either. Now it does.
A /$pat/ followed by a // wrongly freed the runtime pattern twice,
causing ill-will on the part of all concerned.
The ord() function now always returns positive even on signed-char
machines. This seems to be less surprising to people. If you
still want a signed value on such machines, you can always use
unpack.
The lib/complete.pl file misused the @_ array. The array has
been renamed.
In the man page, I clarified that s`pat`repl` does command
substitution on the replacement string, that $timeleft from
select() is likely not implemented in many places, and that
the qualified form package'filehandle works as well as
$package'variable. It is also explicitly stated that
certain identifiers (non-alpha, STDIN, etc.) are always
resolved in package main's symbol table.
Perl didn't grok setuid scripts that had a space on the
first line between the shebang and the interpreter name.
In stab.c, sighandler() may now return either void or int,
depending on the value of VOIDSIG.
You couldn't debug a script that used -p or -n because they would
try to slap an extra } on the end of the perldb.pl file. This
upset the parser.
The interpration of strings like " ''$foo'' " caused problems
because the tokener didn't realize that neither single quote
following the variable was indicating a package qualifier.
(It knew the last one wasn't, but was confused about the first one.)
Merely changing an if to a while fixed it. Well, two if's.
Another place we don't want ' to be interpreted as a package
qualifier is if it's the delimiter for an m'pat' or s'pat'repl'.
These have been grandfathered to look like a match and a substitution.
There were a couple of problems in a2p. First, the ops array
was dimensioned too big on 286's. Second, there was a problem
involving passing a union where I should've passed a member of
the union, which meant user-defined functions didn't work right
on some machines.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
[ 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.
|