=item *
-There's no switch statement. (But it's easy to build one on the fly,
-see L<perlsyn/"Basic BLOCKs and Switch Statements">)
+The switch statement is called C<given/when> and only available in
+perl 5.10 or newer. See L<perlsyn/"Switch statements">.
=item *
whether this should be classed as a bug or not.
(The older package delimiter, ' ,is used here)
- $x = 10 ;
- print "x=${'x}\n" ;
+ $x = 10;
+ print "x=${'x}\n";
# perl4 prints: x=10
# perl5 prints: Can't find string terminator "'" anywhere before EOF
You can avoid this problem, and remain compatible with perl4, if you
always explicitly include the package name:
- $x = 10 ;
- print "x=${main'x}\n" ;
+ $x = 10;
+ print "x=${main'x}\n";
Also see precedence traps, for parsing C<$:>.
# perl4 prints: 2
# perl5 fails with syntax error
- @ = (1..3);
+ @a = (1..3);
print "$#{a}";
# perl4 prints: {a}
# perl5 prints: 2
-=item * Perl guesses on C<map>, C<grep> followed by C<{> whether C<{> starts BLOCK or hash ref
+=item * Perl guesses on C<map>, C<grep> followed by C<{> if it starts BLOCK or hash ref
When perl sees C<map {> (or C<grep {>), it has to guess whether the C<{>
starts a BLOCK or a hash reference. If it guesses wrong, it will report
# Perl5 prints:
7.373504
- 7.375039999999999614
+ 7.373503999999999614
Notice how the first result looks better in Perl 5.
use Math::BigInt;
-=item * Assignment of return values from numeric equality tests doesn't works
+=item * Assignment of return values from numeric equality tests doesn't work
Assignment of return values from numeric equality tests
does not work in perl5 when the test evaluates to false (0).
=item * Comma operator in scalar context gives scalar context to args
The comma operator in a scalar context is now guaranteed to give a
-scalar context to its arguments.
+scalar context to its last argument. It gives scalar or void context
+to any preceding arguments, depending on circumstances.
@y= ('a','b','c');
$x = (1, 2, @y);
print "x = $x\n";
- # Perl4 prints: x = c # Thinks list context interpolates list
- # Perl5 prints: x = 3 # Knows scalar uses length of list
+ # Perl4 prints: x = c # Interpolates array @y into the list
+ # Perl5 prints: x = 3 # Evaluates array @y in scalar context
=item * C<sprintf()> prototyped as C<($;@)>
$opt = 'r';
$_ = 'bar';
s/^([^$grpc]*$grpc[$opt]?)/foo/;
- print ;
+ print;
# perl4 prints: foo
# perl5 prints: foobar
=over 5
-=item * Barewords that used to look like strings look like subroutine calls if a subroutine by that name is defined
+=item * Barewords that used to look like strings look like subroutine calls
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.
the file.
open(TEST,">>seek.test");
- $start = tell TEST ;
+ $start = tell TEST;
foreach(1 .. 9){
print TEST "$_ ";
}
- $end = tell TEST ;
+ $end = tell TEST;
seek(TEST,$start,0);
print TEST "18 characters here";
Note: perl5 DOES NOT error on the terminating @ in $bar
-=item * Arbitrary expressions are evaluated inside braces that occur within double quotes
+=item * Arbitrary expressions are evaluated inside braces within double quotes
Perl now sometimes evaluates arbitrary expressions inside braces that occur
within double quotes (usually when the opening brace is preceded by C<$>
# perl4 prints: this is XXXx (XXX is the current pid)
# perl5 prints: this is a reference
-=item * Creation of hashes on the fly with C<eval "EXPR"> requires protection of C<$>'s or both curlies
+=item * Creation of hashes on the fly with C<eval "EXPR"> requires protection
Creation of hashes on the fly with C<eval "EXPR"> now requires either both
C<$>'s to be protected in the specification of the hash name, or both curlies
=over 5
-=item * Perl5 must have been linked with the same dbm/ndbm as the default for C<dbmopen()> to function properly without C<tie>'ing
+=item * Perl5 must have been linked with same dbm/ndbm as the default for C<dbmopen()>
Existing dbm databases created under perl4 (or any other dbm/ndbm tool)
may cause the same script, run under perl5, to fail. The build of perl5
# perl5 prints: ok (IFF linked with -ldbm or -lndbm)
-=item * DBM exceeding the limit on the key/value size will cause perl5 to exit immediately
+=item * DBM exceeding limit on the key/value size will cause perl5 to exit immediately
Existing dbm databases created under perl4 (or any other dbm/ndbm tool)
may cause the same script, run under perl5, to fail. The error generated