------------- Version 5.000 -------------
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 documenta-
tion for
arguments that come in pairs, such as initializers for asso-
ciative 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 inter-
preters
in the same process are supported (though not with inter-
leaved
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 en-
closing in
a do {} block.
You may now define BEGIN and END subroutines for each pack-
age. The BEGIN
subroutine executes the moment it's parsed. The END subrou-
tine 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.
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(),
chomp(), glob()
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 = ar, *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.
Several previously added features have been subsumed under
the new
keywords "use" and "no". Saying "use Module LIST" is short
for BEGIN { require Module; import Module LIST; }
The "no" keyword is identical except that it calls "unimport"
instead.
The earlier pragma mechanism now uses this mechanism, and two
new
modules have been added to the library to implement "use in-
teger"
and variations of "use strict vars, refs, subs".
Variables may now be interpolated literally into a pattern by
prefixing
them with Q, which works just like U, but backwhacks non-al-
phanumerics
instead. There is also a corresponding quotemeta function.
Any quantifier in a regular expression may now be followed by
a ? to
indicate that the pattern is supposed to match as little as
possible.
Pattern matches may now be followed by an m or s modifier to
explicitly
request multiline or singleline semantics. An s modifier
makes . match
newline.
Patterns may now contain 1match only at the beginning of the
string,
and match only at the end. These differ from ^ and $ in that
they ignore multiline semantics. In addition, G matches
where the
last interation of m//g or s///g left off.
Non-backreference-producing parens of various sorts may now
be
indicated by placing a ? directly after the opening parenthe-
sis,
followed by a character that indicates the purpose of the
parens.
An :, for instance, indicates simple grouping. (?:a|b|c)
will
match any of a, b or c without producing a backreference. It
does
"eat" the input. There are also assertions which do not eat
the
input but do lookahead for you. (?=stuff) indicates that the
next
thing must be "stuff". (?!nonsense) indicates that the next
thing
must not be "nonsense".
The negation operator now treats non-numeric strings special-
ly.
A -"text" is turned into "-text", so that -bareword is the
same
as "-bareword". If the string already begins with a + or -,
it
is flipped to the other sign.
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.
Ordinary variables starting with underscore are no longer
forced into
package main.
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, or as a delimiter for any kind of quote con-
struct.
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 subrou-
tine.
taintperl is no longer a separate executable. There is now a
-T
switch to turn on tainting when it isn't turned on automati-
cally.
Symbols starting with _ are no longer forced into package
main, except
for $_ itself (and @_, etc.).
Double-quoted strings may no longer end with an unescaped $
or @.
Negative array subscripts now count from the end of the ar-
ray.
The comma operator in a scalar context is now guaranteed to
give a
scalar context to its arguments.
The ** operator now binds more tightly than unary minus.
Setting $#array lower now discards array elements so that de-
structors
work reasonably.
delete is not guaranteed to return the old value for tied ar-
rays,
since this capability may be onerous for some modules to im-
plement.
Attempts to set $1 through $9 now result in a run-time error.