Search:
  People
  Places
  Events

  Camden Web Sites
  University Web Sites
  Entire Web

  Computing
  Services:

  About Us
  FAQs
  Office of Information
    Technology (OIT)

  Lab Reservations
  Smart Classrooms

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

  Questions
  Comments

Camden Computing Services
  SupportStudentsFaculty and Staff_

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-2008 Rutgers, The State University of New Jersey. All rights reserved.