- *
-
@
now always interpolates an array in double-quotish strings. Some programs
may now need to use backslash to protect any
@
that shouldn't interpolate.
- * Barewords that used to look like strings to Perl will now look like subroutine calls if a subroutine by that name is defined before the compiler sees them. For example:
sub SeeYa { die "Hasta la vista, baby!" }
$SIG{QUIT} = SeeYa;
-
In Perl 4, that set the signal handler; in Perl 5, it actually calls the
function! You may use the
-w
switch to find such places.
- *
-
Symbols starting with _ are no longer forced into package main, except
for $_ itself (and @_, etc.).
- *
-
s'$lhs'$rhs' now does no interpolation on either side. It used to
interpolate $lhs but not $rhs.
- *
-
The second and third arguments of splice() are now evaluated in scalar
context (as the book says) rather than list context.
- *
-
These are now semantic errors because of precedence:
shift @list + 20;
$n = keys %map + 20;
Because if that were to work, then this couldn't:
sleep $dormancy + 20;
- *
-
open FOO || die is now incorrect. You need parens around the filehandle.
While temporarily supported, using such a construct will
generate a non-fatal (but non-suppressible) warning.
- *
-
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 construct.
Double darn.
- *
-
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.
- *
-
Double-quoted strings may no longer end with an unescaped $ or
@
.
- *
-
The archaic while/if BLOCK BLOCK syntax is no longer supported.
- *
-
Negative array subscripts now count from the end of the array.
- *
-
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.
It was documented to work this way before, but didn't.
- *
-
Setting $#array lower now discards array elements.
- *
-
delete() is not guaranteed to return the old value for tie()d arrays,
since this capability may be onerous for some modules to implement.
- *
-
Some error messages will be different.
- *
-
Some bugs may have been inadvertently removed.