Software Package:
	perl5

Release/Version:
	5.001m

	Plus the `in-progress' patches (see also patches/*):
	    closure-bug.patch
	    debugger.patch
	    eval-leak.patch
	    glob-undef.patch
	    op-segfault.patch
	    warn-ref-hash-key.patch

Retrieved from:
	ftp://ftp.netlabs.com/pub/outgoing/perl5.0/
	ftp://ftp.perl.com/pub/perl/src/patches/

Bug reports:
	This software package is maintained by the software contributor,
	not BSDI.  Please send any bug reports to both support@BSDI.COM
	and perlbug@perl.com.  For general questions try comp.lang.perl.misc.

Comments:
	The BSDI patches are for the SAVED_IDS-style set[ug]id semantics
	and to use shared libraries.

	The distribution was configured using the supplied hints/bsdos.sh
	with the following command:
	    ./Configure -des -Dbsdos_distribution=defined

	Changed #!'s to perl5 in:
	    c2ph.SH h2ph.SH h2xs.SH makeaperl.SH perldoc.SH
	    pod/pod2html.SH pod/pod2latex.SH pod/pod2man.SH
	    x2p/find2perl.SH x2p/s2p.SH

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Modifications to this version made by BSDI:

Added hints/bsdos.sh

===================================================================
RCS file: /master/contrib/perl5/Makefile.SH,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 Makefile.SH
*** 1.1.1.1	1995/12/08 20:13:19
--- Makefile.SH	1995/12/09 00:27:41
***************
*** 1,3 ****
--- 1,5 ----
+ #	BSDI	BSDI_CONTRIB,v 1.4 1996/01/09 08:00:58 sanders Exp
+ 
  case $CONFIG in
  '')
  	if test -f config.sh; then TOP=.;
***************
*** 178,189 ****
  .c.o:
  	$(CCCMD) $(PLDLFLAGS) $*.c
  
! all: makefile miniperl $(private) $(public) $(dynamic_ext)
  	@echo " "; echo "	Making x2p stuff"; cd x2p; $(MAKE) all
  	
  # This is now done by installman only if you actually want the man pages.
  #	@echo " "; echo "	Making docs"; cd pod; $(MAKE) all;
  
  # Phony target to force checking subdirectories.
  # Apparently some makes require an action for the FORCE target.
  FORCE:
--- 180,195 ----
  .c.o:
  	$(CCCMD) $(PLDLFLAGS) $*.c
  
! all: miniperl $(private) $(public) $(dynamic_ext)
  	@echo " "; echo "	Making x2p stuff"; cd x2p; $(MAKE) all
  	
  # This is now done by installman only if you actually want the man pages.
  #	@echo " "; echo "	Making docs"; cd pod; $(MAKE) all;
  
+ # Added for BSD/OS build environment
+ mansourceinstall obj objdir tags:
+ cleandir: clean
+ 
  # Phony target to force checking subdirectories.
  # Apparently some makes require an action for the FORCE target.
  FORCE:
***************
*** 271,282 ****
  lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.PL lib/Config.pm
  	./miniperl minimod.PL > tmp && mv tmp $@
  
! install: all install.perl install.man
  
! install.perl:	all
  	./perl installperl
  
! install.man:	all
  	./perl installman
  
  # Not implemented yet.
--- 277,300 ----
  lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.PL lib/Config.pm
  	./miniperl minimod.PL > tmp && mv tmp $@
  
! install: install.perl install.man
  
! install.perl:
  	./perl installperl
+ 	mv /usr/contrib/man/man1/a2p.1 /usr/contrib/man/man1/a2p5.1
+ 	mv /usr/contrib/man/man1/s2p.1 /usr/contrib/man/man1/s2p5.1
+ 	nroff -man /usr/contrib/man/man1/a2p5.1 > /usr/contrib/man/cat1/a2p5.0
+ 	nroff -man /usr/contrib/man/man1/s2p5.1 > /usr/contrib/man/cat1/s2p5.0
+ 	mv /usr/contrib/bin/perl /usr/contrib/bin/perl5
+ 	mv /usr/contrib/bin/suidperl /usr/contrib/bin/suidperl5
+ 	rm -f /usr/contrib/bin/sperl5
+ 	ln /usr/contrib/bin/sperl5.001 /usr/contrib/bin/sperl5
+ 	mv /usr/contrib/bin/a2p /usr/contrib/bin/a2p5
+ 	mv /usr/contrib/bin/s2p /usr/contrib/bin/s2p5
+ 	mv /usr/contrib/bin/find2perl /usr/contrib/bin/find2perl5
+ 	( cd Tk-b8; /usr/contrib/bin/perl5 Makefile.PL; make; make install; )
  
! install.man:
  	./perl installman
  
  # Not implemented yet.
***************
*** 347,352 ****
--- 365,371 ----
  	sh ext/util/make_ext clean $$x ; \
  	done
  	rm -f perl suidperl miniperl $(perllib)
+ 	( cd Tk-b8; make clean; )
  
  realclean: clean
  	-cd x2p; $(MAKE) realclean
===================================================================
RCS file: /master/contrib/perl5/installperl,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 installperl
*** 1.1.1.1	1995/12/08 20:13:24
--- installperl	1995/12/09 00:27:44
***************
*** 1,4 ****
--- 1,5 ----
  #!./perl
+ #	BSDI	BSDI_CONTRIB,v 1.4 1996/01/09 08:00:58 sanders Exp
  BEGIN { @INC=('./lib', '../lib') }
  use File::Find;
  
***************
*** 171,201 ****
  
  $mainperl_is_instperl = 0;
  
! if (-w $mainperldir && ! &samepath($mainperldir, $installbin) && !$nonono) {
!     # First make sure $mainperldir/perl is not already the same as
!     # the perl we just installed
!     if (-x "$mainperldir/perl") {
! 	# Try to be clever about mainperl being a symbolic link
! 	# to binexp/perl if binexp and installbin are different.
! 	$mainperl_is_instperl =
! 	    &samepath("$mainperldir/perl", "$installbin/perl") ||
! 	     (($binexp ne $installbin) &&
! 	      (-l "$mainperldir/perl") &&
! 	      ((readlink "$mainperldir/perl") eq "$binexp/perl"));
!     }
!     if ((! $mainperl_is_instperl) &&
! 	(&yn("Many scripts expect perl to be installed as " .
! 	     "$mainperldir/perl.\n" . 
! 	     "Do you wish to have $mainperldir/perl be the same as\n" .
! 	     "$binexp/perl? [y] ")))
!     {	
! 	unlink("$mainperldir/perl");
! 	eval 'link("$installbin/perl", "$mainperldir/perl")' ||
! 	eval 'symlink("$binexp/perl", "$mainperldir/perl")' ||
! 	&cmd("cp $installbin/perl $mainperldir");
! 	$mainperl_is_instperl = 1;
!     }
! }
  
  # Check to make sure there aren't other perls around in installer's
  # path.  This is probably UNIX-specific.  Check all absolute directories
--- 172,202 ----
  
  $mainperl_is_instperl = 0;
  
! #if (-w $mainperldir && ! &samepath($mainperldir, $installbin) && !$nonono) {
! #    # First make sure $mainperldir/perl is not already the same as
! #    # the perl we just installed
! #    if (-x "$mainperldir/perl") {
! #	# Try to be clever about mainperl being a symbolic link
! #	# to binexp/perl if binexp and installbin are different.
! #	$mainperl_is_instperl =
! #	    &samepath("$mainperldir/perl", "$installbin/perl") ||
! #	     (($binexp ne $installbin) &&
! #	      (-l "$mainperldir/perl") &&
! #	      ((readlink "$mainperldir/perl") eq "$binexp/perl"));
! #    }
! #    if ((! $mainperl_is_instperl) &&
! #	(&yn("Many scripts expect perl to be installed as " .
! #	     "$mainperldir/perl.\n" . 
! #	     "Do you wish to have $mainperldir/perl be the same as\n" .
! #	     "$binexp/perl? [y] ")))
! #    {	
! #	unlink("$mainperldir/perl");
! #	eval 'link("$installbin/perl", "$mainperldir/perl")' ||
! #	eval 'symlink("$binexp/perl", "$mainperldir/perl")' ||
! #	&cmd("cp $installbin/perl $mainperldir");
! #	$mainperl_is_instperl = 1;
! #    }
! #}
  
  # Check to make sure there aren't other perls around in installer's
  # path.  This is probably UNIX-specific.  Check all absolute directories
===================================================================
RCS file: /master/contrib/perl5/mg.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 mg.c
*** 1.1.1.1	1995/12/08 20:13:25
--- mg.c	1995/12/08 20:38:12
***************
*** 1,3 ****
--- 1,5 ----
+ /*	BSDI	BSDI_CONTRIB,v 1.4 1996/01/09 08:00:58 sanders Exp */
+ 
  /*    mg.c
   *
   *    Copyright (c) 1991-1994, Larry Wall
***************
*** 1082,1097 ****
  #ifdef HAS_SETRESUID
        (void)setresuid((Uid_t)uid, (Uid_t)-1, (Uid_t)-1);
  #else
! 	if (uid == euid)		/* special case $< = $> */
  	    (void)setuid(uid);
! 	else {
  	    uid = (I32)getuid();
! 	    croak("setruid() not implemented");
  	}
  #endif
  #endif
  #endif
  	uid = (I32)getuid();
  	tainting |= (euid != uid || egid != gid);
  	break;
      case '>':
--- 1084,1101 ----
  #ifdef HAS_SETRESUID
        (void)setresuid((Uid_t)uid, (Uid_t)-1, (Uid_t)-1);
  #else
! 	if (uid == euid || euid == 0) {		/* special case $< = $> */
  	    (void)setuid(uid);
! 	} else {
  	    uid = (I32)getuid();
! 	    croak("failed setting real user id");
  	}
  #endif
  #endif
  #endif
  	uid = (I32)getuid();
+ 	/* POSIX defines setuid() to change euid as well */
+ 	euid = (I32)geteuid();
  	tainting |= (euid != uid || egid != gid);
  	break;
      case '>':
***************
*** 1113,1119 ****
  	    setuid(euid);
  	else {
  	    euid = (I32)geteuid();
! 	    croak("seteuid() not implemented");
  	}
  #endif
  #endif
--- 1117,1123 ----
  	    setuid(euid);
  	else {
  	    euid = (I32)geteuid();
! 	    croak("failed setting effective user id");
  	}
  #endif
  #endif
***************
*** 1136,1151 ****
  #ifdef HAS_SETRESGID
        (void)setresgid((Gid_t)gid, (Gid_t)-1, (Gid_t) 1);
  #else
! 	if (gid == egid)			/* special case $( = $) */
  	    (void)setgid(gid);
  	else {
  	    gid = (I32)getgid();
! 	    croak("setrgid() not implemented");
  	}
  #endif
  #endif
  #endif
  	gid = (I32)getgid();
  	tainting |= (euid != uid || egid != gid);
  	break;
      case ')':
--- 1140,1157 ----
  #ifdef HAS_SETRESGID
        (void)setresgid((Gid_t)gid, (Gid_t)-1, (Gid_t) 1);
  #else
! 	if (gid == egid || euid == 0)		/* special case $( = $) */
  	    (void)setgid(gid);
  	else {
  	    gid = (I32)getgid();
! 	    croak("failed setting real group id");
  	}
  #endif
  #endif
  #endif
  	gid = (I32)getgid();
+ 	/* POSIX defines setgid() to change egid as well */
+ 	egid = (I32)getegid();
  	tainting |= (euid != uid || egid != gid);
  	break;
      case ')':
***************
*** 1167,1173 ****
  	    (void)setgid(egid);
  	else {
  	    egid = (I32)getegid();
! 	    croak("setegid() not implemented");
  	}
  #endif
  #endif
--- 1173,1179 ----
  	    (void)setgid(egid);
  	else {
  	    egid = (I32)getegid();
! 	    croak("failed setting effective group id");
  	}
  #endif
  #endif
===================================================================
RCS file: /master/contrib/perl5/pp_hot.c,v
retrieving revision 1.2
diff -c -r1.2 pp_hot.c
*** 1.2	1995/12/08 20:21:10
--- pp_hot.c	1995/12/08 20:38:13
***************
*** 1,3 ****
--- 1,5 ----
+ /*	BSDI	BSDI_CONTRIB,v 1.4 1996/01/09 08:00:58 sanders Exp */
+ 
  /*    pp_hot.c
   *
   *    Copyright (c) 1991-1994, Larry Wall
***************
*** 614,621 ****
  	    }
  #    endif /* HAS_SETEUID */
  	    if (delaymagic & DM_UID) {
! 		if (uid != euid)
! 		    DIE("No setreuid available");
  		(void)setuid(uid);
  	    }
  #  endif /* HAS_SETREUID */
--- 616,623 ----
  	    }
  #    endif /* HAS_SETEUID */
  	    if (delaymagic & DM_UID) {
! 		if (uid != euid && euid != 0)
! 		    DIE("Failed setting real user id");
  		(void)setuid(uid);
  	    }
  #  endif /* HAS_SETREUID */
***************
*** 643,650 ****
  	    }
  #    endif /* HAS_SETEGID */
  	    if (delaymagic & DM_GID) {
! 		if (gid != egid)
! 		    DIE("No setregid available");
  		(void)setgid(gid);
  	    }
  #  endif /* HAS_SETREGID */
--- 645,652 ----
  	    }
  #    endif /* HAS_SETEGID */
  	    if (delaymagic & DM_GID) {
! 		if (gid != egid && euid != 0)
! 		    DIE("Failed setting real group id");
  		(void)setgid(gid);
  	    }
  #  endif /* HAS_SETREGID */
===================================================================
RCS file: /master/contrib/perl5/x2p/a2p.man,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 a2p.man
*** 1.1.1.1	1995/12/08 20:14:27
--- a2p.man	1995/12/09 00:28:09
***************
*** 1,7 ****
  .rn '' }`
