



From: lwall@netlabs.com (Larry Wall)
Subject: Perl 5 alpha available
Message-ID: <1993Jul31.094219.23063@netlabs.com>
Sender: news@netlabs.com
Nntp-Posting-Host: scalpel.netlabs.com
Organization: NetLabs, Inc.
Date: Sat, 31 Jul 1993 09:42:19 GMT
Lines: 138

I've put a tar of my current Perl 5 directory onto ftp.netlabs.com,
in pub/outgoing/perl5.0/perl5a1.tar.Z.

Now's your chance to check out all the bugs I said I fixed in Perl 5.  :-)

Before you get all twitterpated, this is unsupported "alpha 1" code.
There is no Configure, only a makefile.  It will probably only work on
a Sun4.  The compiler and interpreter are still very much unoptimized
(though it already runs as fast or faster than Perl 4).  It doesn't do
everything that I want it to yet.  It doesn't have the OO stuff yet.
It doesn't have "my" yet (though it's got the innards for it).  It
doesn't have a debugger.

But it does have references, and you can play with them.  All the
regression tests pass.  For your befuddlement, here's the op/ref.t test:
----------------------------------------------------
#!./perl

print "1..24\n";

$bar = "ok 1\n";
$foo = "ok 2\n";
{
    local(*foo) = *bar;
    print $foo;
}
print $foo;

$baz = "ok 3\n";
$foo = "ok 4\n";
{
    local(*foo) = 'baz';
    print $foo;
}
print $foo;

$foo = "ok 6\n";
{
    local(*foo);
    print $foo;
    $foo = "ok 5\n";
    print $foo;
}
print $foo;

$baz = "ok 7\n";
$bar = 'baz';
$foo = 'bar';
print $$$foo;

$BAZ = "ok 8\n";
$BAR = \$BAZ;
$FOO = \$BAR;
print $$$FOO;

@ary = (9,10,11,12);
$ref[0] = \@a;
$ref[1] = \@b;
$ref[2] = \@c;
$ref[3] = \@d;
for $i (3,1,2,0) {
    push(@{$ref[$i]}, "ok $ary[$i]\n");
}
print @a;
print ${$ref[1]}[0];
print @{$ref[2]}[0];
print @{'d'};

$refref = \\$x;
$x = "ok 13\n";
print $$$refref;

$ref = [[],2,[3,4,5,]];
print scalar @$ref == 3 ? "ok 14\n" : "not ok 14\n";
print $$ref[1] == 2 ? "ok 15\n" : "not ok 15\n";
print ${$$ref[2]}[2] == 5 ? "ok 16\n" : "not ok 16\n";
print scalar @{$$ref[0]} == 0 ? "ok 17\n" : "not ok 17\n";

print $ref->[1] == 2 ? "ok 18\n" : "not ok 18\n";
print $ref->[2]->[0] == 3 ? "ok 19\n" : "not ok 18\n";

$refref = \%whatever;
$refref->{"key"} = $ref;
print $refref->{"key"}->[2]->[0] == 3 ? "ok 20\n" : "not ok 20\n";

$spring[5]->[0] = 123;
$spring[5]->[1] = 456;
push(@{$spring[5]}, 789);
print join(':',@{$spring[5]}) eq "123:456:789" ? "ok 21\n" : "not ok 21\n";

@{$spring2{"foo"}} = (1,2,3);
$spring2{"foo"}->[3] = 4;
print join(':',@{$spring2{"foo"}}) eq "1:2:3:4" ? "ok 22\n" : "not ok 22\n";

sub mysub { print "ok 23\n" }
$subref = \&mysub;
&$subref;

$subrefref = \\&mysub2;
&$$subrefref("ok 24\n");
sub mysub2 { print shift }
--------------------------------------------------------------
All that gobbledygook works, believe it or not.  For fun, run it through
perl -Dxst.

I smell some new JAPHs coming...

I don't want to get stuck "supporting" this, but if you want to run your
favorite scripts past it and see which ones toss their salad, you may.
If you can come up with a decent bug report with a small test case, I'll
certainly be glad to look at it.  I'm not really interested in obscure
core dumps at the moment.  I'm still getting plenty of those on my own.

I'm not yet interested in memory leak reports either.

I can tell you that no program that uses the old autoloading
mechanism will run, since there is no visibility into the
symbol table pointers currently.  You ought to be able to redefine
a subroutine while it's running, though.  (I haven't tested that in
several months, however.  There oughta be a regression test for that...)

Don't bother trying to diff Perl 4 with Perl 5.  Everything is different.
All names have been regularized.  Here's a key, if you're brave and
want to peek at the sources:

	SV	scalar value
	AV	array value
	HV	hash value
	GV	glob value
	CV	code value
	RV	reference value
	PV	pointer value
	NV	numeric value
	IV	integer value

I'm going to be in New Jersey next week, so don't expect quick replies.

Larry






From: lwall@netlabs.com (Larry Wall)
Subject: Alpha 2 available
Message-ID: <1993Aug16.181531.4345@netlabs.com>
Sender: news@netlabs.com
Nntp-Posting-Host: scalpel.netlabs.com
Organization: NetLabs, Inc.
Date: Mon, 16 Aug 1993 18:15:31 GMT
Lines: 246

Okay, I'm going away on a trip again, so here's the next installment... :-)

New in Alpha 2:
	Many bug fixes from Alpha 1.
	Several compiler optimizations installed.
	New ref function to return a reference's type.
	Anonymous associative array reference constructor {} to go with [].
	First cut at object-oriented features.

Like the Alpha 1 prerelease, this is an unsupported code.  It is
expected to work only on a Sparc architecture machine.  No Configure
support is provided.  In fact, if you succeed in configuring and making
a new makefile, you'll probably overwrite the only makefile that
works.  (Note that a Sparc executable comes with the kit, so you may
not need to compile at all.)

