Search:
  University Web Sites

  Computing
  Services:

  Home
  About Us
  FAQs
  Office of Information
    Technology (OIT)

  Jump to:
  Camden Campus
  Camden Web Mail
  myRutgers Portal
  RU Libraries
  RU Main

  Questions
  Comments

Camden Computing Services
 

Perl4 to Perl5 Traps

Perl4 to Perl5 Traps

Computing Services Information Document



This page is a trimmed down version of perltrap.php found at
http://www.bchs.uh.edu/~michael/perlman/


Although it is recommended that you convert your perl4 scripts to be compatible with perl5, it is still possible to use your pre-existing scripts with perl4. To do so, change the top line of any perl script from:
#!/usr/local/bin/perl
to
#!/usr/local/bin/perl4.036


Perl4 Traps

Penitent Perl 4 Programmers should take note of the following incompatible changes that occurred between release 4 and release 5:

*
@ 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.

*

*
taintperl is no longer a separate executable. Ther is now a 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.





Questions/comments regarding Camden Computing Services or this web site
can be directed to: help@camden.rutgers.edu.
Last updated: January 10, 2006, 13:46 EST.

© 2005-2010 Rutgers, The State University of New Jersey. All rights reserved.