! ''' BSDI_CONTRIB,v1.41996/01/09 08:00:58
  ''' 
  ''' BSDI_CONTRIB,v
  ''' Revision 1.4  1996/01/09 08:00:58  sanders
  ''' added note about .SH file #! changes
  '''
  ''' Revision 1.3  1995/12/09 00:31:41  sanders
  ''' Included current set of BSDI patches to perl5
  '''
  .\" Revision 1.1.1.1  1995/12/08  20:14:27  sanders
  .\" Import of perl5.001m sources
  .\"
--- 1,10 ----
  .rn '' }`
! ''' BSDI_CONTRIB,v1.41996/01/09 08:00:58
  ''' 
  ''' BSDI_CONTRIB,v
  ''' Revision 1.4  1996/01/09 08:00:58  sanders
  ''' added note about .SH file #! changes
  '''
  ''' Revision 1.3  1995/12/09 00:31:41  sanders
  ''' Included current set of BSDI patches to perl5
  '''
+ .\" Revision 1.2  1995/12/09  00:28:09  sanders
+ .\" Perl5 Configuration
+ .\"
  .\" Revision 1.1.1.1  1995/12/08  20:14:27  sanders
  .\" Import of perl5.001m sources
  .\"
***************
*** 45,57 ****
  .ds L' `
  .ds R' '
  'br\}