There is no list of new features yet, but if you look at t/op/ref.t
you'll see some of them in use.  perl -Dxst is also fun.

The kit is located on ftp.netlabs.com, in pub/outgoing/perl5.0/perl5a2.tar.Z.

Here's t/op/ref.t for your perusal.  Newer stuff is at the bottom.

#!./perl

print "1..37\n";

# Test glob operations.

$bar = "ok 1\n";
$foo = "ok 2\n";
{
    local(*foo) = *bar;
    print $foo;
}
print $foo;

$baz = "ok 3\n";
$foo = "ok 4\n";
{
    local(*foo) = 'baz';
    print $foo;
}
print $foo;

$foo = "ok 6\n";
{
    local(*foo);
    print $foo;
    $foo = "ok 5\n";
    print $foo;
}
print $foo;

# Test fake references.

$baz = "ok 7\n";
$bar = 'baz';
$foo = 'bar';
print $$$foo;

# Test real references.

$FOO = \$BAR;
$BAR = \$BAZ;
$BAZ = "ok 8\n";
print $$$FOO;

# Test references to real arrays.

@ary = (9,10,11,12);
$ref[0] = \@a;
$ref[1] = \@b;
$ref[2] = \@c;
$ref[3] = \@d;
for $i (3,1,2,0) {
    push(@{$ref[$i]}, "ok $ary[$i]\n");
}
print @a;
print ${$ref[1]}[0];
print @{$ref[2]}[0];
print @{'d'};

# Test references to references.

$refref = \\$x;
$x = "ok 13\n";
print $$$refref;

# Test nested anonymous lists.

$ref = [[],2,[3,4,5,]];
print scalar @$ref == 3 ? "ok 14\n" : "not ok 14\n";
print $$ref[1] == 2 ? "ok 15\n" : "not ok 15\n";
print ${$$ref[2]}[2] == 5 ? "ok 16\n" : "not ok 16\n";
print scalar @{$$ref[0]} == 0 ? "ok 17\n" : "not ok 17\n";

print $ref->[1] == 2 ? "ok 18\n" : "not ok 18\n";
print $ref->[2]->[0] == 3 ? "ok 19\n" : "not ok 18\n";

# Test references to hashes of references.

$refref = \%whatever;
$refref->{"key"} = $ref;
print $refref->{"key"}->[2]->[0] == 3 ? "ok 20\n" : "not ok 20\n";

# Test to see if anonymous subarrays spring into existence.

$spring[5]->[0] = 123;
$spring[5]->[1] = 456;
push(@{$spring[5]}, 789);
print join(':',@{$spring[5]}) eq "123:456:789" ? "ok 21\n" : "not ok 21\n";

# Test to see if anonymous subhashes spring into existence.

@{$spring2{"foo"}} = (1,2,3);
$spring2{"foo"}->[3] = 4;
print join(':',@{$spring2{"foo"}}) eq "1:2:3:4" ? "ok 22\n" : "not ok 22\n";

# Test references to subroutines.

sub mysub { print "ok 23\n" }
$subref = \&mysub;
&$subref;

$subrefref = \\&mysub2;
&$$subrefref("ok 24\n");
sub mysub2 { print shift }

# Test the ref operator.

print ref $subref	eq CODE  ? "ok 25\n" : "not ok 25\n";
print ref $ref		eq ARRAY ? "ok 26\n" : "not ok 26\n";
print ref $refref	eq HASH  ? "ok 27\n" : "not ok 27\n";

# Test anonymous hash syntax.

$anonhash = {};
print ref $anonhash	eq HASH  ? "ok 28\n" : "not ok 28\n";
$anonhash2 = {FOO => BAR, ABC => XYZ,};
print join('', sort values %$anonhash2) eq BARXYZ ? "ok 29\n" : "not ok 29\n";

# Test bless operator.

package MYHASH;

$object = bless $main'anonhash2;
print ref $object	eq MYHASH  ? "ok 30\n" : "not ok 30\n";
print $object->{ABC}	eq XYZ     ? "ok 31\n" : "not ok 31\n";

$object2 = bless {};
print ref $object2	eq MYHASH  ? "ok 32\n" : "not ok 32\n";

# Test ordinary call on object method.

&mymethod($object,33);

sub mymethod {
    local($THIS, @ARGS) = @_;
    die "Not a MYHASH" unless ref $THIS eq MYHASH;
    print $THIS->{FOO} eq BAR  ? "ok $ARGS[0]\n" : "not ok $ARGS[0]\n";
}

# Test automatic destructor call.

$string = "not ok 34\n";
$object = "foo";
$string = "ok 34\n";
$main'anonhash2 = "foo";
$string = "not ok 34\n";

sub DESTROY {
    print $string;

    # Test that the object has already been "cursed".
    print ref shift eq HASH ? "ok 35\n" : "not ok 35\n";
}

# Now test inheritance of methods.

package OBJ;

@ISA = (BASEOBJ);

$main'object = bless {FOO => foo, BAR => bar};

package main;

# Test arrow-style method invocation.

print $object->doit("BAR") eq bar ? "ok 36\n" : "not ok 36\n";

# Test indirect-object-style method invocation.

$foo = doit $object "FOO";
print $foo eq foo ? "ok 37\n" : "not ok 37\n";

sub BASEOBJ'doit {
    local $ref = shift;
    die "Not an OBJ" unless ref $ref eq OBJ;
    $ref->{shift};
}


Some notes about the OO stuff.  Unlike certain languages we could name,
I've tried to minimize the amount of new syntax needed.  An object is
simply a reference to a value that knows what package it belongs to.
Object methods are simply subroutines in that package.  The only
difference between ordinary subroutine calls and method invocation is
that with method invocation the package name is supplied by the
object.  The object comes into a method as an explicit first argument,
which you'd typically pull out as in the BASEOBJ'doit routine above.

You make an ordinary reference into an object reference by "blessing"
it with the bless operator.  Ordinarily you'd call this as the last
thing in a constructor subroutine, but you don't have to.  I didn't
in the tests above.  When you bless an object, all references to it
change their type to the name of the package it was blessed in.  The
type of a reference is available with the new ref function.  (You may
bless an object that was already blessed, though I may limit that
to objects that were blessed by a base class.)

Since all objects are references, and since Perl 5 knows when the
reference count goes to zero, it'll call a destructor for your object
at the appropriate moment, presuming you've defined one.  The destructor
for a package is named DESTROY.  (I haven't implemented inheritance of
destructors yet, so please don't complain about that.)  Currently
an object comes into the destructor already "cursed", so there's
no explicit curse operator to go with the bless operator.  As the
apostle Paul says: "Bless, and curse not."  :-)

Inheritance is implemented without any new syntax.  Any package that
wants to inherit from another package does so by putting a list of
package names into its @ISA array.  Only method names are inherited.
All methods are automatically "virtual" in the C++ sense--they'll call
the most derived version available.  Efficiency is maintained by
caching the looked-up subroutine, though I haven't implemented that
optimization yet.  Multiple inheritance is done by putting multiple
package names into the @ISA array.  They are prioritized by that
ordering.

OO specialists are free to comment.  And I'm free to ignore them...  :-)

Well, that's all I can think of for now.  Have some amount of fun.

Larry






From: lwall@netlabs.com (Larry Wall)
Subject: Alpha 3 available
Message-ID: <1993Oct10.070614.25916@netlabs.com>
Sender: news@netlabs.com
Nntp-Posting-Host: scalpel.netlabs.com
Organization: NetLabs, Inc.
References: <1993Aug16.181531.4345@netlabs.com>
Date: Sun, 10 Oct 1993 07:06:14 GMT
Lines: 50

The Alpha 3 prerelease version of Perl 5 is now available.

New in Alpha 3:
    Many bug fixes from Alpha 2.

    The caller function now returns a false value in a scalar context if there
    is no caller.  This lets library files determine if they're being required.

    m//g now attaches its state to the searched string rather than the
    regular expression.

    The -w switch is much more informative.

    Subroutines may now be called as list operators if they've already
    been declared.

    BEGIN subroutines now execute the moment they're parsed, and can thus
    be used to require things before the rest of the script is parsed.
    This has at least three benefits.  You can use required subroutines
    as if they were built-in list operators.  These requires are done before
    the -w typo check, so there are fewer false alarms.  And you can write
    an infinitely long script by writing a sequence of BEGIN{} blocks--each
    will be thrown away as soon as it has executed.

    Lexical scoping available via "my".  eval can see the current lexical
    variables.  The debugger knows about "my".

    Saying "package;" requires explicit package name on global symbols.

    The debugger works now.  Hmm.  I take that back.  I must have busted it
    with the BEGIN changes.  Darn.  Remove the "BEGIN" from toke.c if you
    want it to work.

Like the Alpha 2 prerelease, this is an unsupported code.  It is
expected to work only on a Sparc architecture machine.  No Configure
support is provided.  In fact, if you succeed in configuring and making
a new makefile, you'll probably overwrite the only makefile that
works.  (Note that a Sparc executable comes with the kit, so you may
not need to compile at all.)

Look in the Changes file for a more complete list of everything that's
new in Perl 5.

The kit is located on ftp.netlabs.com, in pub/outgoing/perl5.0/perl5a3.tar.Z.

Enjoy.

Larry








From: lwall@netlabs.com (Larry Wall)
Subject: Perl 5 Alpha 4 available
Message-ID: <1994Jan14.133740.1096@netlabs.com>
Organization: NetLabs, Inc.
Date: Fri, 14 Jan 1994 13:37:40 GMT
Lines: 124

Perl 5 Alpha 4 is now available from ftp.netlabs.com:pub/outgoing/perl5.0,
filename perl5a4.tar.Z.

This is alpha software, which means it's unsupported (hah!) and there's
no Configure script for it.  It is only likely to work as-is on a Sparc
running SunOS.  The directory contains a pre-compiled executable,
compiled with -g -DDEBUGGING.  If you recompile with -O2 it runs about
25% faster.

Below is the current Changes list for Perl 5.  Have some amount of fun.

Oh, by the way, if you've been writing tkperl, the meanings of some of
the macros have changed:

	SvPVn	is now	SvPV
	SvIVn	is now	SvIV
	SvNVn	is now	SvNV

(The old internal SvPV etc. macros were renamed to SvPVX etc., but you don't
want to use them without severe provocation.)

Look in ext/dbm for some examples of how to link in extra modules.  The
currently compiled executable has DBM, NDBM and SDBM linked in all at once.

Larry