! .TH A2P 1 LOCAL
  .SH NAME
! a2p - Awk to Perl translator
  .SH SYNOPSIS
! .B a2p [options] filename
  .SH DESCRIPTION
! .I A2p
  takes an awk script specified on the command line (or from standard input)
  and produces a comparable
  .I perl
--- 48,60 ----
  .ds L' `
  .ds R' '
  'br\}
! .TH A2P5 1 LOCAL
  .SH NAME
! a2p5 - Awk to Perl5 translator
  .SH SYNOPSIS
! .B a2p5 [options] filename
  .SH DESCRIPTION
! .I A2p5
  takes an awk script specified on the command line (or from standard input)
  and produces a comparable
  .I perl
***************
*** 63,69 ****
  sets debugging flags.
  .TP 5
  .B \-F<character>
! tells a2p that this awk script is always invoked with this -F switch.
  .TP 5
  .B \-n<fieldlist>
  specifies the names of the input fields if input does not have to be split into
--- 66,72 ----
  sets debugging flags.
  .TP 5
  .B \-F<character>
! tells a2p5 that this awk script is always invoked with this -F switch.
  .TP 5
  .B \-n<fieldlist>
  specifies the names of the input fields if input does not have to be split into
***************
*** 71,84 ****
  If you were translating an awk script that processes the password file, you
  might say:
  .sp
! 	a2p -7 -nlogin.password.uid.gid.gcos.shell.home
  .sp
  Any delimiter can be used to separate the field names.
  .TP 5
  .B \-<number>
! causes a2p to assume that input will always have that many fields.
  .Sh "Considerations"
! A2p cannot do as good a job translating as a human would, but it usually
  does pretty well.
  There are some areas where you may want to examine the perl script produced
  and tweak it some.
--- 74,87 ----
  If you were translating an awk script that processes the password file, you
  might say:
  .sp
! 	a2p5 -7 -nlogin.password.uid.gid.gcos.shell.home
  .sp
  Any delimiter can be used to separate the field names.
  .TP 5
  .B \-<number>
! causes a2p5 to assume that input will always have that many fields.
  .Sh "Considerations"
! A2p5 cannot do as good a job translating as a human would, but it usually
  does pretty well.
  There are some areas where you may want to examine the perl script produced
  and tweak it some.
***************
*** 86,99 ****
  .PP
  There is an awk idiom of putting int() around a string expression to force
  numeric interpretation, even though the argument is always integer anyway.
! This is generally unneeded in perl, but a2p can't tell if the argument
  is always going to be integer, so it leaves it in.
  You may wish to remove it.
  .PP
  Perl differentiates numeric comparison from string comparison.
  Awk has one operator for both that decides at run time which comparison
  to do.