New things
----------
    The -w switch is much more informative.

    References.  See t/op/ref.t for examples.  All entities in Perl 5 are
    reference counted so that it knows when each item should be destroyed.

    Objects.  See t/op/ref.t for examples.

    => is now a synonym for comma.  This is useful as documentation for
    arguments that come in pairs, such as initializers for associative arrays,
    or named arguments to a subroutine.

    All functions have been turned into list operators or unary operators,
    meaning the parens are optional.  Even subroutines may be called as
    list operators if they've already been declared.

    More embeddible.  See main.c and embed_h.SH.  Multiple interpreters
    in the same process are supported (though not with interleaved
    execution yet).

    The interpreter is now flattened out.  Compare Perl 4's eval.c with
    the perl 5's pp.c.  Compare Perl 4's 900 line interpreter loop in cmd.c
    with Perl 5's 1 line interpreter loop in run.c.  Eventually we'll make
    everything non-blocking so we can interface nicely with a scheduler.

    eval is now treated more like a subroutine call.  Among other things,
    this means you can return from it.

    Format value lists may be spread over multiple lines by enclosing in
    curlies.

    You may now define BEGIN and END subroutines for each package.  The BEGIN
    subroutine executes the moment it's parsed.  The END subroutine executes
    just before exiting.

    Flags on the #! line are interpreted even if the script wasn't
    executed directly.  (And even if the script was located by "perl -x"!)

    The ?: operator is now legal as an lvalue.

    List context now propagates to the right side of && and ||, as well
    as the 2nd and 3rd arguments to ?:.

    The "defined" function can now take a general expression.

    Lexical scoping available via "my".  eval can see the current lexical
    variables.

    Saying "package;" requires explicit package name on global symbols.

    The preferred package delimiter is now :: rather than '.

    tie/untie are now preferred to dbmopen/dbmclose.  Multiple DBM
    implementations are allowed in the same executable, so you can
    write scripts to interchange data among different formats.

    New "and" and "or" operators work just like && and || but with
    a precedence lower than comma, so they work better with list operators.

    New functions include: abs(), chr(), uc(), ucfirst(), lc(), lcfirst()

Incompatibilities
-----------------
    @ now always interpolates an array in double-quotish strings.  Some programs
    may now need to use backslash to protect any @ that shouldn't interpolate.

    s'$lhs'$rhs' now does no interpolation on either side.  It used to
    interplolate $lhs but not $rhs.

    The second and third arguments of splice are now evaluated in scalar
    context (like the book says) rather than list context.

    Saying "shift @foo + 20" is now a semantic error because of precedence.

    "open FOO || die" is now incorrect.  You need parens around the filehandle.

    The elements of argument lists for formats are now evaluated in list
    context.  This means you can interpolate list values now.

    You can't do a goto into a block that is optimized away.  Darn.

    It is no longer syntactically legal to use whitespace as the name
    of a variable.

    Some error messages will be different.

    The caller function now returns a false value in a scalar context if there
    is no caller.  This lets library files determine if they're being required.

    m//g now attaches its state to the searched string rather than the
    regular expression.

    "reverse" is no longer allowed as the name of a sort subroutine.

    taintperl is no longer a separate executable.  There is now a -T
    switch to turn on tainting when it isn't turned on automatically.






From: lwall@netlabs.com (Larry Wall)
Subject: Re: Perl 5 Alpha 6 available
Message-ID: <1994Feb16.222546.16901@netlabs.com>
Organization: NetLabs, Inc.
Date: Wed, 16 Feb 1994 22:25:46 GMT
Lines: 60

Alpha 6 is available from ftp.netlabs.com:pub/outgoing/perl5.0/perl5a6.tar.Z.
The link here is pretty slow, so you might want to wait for it to show up
in places like metronet.com, unless you're a mirror site like metronet.com.
I know it's already on ftp.cs.ruu.nl:pub/PERL/perl5.0/perl5a6.tar.gz,
courtesy Henk Penning.  Chances are by the time this message arrives you'll
also see it in places like:
   ftp.cis.ufl.edu:/pub/perl/src/5.0/perl5a6.tar.gz
   <ftp://ftp.metronet.com/pub/perl/source/perl5a6.tar.Z>
   <gopher://gopher.metronet.com/The PERL Programming Lang/source/perl5a6.tar.Z>

As with previous alphas, this alpha is unsupported in the traditional
sense, and there is not yet any Configure support.  It comes prebuilt
for a SunOS Sparc 2.

New things since Alpha 5
------------------------
    require with a bare word now does an immediate require at compile time.
    So "require POSIX" is equivalent to "BEGIN { require 'POSIX.pm' }".

    require with a number checks to see that the version of Perl that is
    currently running is at least that number.

    Dynamic loading of external modules is now supported.

    There is a new quote form qw//, which is equivalent to split(' ', q//).

    Assignment of a reference to a glob value now just replaces the
    single element of the glob corresponding to the reference type:
	*foo = \$bar, *foo = \&bletch;

    Filehandle methods are now supported:
	output_autoflush STDOUT 1;

    There is now an "English" module that provides human readable translations
    for cryptic variable names.

    Autoload stubs can now call the replacement subroutine with goto &realsub.

    Subroutines can be defined lazily in any package by declaring an AUTOLOAD
    routine, which will be called if a non-existent subroutine is called in
    that package.

In particular, you'll want to look at some of the .pm files in the lib
directory, and see how they do business.  The POSIX module is not
complete, but the interface is done, and a few of the routines are
roughed in.  But there's some interesting stuff in there: if you use
POSIX::uname, you're calling a linked in external C subroutine.  If you
call POSIX::getpid, you'll get an autoloaded Perl subroutine.  The
SDBM_File module is an example of a dynamically loaded C library.

Some of you folks who support .pl files and usub extensions should
start thinking about translating them to .pm files and xsub
extensions.  I can't do this all by myself--I'll try to coordinate
things, but if Perl 5 is to be all that it can be, it needs to be a
community effort.  Pitch in where you can.  If there are nifty
extensions in other languages that you'd like to see in Perl, we now
have the apparatus (if not the documentation) to easily add similar
things.  And if you're working on something substantial, let the folks
here know what you're working on so that we don't duplicate effort.

And thank you very much for all you've done already.  Nobody can design
a useful language in a vacuum, and it's even harder to design a language
in gas.  I value your liquid thinking and your solid support.  And no,
I can't think of any way offhand to work plasma into the analogy...  :-)

Larry





From: lwall@netlabs.com (Larry Wall)
Subject: Re: Perl 5 Alpha 6 available
Message-ID: <1994Feb16.225948.17034@netlabs.com>
Organization: NetLabs, Inc.
References: <1994Feb16.222546.16901@netlabs.com>
Date: Wed, 16 Feb 1994 22:59:48 GMT
Lines: 7

Hal Pomeranz has the honor of drawing first blood.

If you want to recompile ext/dl/dl.c, you have to translate any occurrences
of the variable "sp" to "ax" instead.  Don't know how that slipped past
the QA folks...  :-)

Larry





From: lwall@netlabs.com (Larry Wall)
Subject: Re: Perl 5 Alpha 6 available
Message-ID: <1994Feb17.193727.18394@netlabs.com>
Organization: NetLabs, Inc.
References: <1994Feb16.222546.16901@netlabs.com> <1994Feb16.225948.17034@netlabs.com>
Date: Thu, 17 Feb 1994 19:37:27 GMT
Lines: 32

In article <1994Feb16.225948.17034@netlabs.com> lwall@netlabs.com (Larry Wall) writes:
: Hal Pomeranz has the honor of drawing first blood.

Dang.  Drew second blood myself.  You can't put a label as the first
statement inside a block.  Blew my news clipper out of the water.
Here's a patch.  (A workaround is to put a statement before the label.)