! A2p does not try to do a complete job of awk emulation at this point.
  Instead it guesses which one you want.
  It's almost always right, but it can be spoofed.
  All such guesses are marked with the comment \*(L"#???\*(R".
--- 89,102 ----
  .PP
  There is an awk idiom of putting int() around a string expression to force
  numeric interpretation, even though the argument is always integer anyway.
! This is generally unneeded in perl, but a2p5 can't tell if the argument
  is always going to be integer, so it leaves it in.
  You may wish to remove it.
  .PP
  Perl differentiates numeric comparison from string comparison.
  Awk has one operator for both that decides at run time which comparison
  to do.
! A2p5 does not try to do a complete job of awk emulation at this point.
  Instead it guesses which one you want.
  It's almost always right, but it can be spoofed.
  All such guesses are marked with the comment \*(L"#???\*(R".
***************
*** 106,114 ****
  If somehow you are relying on this mechanism to create null entries for
  a subsequent for...in, they won't be there in perl.
  .PP
! If a2p makes a split line that assigns to a list of variables that looks
  like (Fld1, Fld2, Fld3...) you may want
! to rerun a2p using the \-n option mentioned above.
  This will let you name the fields throughout the script.
  If it splits to an array instead, the script is probably referring to the number
  of fields somewhere.
--- 109,117 ----
  If somehow you are relying on this mechanism to create null entries for
  a subsequent for...in, they won't be there in perl.
  .PP
! If a2p5 makes a split line that assigns to a list of variables that looks
  like (Fld1, Fld2, Fld3...) you may want
! to rerun a2p5 using the \-n option mentioned above.
  This will let you name the fields throughout the script.
  If it splits to an array instead, the script is probably referring to the number
  of fields somewhere.
***************
*** 155,173 ****
  .PP
  The produced perl script may have subroutines defined to deal with awk's
  semantics regarding getline and print.
! Since a2p usually picks correctness over efficiency.
  it is almost always possible to rewrite such code to be more efficient by
  discarding the semantic sugar.
  .PP
  For efficiency, you may wish to remove the keyword from any return statement
  that is the last statement executed in a subroutine.
! A2p catches the most common case, but doesn't analyze embedded blocks for
  subtler cases.
  .PP
  ARGV[0] translates to $ARGV0, but ARGV[n] translates to $ARGV[$n].
  A loop that tries to iterate over ARGV[0] won't find it.
  .SH ENVIRONMENT
! A2p uses no environment variables.
  .SH AUTHOR
  Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  .SH FILES
--- 158,176 ----
  .PP
  The produced perl script may have subroutines defined to deal with awk's
  semantics regarding getline and print.
! Since a2p5 usually picks correctness over efficiency.
  it is almost always possible to rewrite such code to be more efficient by
  discarding the semantic sugar.
  .PP
  For efficiency, you may wish to remove the keyword from any return statement
  that is the last statement executed in a subroutine.
! A2p5 catches the most common case, but doesn't analyze embedded blocks for
  subtler cases.
  .PP
  ARGV[0] translates to $ARGV0, but ARGV[n] translates to $ARGV[$n].
  A loop that tries to iterate over ARGV[0] won't find it.
  .SH ENVIRONMENT
! A2p5 uses no environment variables.
  .SH AUTHOR
  Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  .SH FILES
***************
*** 180,186 ****
  It would be possible to emulate awk's behavior in selecting string versus
  numeric operations at run time by inspection of the operands, but it would
  be gross and inefficient.
! Besides, a2p almost always guesses right.
  .PP
  Storage for the awk syntax tree is currently static, and can run out.
  .rn }` ''
--- 183,189 ----
  It would be possible to emulate awk's behavior in selecting string versus
  numeric operations at run time by inspection of the operands, but it would
  be gross and inefficient.
! Besides, a2p5 almost always guesses right.
  .PP
  Storage for the awk syntax tree is currently static, and can run out.
  .rn }` ''
===================================================================
RCS file: /master/contrib/perl5/x2p/s2p.man,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 s2p.man
*** 1.1.1.1	1995/12/08 20:14:28
--- s2p.man	1995/12/09 00:28:11
***************
*** 1,7 ****
  .rn '' }`
! ''' BSDI_CONTRIB,v1.41996/01/09 08:00:58
  ''' 
  ''' BSDI_CONTRIB,v
  ''' Revision 1.4  1996/01/09 08:00:58  sanders
  ''' added note about .SH file #! changes
  '''
  ''' Revision 1.3  1995/12/09 00:31:41  sanders
  ''' Included current set of BSDI patches to perl5
  '''
  .\" Revision 1.1.1.1  1995/12/08  20:14:28  sanders
  .\" Import of perl5.001m sources
  .\"
--- 1,10 ----
  .rn '' }`