*** /scalpel/lwall/perl5alpha6/toke.c	Tue Feb 15 16:27:34 1994
--- toke.c	Thu Feb 17 11:13:27 1994
***************
*** 1398,1405 ****
  	if (expect == XTERM)
  	    OPERATOR(HASHBRACK);
  	else if (expect == XBLOCK || expect == XOPERATOR) {
! 	    lex_brackstack[lex_brackets-1] = XBLOCK;
! 	    expect = XBLOCK;
  	}
  	else {
  	    char *t;
--- 1398,1405 ----
  	if (expect == XTERM)
  	    OPERATOR(HASHBRACK);
  	else if (expect == XBLOCK || expect == XOPERATOR) {
! 	    lex_brackstack[lex_brackets-1] = XSTATE;
! 	    expect = XSTATE;
  	}
  	else {
  	    char *t;

Remember, if you recompile you have to change sp to ax in ext/dl/dl.c too.

Larry





From: lwall@netlabs.com (Larry Wall)
Subject: Another Alpha 6 bug
Message-ID: <1994Feb19.022648.20540@netlabs.com>
Organization: NetLabs, Inc.
Date: Sat, 19 Feb 1994 02:26:48 GMT
Lines: 8

Tony Sanders has discovered that under certain circumstances, undef
can become defined in Alpha 6.  If you run into this problem, recompile
sv.c with -DTOOSTRICT, which, unfortunately, is not too strict, but
just strict enough...

If this keeps up there will be an Alpha 7 pretty soon.  Lucky us.

Larry


Article 15049 of comp.lang.perl:
Xref: feenix.metronet.com comp.lang.perl:15049
Newsgroups: comp.lang.perl
Path: feenix.metronet.com!news.ecn.bgu.edu!usenet.ins.cwru.edu!agate!ihnp4.ucsd.edu!news.cerf.net!netlabs!lwall
From: lwall@netlabs.com (Larry Wall)
Subject: Perl 5 Alpha 10 available
Message-ID: <1994Jun12.234006.26484@netlabs.com>
Organization: NetLabs, Inc.
Date: Sun, 12 Jun 1994 23:40:06 GMT
Lines: 40

The Alpha 10 version of Perl, which is just about very nearly almost a Beta,
is available from various locations, including:

    ftp://sunsite.unc.edu/pub/languages/perl/perl5/*
    ftp://ftp.mcs.com/mcsnet.users/apharris/perl5a10.tar.Z (short term)
    ftp://ftp.funet.fi/pub/languages/perl/ports/perl5/perl5a10.tar.Z
    http://www.metronet.com/perlinfo/perl5.html
    ftp://ftp.metronet.com/pub/perl/source (with or without Sun binaries)
    ftp://ftp.netlabs.com/pub/outgoing/perl5.0/perl5a10.tar.Z

Pick one close to you.

What's new.  Andy and the gang have done a bangup job of integrating
Configure support, including easy addition of new extension modules,
either dynamically or staticly.  Alpha 10 comes with several new
modules:  POSIX, Socket, NDBM_File, ODBM_File, SDBM_File, and most of a
GDBM_File.  The Socket module was entirely generated from
/usr/include/socket.h by a new program called h2xs.  Most of the bugs
you've reported have been fixed.  dbmopen() should work now without
monkey business.

Perhaps the biggest visible change is the introduction of "use", both for
Module importation and for compiler directives.  You'll eventually see
a lot of programs starting out with things like:

	use FileHandle;
	use Socket;
	use POSIX qw(fcntl_h &setlocale);
	use English;
	use Termcap;
	use strict refs, vars, subs;
	use integer;
	use Config '%Config';

Remaining to do for a Beta:
    Make pm versions of most pl files.
    Get serious about tracking down memory leaks.
    Whimper over the Todo list and rename it to Wishlist.  :-)

Larry


Article 
Xref: feenix.metronet.com comp.lang.perl:15049
Newsgroups: comp.lang.perl
From: lwall@netlabs.com (Larry Wall)
Subject: Perl 5 Alpha 12 available
Organization: NetLabs, Inc.
Lines: 40


Alpha 12 is on ftp.netlabs.com in pub/outgoing/perl5.0/perl5a12.tar.Z.

Note that this has the XSUB changes I proposed, but if you use the
old newXSUB and pp_entersubr calls, you still get the old interface,
so Tk should still work.  The new calls are newXS and pp_entersub.

If you've been writing extension modules with xsubpp, it now uses the
new interface, so check your .xs files for references to ST(n).  All
incoming arguments start at ST(0) now instead of ST(1), so if you have
any of those hardwired you'll have to decrease them by one.  I already
did this to the DB_File.xs, but I don't have DB up here so I can't test
it.

As usual, to see how the new interface works, look at POSIX.c.  There
are now macros at the beginning and end of every glue function that hides
the implementation of the interface, so in the future we can tweak it
without much pain if we choose.

If you've done PPCODE: with xsubpp, note that sp will now be handed
to you as if all your arguments have already been popped off, so the
old sp-- is no longer necessary.

I haven't tried to put in the new DynamicLoader yet.  I'll let you guys
work that part over.

No doubt there's more I should mention, but I can't think of it right
now.  I've fixed a lot of bugs, but you might test your favorites to
see if I've missed any.  I did incorporate the misc.t tests in slightly
modified form.

Oh yeah.  If you want to play with the overloading, include -DOVERLOAD.
BigInt.pm has a rudimentary overloaded interface.  Extra credit if you
figure out why it works.

Have the appropriate amount of fun, and maybe a little bit more.

Larry
From lwall@netlabs.com Thu Aug  4 17:02:24 CDT 1994
Article: 17726 of comp.lang.perl
Xref: feenix.metronet.com comp.lang.perl:17726
Newsgroups: comp.lang.perl
Path: feenix.metronet.com!news.ecn.bgu.edu!usenet.ins.cwru.edu!howland.reston.ans.net!usc!elroy.jpl.nasa.gov!netline-fddi.jpl.nasa.gov!nntp-server.caltech.edu!news.cerf.net!netlabs!lwall
From: lwall@netlabs.com (Larry Wall)
Subject: perl5-porters mail
Message-ID: <1994Aug4.184239.10447@netlabs.com>
Organization: NetLabs, Inc.
Date: Thu, 4 Aug 1994 18:42:39 GMT
Lines: 85

Cerfnet can't get through to isu.edu, so here's a couple of mail messages
I sent out to perl5-porters last night.  If you're not a perl5-porter,
you can ignore these.  But you don't have to.  Note that Alpha 12
is available from other places than just ftp.netlabs.com, like
ftp.metronet.com.  Please send bug reports to perl5-porters, not
just to me.  Or post them here.

Larry

-----------------------------------------------------
Subject: Alpha 12 available

Alpha 12 is on ftp.netlabs.com in pub/outgoing/perl5.0/perl5a12.tar.Z.

Note that this has the XSUB changes I proposed, but if you use the
old newXSUB and pp_entersubr calls, you still get the old interface,
so Tk should still work.  The new calls are newXS and pp_entersub.

If you've been writing extension modules with xsubpp, it now uses the
new interface, so check your .xs files for references to ST(n).  All
incoming arguments start at ST(0) now instead of ST(1), so if you have
any of those hardwired you'll have to decrease them by one.  I already
did this to the DB_File.xs, but I don't have DB up here so I can't test
it.

As usual, to see how the new interface works, look at POSIX.c.  There
are now macros at the beginning and end of every glue function that hides
the implementation of the interface, so in the future we can tweak it
without much pain if we choose.

If you've done PPCODE: with xsubpp, note that sp will now be handed
to you as if all your arguments have already been popped off, so the
old sp-- is no longer necessary.

I haven't tried to put in the new DynamicLoader yet.  I'll let you guys
work that part over.

No doubt there's more I should mention, but I can't think of it right
now.  I've fixed a lot of bugs, but you might test your favorites to
see if I've missed any.  I did incorporate the misc.t tests in slightly
modified form.

Oh yeah.  If you want to play with the overloading, include -DOVERLOAD.
BigInt.pm has a rudimentary overloaded interface.  Extra credit if you
figure out why it works.

Have the appropriate amount of fun, and maybe a little bit more.

Larry
-----------------------------------------------------
Subject: Another thing

You'll note that newXS is missing the "ix" argument.  If you want to pass
a value through the new interface, say something like this:

    CV *cv = newXS(...);
    CvXSUBANY(cv).any_i32 = 12345;

In the XS routine, you can get it back with

    XSANY.any_i32

or in declared form as "ix",

    dXSI32;

Since it's an ANY, you can pass a void* through it if you prefer.  See
XSUB.h for more.  Note that XSRETURN just takes as its argument the
number of things you want to return, for handiness.

I didn't manage to make the I32 of SVs into an IPTR yet.  That'd be a
good project for someone.  I'm gonna concentrate on fixing the backtracking
problem in regular expressions that someone pointed out.  Sigh.

It does look as though Tom is finally going to get a chance to revamp
the library, which is good news.

Oh, if you've been calling perl_callsv, you no longer have to do the
extra stack_sp++ to reserve space for the subroutine reference, since
that is now pushed onto the stack after your arguments.  That's mostly
what this whole XSUB thing was about in the first place.

Sorry for the random brain dump, but it's late...

Larry


From perl5-porters@isu.edu Wed Oct 19 22:23:39 CDT 1994
Article: 21789 of comp.lang.perl
Xref: feenix.metronet.com comp.lang.perl:21789 comp.unix.admin:16919 comp.lang.misc:5194 comp.unix.misc:9443 comp.unix.shell:12324 comp.unix.programmer:14607 comp.unix.questions:29604 alt.sources.d:1536 comp.sources.d:1509
Path: feenix.metronet.com!news.ecn.bgu.edu!willis.cis.uab.edu!gatech!howland.reston.ans.net!cs.utexas.edu!uunet!boulder!csnews!mox!tchrist
From: Larry Wall <lwall@netlabs.com>
Newsgroups: comp.lang.perl,comp.unix.admin,comp.lang.misc,comp.unix.misc,comp.unix.shell,comp.unix.programmer,comp.unix.questions,alt.sources.d,comp.sources.d
Subject: Perl 5.0 Official Release Notice
Date: 19 Oct 1994 17:18:57 GMT
Organization: NetLabs, Inc.
Lines: 283
Expires: Thu, 1 Dec 1994 12:00:00 GMT
Message-ID: <383ke1$79k@csnews.cs.Colorado.EDU>
Reply-To: perl5-porters@isu.edu
NNTP-Posting-Host: perl.com
Followups-To: comp.lang.perl
Originator: tchrist@mox

Table of Contents for this Message:

    Intro
    New Features List
    New Documentation List
    Getting Source and Documentation
    Extension Modules
    WWW Info
    Known Bugs
    Bug Reports
    FAQ

------------------------------------------------------------

Intro:

After years of loving craftsmanship by many otherwise sane folks,
release 5 of Perl is now officially launched into production.  The new
release provides many new features and an extremely high level of
compatibility with previous versions.  But more importantly, Perl is
now philosophically committed to the notions of extensibility and
reusability, so that the language itself can stabilize.

Perl 5.0 should configure and build straight out of the box (as 
it were) on virtually any UNIX system, and even on VMS, too!
Ports to other architectures (MS-DOS, Windows/NT) are in the works.

Have the appropriate amount of fun,

Larry Wall
lwall@netlabs.com
Wednesday, 19 October 1994

(tsc)


------------------------------------------------------------

New Features:

    cleaner and more portable configuration and build process
    greatly simplified grammar and faster, tighter interpreter
    numerous legibility enhancements
    optional compile-time restrictions on dubious constructs
    greatly improved diagnostics
    both lexical and dynamic scoping
    anonymous data types: scalars, lists, hash table, functions
    arbitrarily nested data structures
    modularity and reusability
    object-oriented programming
    package constructors and destructors
    embeddibility and extensibility
    dynamic loading of C libraries
    a POSIX 1003.1 compliant interface
    multiple simultaneous DBM implementations
	(dbm, sdbm, ndbm, gdbm, berkeley db)
    operator overloading on arithmetic types
	supplied: Complex, BigInt, and BigFloat 
    regular expression enhancements 
    extensions: curses, X11 support via Sx (Athena, Xlib) and Tk

------------------------------------------------------------

New Documentation:

The once onerous Perl man page has been broken up into many different
pieces, suitable for viewing with the standard man interface or via HTML.
The following separate sections are included:

    perl        Perl overview 
    perldata    Perl data structures
    perlsyn     Perl syntax
    perlop      Perl operators and precedence
    perlre      Perl regular expressions
    perlrun     Perl execution and options
    perlfunc    Perl builtin functions
    perlvar     Perl predefined variables
    perlsub     Perl subroutines
    perlmod     Perl modules
    perlref     Perl references and nested data structures
    perlobj     Perl objects
    perlbot     Perl OO tricks and examples
    perldebug   Perl debugging
    perldiag    Perl diagnostic messages (*ALL* of them, w/ explanations!)
    perlform    Perl formats
    perlipc     Perl interprocess communication
    perlsec     Perl security
    perltrap    Perl traps for the unwary (includes perl4 vs perl5)
    perlstyle   Perl style guide
    perlapi     Perl application programming interface
    perlguts    Perl internal functions for those doing extensions
    perlcall    Perl calling conventions from C
    perlovl     Perl overloading semantics
    perlbook    Perl book information

Furthermore, there is documentation on the standalone programs
and the all Perl library modules.  A pre-formatted postscript 
version of these is available in one piece (240 pages); 
see the "Docs" ftp entries below.

------------------------------------------------------------

Getting Source and Documentation:

    North America
	ftp://ftp.cis.ufl.edu/pub/perl/src/5.0/perl5.000.tar.gz
	ftp://prep.ai.mit.edu/pub/gnu/perl5.000.tar.gz
	ftp://ftp.uu.net/languages/perl/perl5.000.tar.gz
	ftp://ftp.khoros.unm.edu/pub/perl/perl5.000.tar.gz
	ftp://ftp.cbi.tamucc.edu/pub/duff/Perl/perl5.000.tar.gz
	ftp://ftp.metronet.com/perlinfo/source/perl5.000.tar.gz
	ftp://genetics.upenn.edu/perl5/perl5_000.zip

    Europe
	ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/perl5.000.tar.gz
	ftp://ftp.funet.fi/pub/languages/perl/ports/perl5/perl5.000.tar.gz
	ftp://ftp.zrz.tu-berlin.de/pub/unix/perl/perl5.000.tar.gz
	ftp://src.doc.ic.ac.uk/packages/perl5/perl5.000.tar.gz
	http://src.doc.ic.ac.uk/packages/perl5/perl5.000.tar.gz
	gopher://src.doc.ic.ac.uk/0/packages/perl5/perl5.000.tar.gz

    Australia
	ftp://sungear.mame.mu.oz.au/pub/perl/src/5.0/perl5.000.tar.gz

Docs:
	http://www.metronet.com/0/perlinfo/perl5/manual/perl.html
	ftp://ftp.uu.net/languages/perl/PerlDoc.ps.gz
	ftp://prep.ai.mit.edu/pub/gnu/PerlDoc.ps.gz
	ftp://ftp.cbi.tamucc.edu/pub/duff/Perl/PerlDoc.ps.gz
        ftp://www.metronet.com/pub/perlinfo/perl5/manual/PerlDoc.ps.gz
	ftp://ftp.zrz.tu-berlin.de/pub/unix/perl/PerlDoc.ps.gz  (Europe)
	ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/PerlDoc.ps.gz  	(Europe)
	ftp://sungear.mame.mu.oz.au/pub/perl/doc/PerlDoc.ps.gz  (Oz)

Email access:

    The following is a list of known ftpmail sites.  Please attempt to use
    the site closest to you with the ftp archive closest to it.  Many of
    these sites already have perl on them.  For information on how to use
    one of these sites, send email containing the word "help" to the
    address.

        United States:
            Massachusetts:      ftpmail@decwrl.dec.com
            New Jersey:         bitftp@pucc.princeton.edu
            North Carolina:     ftpmail@sunsite.unc.edu

        Europe/UK:
            Germany:            ftpmail@ftp.uni-stuttgart.de
                                bitftp@vx.gmd.de
            UK:                 ftpmail@doc.ic.ac.uk

        Australia:              ftpmail@cs.uow.edu.au

    Henk P Penning* suggests that if you are in Europe you should try the
    following (if you are in Germany or the UK, you should probably use one
    of the servers listed above): 

        Email: Send a message to 'mail-server@cs.ruu.nl' containing:
         begin
         path your_email_address
         send help
         send PERL/INDEX
         end
        The path-line may be omitted if your message contains a normal
        From:-line.  You will receive a help-file and an index of the
        directory that contains the Perl stuff.

    You should probably ask for something like these:

	  send PERL/perl5.000.tar.gz
	  send PERL/PerlDoc.ps.gz

    *PLEASE* use email ftp access only has a last recourse, and
    please wait as long as possible before sending in your request,
    so the load on the server is spread over a longer period.

------------------------------------------------------------

Extension Modules:

Tk (as in tcl/tk, but sans tcl) 


    ftp://ftp.cis.ufl.edu/pub/perl/src/tkperl/tkperl5a4.tar.gz
    ftp://ftp.khoros.unm.edu/pub/perl/extensions/tkperl5a4.tar.gz
    ftp://ftp.metronet.com/pub/perlinfo/perl5/tkperl/tkperl5a4.tar.gz
    ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/tkperl5a4.tar.gz
    ftp://black.ox.ac.uk/src/ALPHA/tkperl5a4.tar.gz

    (try 5a5 everywhere after 2pm UST Thu 20 Oct 1994, as in)

    ftp://sable.ox.ac.uk/pub/perl/tkperl5a5.tar.gz



Curses (standard C library)
    ftp://ftp.ncsu.edu/pub/math/wsetzer/cursperl5a6.tar.gz
    ftp://ftp.metronet.com/pub/perlinfo/perl5/cursperl5a6.tar.gz
    ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/cursperl5a6.tar.gz

Msql (SQL)
    ftp://ftp.zrz.TU-Berlin.DE/pub/unix/perl/MsqlPerl-a1.tgz
    ftp://ftp.khoros.unm.edu/pub/perl/extensions/MsqlPerl-a1.tgz
    ftp://ftp.metronet.com/pub/perlinfo/perl5/MsqlPerl5-a1.tgz
    ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/MsqlPerl-a1.tar.gz

Sx (Athena & Xlib)
    ftp://ftp.pasteur.fr/pub/Perl/Sx.tar.gz
    ftp://ftp.khoros.unm.edu/pub/perl/extensions/Sx.tar.gz
    ftp://ftp.metronet.com/pub/perlinfo/perl5/Sx.tar.gz
    ftp://ftp.cs.ruu.nl/pub/PERL/perl5.0/PerlDoc.ps.gz


Database (Oracle, Sybase, Informix, Ingress, etc)
    ftp://ftp.demon.co.uk:/pub/perl/db
    ftp::/ftp.cis.ufl.edu//pub/perl/scripts/db

------------------------------------------------------------

WWW Info:

Web access to random perl information is found here:

General:
    http://www.metronet.com/perlinfo/perl5.html

Full on-line hypertextual PerlDoc:
    http://www.metronet.com/0/perlinfo/perl5/manual/perl.html
    http://www.mit.edu:8001/perl/perl.html (might just be gamma)

------------------------------------------------------------

Known Bugs:

    The README says it's a pre-release.
	Workaround: ignore this sentence.

    Installs perl0.000 and sperl0.000 instead of 5.000.
	Workaround: rename the files.

    The debugger appears to be broken on "my" variables;
	Workaround: none yet

    Recursive signal handlers eventually core dump.
	Workaround: ease up on the ^C key.

    The following code misbehaves: print ++$_ . "\n" until /0/;
	Workaround: initialize your variable

    Destructors can clobber $@ on exit from an eval
        Workaround: local $@; eval {...};

------------------------------------------------------------

Bug Reports:

The best place to send your bug is to the Perl Porters mailing list
<perl5-porters@isu.edu>.  You may subscribe to the list in the customary
fashion via mail to <perl5-porters-request@isu.edu>.  Feel free to post
your bugs to the comp.lang.perl newsgroup as well, but do make sure they 
still go to the mailing list.

To enhance your chances of getting any bug you report fixed:

1. Try to narrow the problem down to as small a piece of code as
   possible.  If you can get it down to 1 line of Perl then so much
   the better.

2. Include a copy of the output from the myconfig script from the
   Perl source distribution in your posting.

------------------------------------------------------------

FAQ:

The Perl Frequently Asked Questions list (in somewhat antiquated form,
especially now that Perl 5.0 is out) may be found here, amongst other
places:

    ftp://ftp.cis.ufl.edu/pub/perl/doc/faq.gz
    ftp://sungear.mame.mu.oz.au/pub/perl/doc/faq.gz
    ftp://ftp.cs.ruu.nl/pub/PERL/FAQ.gz