! ''' BSDI_CONTRIB,v1.41996/01/09 08:00:58
  ''' 
  ''' BSDI_CONTRIB,v
  ''' Revision 1.4  1996/01/09 08:00:58  sanders
  ''' added note about .SH file #! changes
  '''
  ''' Revision 1.3  1995/12/09 00:31:41  sanders
  ''' Included current set of BSDI patches to perl5
  '''
+ .\" Revision 1.2  1995/12/09  00:28:11  sanders
+ .\" Perl5 Configuration
+ .\"
  .\" Revision 1.1.1.1  1995/12/08  20:14:28  sanders
  .\" Import of perl5.001m sources
  .\"
***************
*** 45,57 ****
  .ds L' `
  .ds R' '
  'br\}
! .TH S2P 1 NEW
  .SH NAME
! s2p - Sed to Perl translator
  .SH SYNOPSIS
! .B s2p [options] filename
  .SH DESCRIPTION
! .I S2p
  takes a sed script specified on the command line (or from standard input)
  and produces a comparable
  .I perl
--- 48,60 ----
  .ds L' `
  .ds R' '
  'br\}
! .TH S2P5 1 NEW
  .SH NAME
! s2p5 - Sed to Perl translator
  .SH SYNOPSIS
! .B s2p5 [options] filename
  .SH DESCRIPTION
! .I S2p5
  takes a sed script specified on the command line (or from standard input)
  and produces a comparable
  .I perl
***************
*** 72,78 ****
  .Sh "Considerations"
  The perl script produced looks very sed-ish, and there may very well be
  better ways to express what you want to do in perl.
! For instance, s2p does not make any use of the split operator, but you might
  want to.
  .PP
  The perl script you end up with may be either faster or slower than the original
--- 75,81 ----
  .Sh "Considerations"
  The perl script produced looks very sed-ish, and there may very well be
  better ways to express what you want to do in perl.
! For instance, s2p5 does not make any use of the split operator, but you might
  want to.
  .PP
  The perl script you end up with may be either faster or slower than the original
***************
*** 82,95 ****
  It's often possible to speed up the perl script by various methods, such
  as deleting all references to $\e and chop.
  .SH ENVIRONMENT
! S2p uses no environment variables.
  .SH AUTHOR
  Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  .SH FILES
  .SH SEE ALSO
  perl	The perl compiler/interpreter
  .br
! a2p	awk to perl translator
  .SH DIAGNOSTICS
  .SH BUGS
  .rn }` ''
--- 85,98 ----
  It's often possible to speed up the perl script by various methods, such
  as deleting all references to $\e and chop.
  .SH ENVIRONMENT
! S2p5 uses no environment variables.
  .SH AUTHOR
  Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  .SH FILES
  .SH SEE ALSO
  perl	The perl compiler/interpreter
  .br
! a2p5	awk to perl translator
  .SH DIAGNOSTICS
  .SH BUGS
  .rn }` ''
