summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes257
-rw-r--r--INSTALL7
-rw-r--r--av.c30
-rw-r--r--configure.com151
-rw-r--r--dump.c2
-rw-r--r--embed.h16
-rwxr-xr-xembed.pl5
-rw-r--r--ext/Sys/Syslog/Syslog.pm9
-rw-r--r--global.sym1
-rw-r--r--lib/File/Spec/Mac.pm4
-rw-r--r--lib/File/Spec/Unix.pm4
-rw-r--r--lib/File/Spec/VMS.pm8
-rw-r--r--lib/File/Spec/Win32.pm12
-rw-r--r--makedef.pl1
-rw-r--r--objXSUB.h4
-rw-r--r--op.c19
-rw-r--r--op.h1
-rw-r--r--os2/diff.configure23
-rw-r--r--os2/dl_os2.c10
-rw-r--r--os2/dlfcn.h1
-rw-r--r--os2/os2.sym1
-rwxr-xr-xperlapi.c7
-rw-r--r--pod/perl.pod5
-rw-r--r--pod/perl5004delta.pod16
-rw-r--r--pod/perl5005delta.pod8
-rw-r--r--pod/perlboot.pod26
-rw-r--r--pod/perldata.pod12
-rw-r--r--pod/perldebug.pod26
-rw-r--r--pod/perldelta.pod103
-rw-r--r--pod/perldiag.pod82
-rw-r--r--pod/perlembed.pod78
-rw-r--r--pod/perlfaq.pod8
-rw-r--r--pod/perlfaq2.pod2
-rw-r--r--pod/perlfaq4.pod6
-rw-r--r--pod/perlfaq5.pod16
-rw-r--r--pod/perlfaq6.pod4
-rw-r--r--pod/perlfaq7.pod22
-rw-r--r--pod/perlfaq8.pod4
-rw-r--r--pod/perlfaq9.pod6
-rw-r--r--pod/perlfilter.pod4
-rw-r--r--pod/perlguts.pod4
-rw-r--r--pod/perlipc.pod4
-rw-r--r--pod/perllexwarn.pod28
-rw-r--r--pod/perllocale.pod2
-rw-r--r--pod/perlmodinstall.pod2
-rw-r--r--pod/perlmodlib.pod8
-rw-r--r--pod/perlobj.pod10
-rw-r--r--pod/perlopentut.pod16
-rw-r--r--pod/perlpod.pod2
-rw-r--r--pod/perlport.pod92
-rw-r--r--pod/perlre.pod34
-rw-r--r--pod/perlref.pod6
-rw-r--r--pod/perlreftut.pod22
-rw-r--r--pod/perlsub.pod4
-rw-r--r--pod/perltie.pod2
-rw-r--r--pod/perltodo.pod8
-rw-r--r--pod/perltoot.pod8
-rw-r--r--pod/perltootc.pod8
-rw-r--r--pod/perltrap.pod10
-rw-r--r--pod/perlvar.pod18
-rw-r--r--pod/perlxstut.pod8
-rw-r--r--pod/pod2usage.PL4
-rw-r--r--pod/podselect.PL4
-rw-r--r--pp_hot.c138
-rw-r--r--proto.h4
-rw-r--r--regcomp.c3
-rwxr-xr-xt/lib/anydbm.t24
-rwxr-xr-xt/lib/glob-basic.t5
-rwxr-xr-xt/op/avhv.t41
-rwxr-xr-xt/op/hashwarn.t11
-rw-r--r--toke.c4
-rw-r--r--utils/dprofpp.PL5
-rw-r--r--vms/descrip_mms.template12
-rw-r--r--vms/ext/filespec.t2
-rw-r--r--vms/gen_shrfls.pl6
-rw-r--r--vms/perlvms.pod19
-rw-r--r--vms/subconfigure.com2
-rw-r--r--vms/vms.c32
-rw-r--r--vms/vmsish.h4
79 files changed, 1134 insertions, 483 deletions
diff --git a/Changes b/Changes
index cabbab266e..a84b435d7c 100644
--- a/Changes
+++ b/Changes
@@ -55,7 +55,7 @@ current addresses (as of February 2000):
Hugo van der Sanden <hv@crypt0.demon.co.uk>
Michael G Schwern <schwern@pobox.com>
Roderick Schertler <roderick@argon.org>
- Kurt D. Starsinic <kstar@isinet.com>
+ Kurt D. Starsinic <kstar@chapin.edu>
Benjamin Stuhl <sho_pi@hotmail.com>
Dan Sugalski <sugalskd@osshe.edu>
Nathan Torkington <gnat@frii.com>
@@ -95,6 +95,261 @@ Version v5.6.0
--------------
____________________________________________________________________________
+[ 5492] By: gsar on 2000/03/03 17:48:31
+ Log: support for list assignment to pseudohashes (from John Tobey
+ <jtobey@john-edwin-tobey.org>)
+ Branch: perl
+ ! av.c dump.c embed.h embed.pl global.sym objXSUB.h op.c op.h
+ ! perlapi.c pp_hot.c proto.h t/op/avhv.t t/op/hashwarn.t
+____________________________________________________________________________
+[ 5491] By: gsar on 2000/03/03 16:45:49
+ Log: add MakeMaker caveat to INSTALL (from Andy Dougherty)
+ Branch: perl
+ ! INSTALL
+____________________________________________________________________________
+[ 5490] By: gsar on 2000/03/03 16:44:42
+ Log: perldelta tweaks
+ Branch: perl
+ ! pod/perldelta.pod
+____________________________________________________________________________
+[ 5489] By: gsar on 2000/03/03 16:26:52
+ Log: /dev/console may not be writable in Syslog.pm (from Ask Bjoern Hansen
+ <ask@valueclick.com>)
+ Branch: perl
+ ! ext/Sys/Syslog/Syslog.pm
+____________________________________________________________________________
+[ 5488] By: gsar on 2000/03/03 16:21:34
+ Log: OS/2 patches for dlclose() support (from Yitzchak Scott-Thoennes
+ <sthoenna@efn.org>)
+ Branch: perl
+ ! makedef.pl os2/diff.configure os2/dl_os2.c os2/dlfcn.h
+ ! os2/os2.sym
+____________________________________________________________________________
+[ 5487] By: gsar on 2000/03/03 16:16:34
+ Log: skip test on AFS (from Hans Ranke <Hans.Ranke@ei.tum.de>)
+ Branch: perl
+ ! t/lib/glob-basic.t
+____________________________________________________________________________
+[ 5486] By: gsar on 2000/03/03 15:42:28
+ Log: integrate cfgperl and vmsperl contents into mainline
+ Branch: perl
+ ! pod/perl.pod
+ !> (integrate 38 files)
+____________________________________________________________________________
+[ 5485] By: jhi on 2000/03/03 15:21:40
+ Log: pull the sparcv9 workshop libraries in front of loclibpth
+ Branch: cfgperl
+ ! hints/solaris_2.sh
+____________________________________________________________________________
+[ 5484] By: jhi on 2000/03/03 15:09:03
+ Log: Introduce i_ieefp because FreeBSD on ix86 needs that
+ for ftpsetmask(0); regen Configure.
+ Branch: cfgperl
+ ! Configure Porting/Glossary Porting/config.sh Porting/config_H
+ ! config_h.SH epoc/config.sh perl.h vms/subconfigure.com
+ ! vos/config.def vos/config.h vos/config_h.SH_orig
+ ! win32/config.bc win32/config.gc win32/config.vc
+ ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
+____________________________________________________________________________
+[ 5483] By: jhi on 2000/03/03 05:37:58
+ Log: The _cflags must be left-aligned.
+ Branch: cfgperl
+ ! hints/irix_6.sh
+____________________________________________________________________________
+[ 5482] By: bailey on 2000/03/03 04:42:45
+ Log: Once more unto resync
+ Branch: vmsperl
+ !> (integrate 48 files)
+____________________________________________________________________________
+[ 5481] By: bailey on 2000/03/03 04:36:46
+ Log: VMS-specific perldelta update
+ Branch: vmsperl
+ ! pod/perldelta.pod
+____________________________________________________________________________
+[ 5480] By: bailey on 2000/03/03 04:05:28
+ Log: Set up Perl invocation method during configuration (Peter Prymmer)
+ Add missing bits to various utilities and install them (ditto)
+ Branch: vmsperl
+ ! configure.com pod/pod2usage.PL pod/podselect.PL
+ ! utils/dprofpp.PL vms/descrip_mms.template
+____________________________________________________________________________
+[ 5479] By: bailey on 2000/03/03 04:01:48
+ Log: Fix test to match new behavior of vmsify() (Craig Berry)
+ Branch: vmsperl
+ ! vms/ext/filespec.t
+____________________________________________________________________________
+[ 5478] By: bailey on 2000/03/03 03:54:10
+ Log: Try to intuit whether typeless file invoked in subprocess
+ is an executable image or DCL procedure.
+ Branch: vmsperl
+ ! vms/perlvms.pod vms/vms.c
+____________________________________________________________________________
+[ 5477] By: bailey on 2000/03/03 03:37:18
+ Log: Remove leftover bits of VAXC support (Dan Sugalski)
+ Branch: vmsperl
+ ! vms/gen_shrfls.pl
+____________________________________________________________________________
+[ 5476] By: bailey on 2000/03/03 03:34:51
+ Log: Add missing declaration (Dan Sugalski)
+ Branch: vmsperl
+ ! vms/vms.c
+____________________________________________________________________________
+[ 5475] By: gsar on 2000/03/03 03:27:52
+ Log: warn about /(?p{})/ (from Simon Cozens)
+ Branch: perl
+ ! regcomp.c toke.c
+____________________________________________________________________________
+[ 5474] By: bailey on 2000/03/03 03:27:05
+ Log: Ad hoc patch for duping stdout into stderr
+ Branch: vmsperl
+ ! vms/vms.c
+____________________________________________________________________________
+[ 5473] By: bailey on 2000/03/03 03:23:29
+ Log: Bypass PERL_INC_VERSION_LIST until we support in in Configure.Com
+ Branch: vmsperl
+ ! vms/subconfigure.com vms/vmsish.h
+____________________________________________________________________________
+[ 5472] By: gsar on 2000/03/03 02:58:49
+ Log: File::Spec bugs (spotted by Hack Kampbjorn <hack@hackdata.com>)
+ Branch: perl
+ ! lib/File/Spec/Mac.pm lib/File/Spec/Unix.pm
+ ! lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm
+____________________________________________________________________________
+[ 5471] By: jhi on 2000/03/03 02:38:23
+ Log: more todo
+ Branch: cfgperl
+ ! Todo-5.6
+____________________________________________________________________________
+[ 5470] By: gsar on 2000/03/03 02:36:02
+ Log: skip test if db doesn't have null key support
+ Branch: perl
+ ! t/lib/anydbm.t
+____________________________________________________________________________
+[ 5469] By: jhi on 2000/03/03 02:26:53
+ Log: Integrate with Sarathy.
+ Branch: cfgperl
+ !> INSTALL lib/AutoSplit.pm lib/ExtUtils/xsubpp lib/SelfLoader.pm
+ !> lib/Test/Harness.pm lib/constant.pm pod/perl.pod
+ !> pod/perldelta.pod pod/perlpod.pod pod/perlre.pod
+ !> pod/perltoc.pod regcomp.c t/op/misc.t t/op/pat.t toke.c
+ !> utils/h2xs.PL win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 5468] By: jhi on 2000/03/03 02:24:05
+ Log: irix hints tweak
+ Branch: cfgperl
+ ! hints/irix_6.sh
+____________________________________________________________________________
+[ 5467] By: gsar on 2000/03/03 02:19:50
+ Log: /(?p{})/ changed to /(??{})/, per Larry's suggestion (from
+ Simon Cozens <simon@othersideofthe.earth.li>)
+ Branch: perl
+ ! lib/AutoSplit.pm lib/ExtUtils/xsubpp lib/SelfLoader.pm
+ ! pod/perlre.pod pod/perltoc.pod regcomp.c t/op/misc.t
+ ! t/op/pat.t toke.c
+____________________________________________________________________________
+[ 5466] By: jhi on 2000/03/03 02:12:41
+ Log: in words order bad
+ Branch: cfgperl
+ ! pod/perlre.pod
+____________________________________________________________________________
+[ 5465] By: jhi on 2000/03/03 02:09:45
+ Log: /[[:alpha]/ now dies on unmatched [] instead of
+ "an unknown character class" (spotted by Tom Christiansen)
+ Branch: cfgperl
+ ! regcomp.c t/pragma/warn/regcomp
+____________________________________________________________________________
+[ 5464] By: gsar on 2000/03/03 02:04:48
+ Log: perldelta notes about IO::Socket changes (from Graham Barr)
+ Branch: perl
+ ! pod/perldelta.pod
+____________________________________________________________________________
+[ 5463] By: gsar on 2000/03/03 02:02:50
+ Log: relax restrictions on constant names a bit (from M J T Guy)
+ Branch: perl
+ ! lib/constant.pm
+____________________________________________________________________________
+[ 5462] By: gsar on 2000/03/03 01:59:49
+ Log: support for generation of accessor functions (from Hugo van der
+ Sanden)
+ Branch: perl
+ ! utils/h2xs.PL
+____________________________________________________________________________
+[ 5461] By: jhi on 2000/03/03 01:51:53
+ Log: cosmetics
+ Branch: cfgperl
+ ! t/op/pack.t
+____________________________________________________________________________
+[ 5460] By: jhi on 2000/03/03 01:50:07
+ Log: detypo
+ Branch: cfgperl
+ ! t/op/pack.t
+____________________________________________________________________________
+[ 5459] By: gsar on 2000/03/03 01:46:35
+ Log: pod tweaks
+ Branch: perl
+ ! pod/perl.pod pod/perlpod.pod
+____________________________________________________________________________
+[ 5458] By: jhi on 2000/03/03 01:25:21
+ Log: solaris hints tweak
+ Branch: cfgperl
+ ! hints/solaris_2.sh
+____________________________________________________________________________
+[ 5457] By: jhi on 2000/03/02 22:56:49
+ Log: detypo
+ Branch: cfgperl
+ ! hints/solaris_2.sh
+____________________________________________________________________________
+[ 5456] By: gsar on 2000/03/02 21:15:11
+ Log: Test::Harness uses $ENV{HARNESS_PERL_SWITCHES} when running perl;
+ add test targets for -C switch on windows
+ Branch: perl
+ ! lib/Test/Harness.pm win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 5455] By: gsar on 2000/03/02 21:06:49
+ Log: add note about failed tests on memory starved systems (from
+ Andy Dougherty)
+ Branch: perl
+ ! INSTALL
+____________________________________________________________________________
+[ 5454] By: jhi on 2000/03/02 21:03:35
+ Log: Integrate with Sarathy.
+ Branch: cfgperl
+ !> Changes lib/Pod/Find.pm lib/Pod/Html.pm lib/Pod/Man.pm
+ !> lib/Term/Cap.pm lib/Test/Harness.pm lib/blib.pm
+ !> pod/perldata.pod pod/perldelta.pod pod/perlop.pod
+____________________________________________________________________________
+[ 5453] By: jhi on 2000/03/02 20:58:43
+ Log: Further long double patches from Spider Boardman.
+ Branch: cfgperl
+ ! t/comp/use.t t/lib/bigfltpm.t t/op/pack.t t/op/universal.t
+____________________________________________________________________________
+[ 5452] By: gsar on 2000/03/02 20:52:08
+ Log: move doc about v-strings from perlop to perldata (suggested by
+ David Dyck <dcd@tc.fluke.com>)
+ Branch: perl
+ ! pod/perldata.pod pod/perldelta.pod pod/perlop.pod
+____________________________________________________________________________
+[ 5451] By: gsar on 2000/03/02 20:30:29
+ Log: integrate cfgperl changes into mainline
+ Branch: perl
+ !> Configure hints/irix_6.sh pp.c
+____________________________________________________________________________
+[ 5450] By: gsar on 2000/03/02 20:08:10
+ Log: still other multiline match cleanups (from Greg Bacon)
+ Branch: perl
+ ! Changes lib/Pod/Find.pm lib/Pod/Html.pm lib/Pod/Man.pm
+ ! lib/Term/Cap.pm lib/Test/Harness.pm lib/blib.pm
+____________________________________________________________________________
+[ 5449] By: jhi on 2000/03/02 20:01:58
+ Log: Integrate with Sarathy.
+ Branch: cfgperl
+ !> configure.com ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
+ !> lib/ExtUtils/MM_VMS.pm lib/Test/Harness.pm t/lib/glob-basic.t
+ !> t/pragma/warn/8signal t/pragma/warn/pp_ctl
+ !> vms/descrip_mms.template vms/gen_shrfls.pl
+ !> vms/subconfigure.com vms/vms.c win32/Makefile
+ !> win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
+____________________________________________________________________________
[ 5448] By: jhi on 2000/03/02 20:00:37
Log: workaround for Tru64 compiler bug (cleaner fix will have
to wait until 5.6.1), from Spider Boardman
diff --git a/INSTALL b/INSTALL
index 7a3a0c5c11..de8017ae2e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -380,6 +380,10 @@ be used for installing those add-on modules and scripts.
By default, ExtUtils::MakeMaker will install architecture-independent
modules into $sitelib and architecture-dependent modules into $sitearch.
+NOTE: As of 5.6.0, ExtUtils::MakeMaker will use $sitelib and $sitearch,
+but will not use the other site-specific directories. Volunteers to
+fix this are needed.
+
=item Directories for vendor-supplied add-on files
Lastly, if you are building a binary distribution of perl for
@@ -432,6 +436,9 @@ Note how in this example, the vendor-supplied directories are in the
/usr hierarchy, while the directories reserved for the end-user are in
the /usr/local hierarchy.
+NOTE: As of 5.6.0, ExtUtils::MakeMaker does not use these directories.
+Volunteers to fix this are needed.
+
The entire installed library hierarchy is installed in locations with
version numbers, keeping the installations of different versions distinct.
However, later installations of Perl can still be configured to search the
diff --git a/av.c b/av.c
index c7ccfae080..1253c1261f 100644
--- a/av.c
+++ b/av.c
@@ -805,6 +805,20 @@ S_avhv_index_sv(pTHX_ SV* sv)
return index;
}
+STATIC I32
+S_avhv_index(pTHX_ AV *av, SV *keysv, U32 hash)
+{
+ HV *keys;
+ HE *he;
+ STRLEN n_a;
+
+ keys = avhv_keys(av);
+ he = hv_fetch_ent(keys, keysv, FALSE, hash);
+ if (!he)
+ Perl_croak(aTHX_ "No such pseudo-hash field \"%s\"", SvPV(keysv,n_a));
+ return avhv_index_sv(HeVAL(he));
+}
+
HV*
Perl_avhv_keys(pTHX_ AV *av)
{
@@ -824,17 +838,15 @@ Perl_avhv_keys(pTHX_ AV *av)
}
SV**
+Perl_avhv_store_ent(pTHX_ AV *av, SV *keysv, SV *val, U32 hash)
+{
+ return av_store(av, avhv_index(av, keysv, hash), val);
+}
+
+SV**
Perl_avhv_fetch_ent(pTHX_ AV *av, SV *keysv, I32 lval, U32 hash)
{
- SV **indsvp;
- HV *keys = avhv_keys(av);
- HE *he;
- STRLEN n_a;
-
- he = hv_fetch_ent(keys, keysv, FALSE, hash);
- if (!he)
- Perl_croak(aTHX_ "No such pseudo-hash field \"%s\"", SvPV(keysv,n_a));
- return av_fetch(av, avhv_index_sv(HeVAL(he)), lval);
+ return av_fetch(av, avhv_index(av, keysv, hash), lval);
}
SV *
diff --git a/configure.com b/configure.com
index 5c970e254c..a1e87d5d8a 100644
--- a/configure.com
+++ b/configure.com
@@ -999,6 +999,39 @@ $ ENDIF
$!
$ ENDIF !%Config-I-VMS, skip remaining "where install" questions
$!
+$ perl_symbol = "true"
+$ perl_verb = ""
+$ dflt = "y"
+$ IF .NOT.silent
+$ THEN
+$ echo ""
+$ echo "%Config-I-VMS, You may choose to write ''packageup'_SETUP.COM to assign a foreign"
+$ echo "-Config-I-VMS, symbol to invoke ''package', which is the usual method."
+$ echO "-Config-I-VMS, If you do not do so then you would need a DCL command verb at the"
+$ echo "-Config-I-VMS, process or the system wide level."
+$ ENDIF
+$ rp = "Invoke perl as a global symbol foreign command [''dflt'] "
+$ GOSUB myread
+$ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false"
+$!
+$ IF (.NOT.perl_symbol)
+$ THEN
+$ dflt = "y"
+$ IF .NOT.silent
+$ THEN
+$ echo ""
+$ echo "%Config-I-VMS, Since you won't be using a symbol you must choose to put the ''packageup'"
+$ echo "-Config-I-VMS, verb in a per-process table or in the system wide DCLTABLES (which"
+$ echo "-Config-I-VMS, would require write privilege)."
+$ ENDIF
+$ rp = "Invoke perl as a per process command verb [ ''dflt' ] "
+$ GOSUB myread
+$ IF (.NOT.ans).AND.(ans.NES."")
+$ THEN perl_verb = "DCLTABLES"
+$ ELSE perl_verb = "PROCESS"
+$ ENDIF
+$ ENDIF ! (.NOT.perl_symbol)
+$!
$!: set the base revision
$ baserev="5"
$!: get the patchlevel
@@ -2145,6 +2178,28 @@ $ IF f$search("config.msg") .eqs. "" THEN echo "OK."
$!
$! %Config-I-VMS, write perl_setup.com here
$!
+$ IF (.NOT.perl_symbol)
+$ THEN
+$ file_2_find = "[-]''packageup'.cld"
+$ echo ""
+$ echo4 "%Config-I-VMS, The perl.cld file is now being written..."
+$ OPEN/WRITE CONFIG 'file_2_find'
+$ IF (use_vmsdebug_perl)
+$ THEN
+$ WRITE CONFIG "define verb dbgperl"
+$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]dbgperl''ext'")
+$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
+$ WRITE CONFIG ""
+$ WRITE CONFIG "define verb perl"
+$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]ndbgPerl''ext'")
+$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
+$ ELSE
+$ WRITE CONFIG "define verb perl"
+$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]perl''ext'")
+$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
+$ ENDIF
+$ CLOSE CONFIG
+$ ENDIF ! (.NOT.perl_symbol)
$ echo ""
$ echo4 "%Config-I-VMS, The perl_setup.com file is now being written..."
$ file_2_find = "[-]perl_setup.com"
@@ -2162,20 +2217,34 @@ $ prefix = prefix - "000000."
$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN -
prefix = prefix - "]" + ".]"
$ WRITE CONFIG "$ define/translation=concealed Perl_Root ''prefix'"
-$ write config "$ ext = "".exe"""
-$ if sharedperl .eqs. "Y"
-$ then
+$ WRITE CONFIG "$ ext = "".exe"""
+$ IF sharedperl .EQS. "Y"
+$ THEN
$ write config "$ if f$getsyi(""ARCH_NAME"") .nes. ""VAX"" then ext = "".AXE"""
-$ endif
-$ IF use_vmsdebug_perl .eqs. "Y"
-$ then
-$ WRITE CONFIG "$ dbgperl :== $Perl_Root:[000000]dbgPerl'ext'"
-$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]ndbgPerl'ext'"
-$ WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
-$ else
-$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl'ext'"
-$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
-$ endif
+$ ENDIF
+$ IF (perl_symbol)
+$ THEN
+$ IF (use_vmsdebug_perl)
+$ THEN
+$ WRITE CONFIG "$ dbgperl :== $Perl_Root:[000000]dbgPerl'ext'"
+$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]ndbgPerl'ext'"
+$ WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
+$ ELSE
+$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl'ext'"
+$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
+$ ENDIF
+$ ELSE ! .NOT.perl_symbol
+$ IF (use_vmsdebug_perl)
+$ THEN
+$ WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
+$ ELSE
+$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
+$ ENDIF
+$ IF perl_verb .EQS. "PROCESS"
+$ THEN
+$ WRITE CONFIG "$ set command ''packagup'_ROOT:[000000]''packageup'.CLD"
+$ ENDIF
+$ ENDIF ! perl_symbol
$ WRITE CONFIG "$ define/nolog pod2text Perl_Root:[lib.pod]pod2text.com"
$ WRITE CONFIG "$ define/nolog pod2html Perl_Root:[lib.pod]pod2html.com"
$ WRITE CONFIG "$ define/nolog pod2man Perl_Root:[lib.pod]pod2man.com"
@@ -2189,14 +2258,40 @@ $ ENDIF
$ WRITE CONFIG "$!"
$ WRITE CONFIG "$! Symbols for commonly used scripts:"
$ WRITE CONFIG "$!"
-$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t"""
-$ WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text"""
-$ WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html"""
-$ WRITE CONFIG "$!pod2man == ""'"+"'Perl' pod2man"""
-$ WRITE CONFIG "$!Perlbug == ""'"+"'Perl' Perl_Root:[lib]Perlbug.com"""
-$ WRITE CONFIG "$!c2ph == ""'"+"'Perl' c2ph"""
-$ WRITE CONFIG "$!h2ph == ""'"+"'Perl' h2ph"""
-$ WRITE CONFIG "$!h2xs == ""'"+"'Perl' h2xs"""
+$ IF (perl_symbol)
+$ THEN
+$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t"""
+$ WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text"""
+$ WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html"""
+$ WRITE CONFIG "$ pod2latex == ""'"+"'Perl' Perl_Root:[lib.pod]pod2latex.com"""
+$ WRITE CONFIG "$!pod2man == ""'"+"'Perl' pod2man"""
+$ WRITE CONFIG "$!Perlbug == ""'"+"'Perl' Perl_Root:[lib]Perlbug.com"""
+$ WRITE CONFIG "$ c2ph == ""'"+"'Perl' Perl_Root:[utils]c2ph.com"""
+$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
+$ THEN
+$ WRITE CONFIG "$ dprofpp == ""'"+"'Perl' Perl_Root:[utils]dprofpp.com"""
+$ ENDIF
+$ WRITE CONFIG "$ h2ph == ""'"+"'Perl' Perl_Root:[utils]h2ph.com"""
+$ WRITE CONFIG "$ h2xs == ""'"+"'Perl' Perl_Root:[utils]h2xs.com"""
+$ WRITE CONFIG "$!perlcc == ""'"+"'Perl' Perl_Root:[utils]perlcc.com"""
+$ WRITE CONFIG "$ splain == ""'"+"'Perl' Perl_Root:[utils]splain.com"""
+$ ELSE
+$ WRITE CONFIG "$ Perldoc == ""Perl Perl_Root:[lib.pod]Perldoc.com -t"""
+$ WRITE CONFIG "$ pod2text == ""Perl pod2text"""
+$ WRITE CONFIG "$ pod2html == ""Perl pod2html"""
+$ WRITE CONFIG "$ pod2latex == ""Perl Perl_Root:[lib.pod]pod2latex.com"""
+$ WRITE CONFIG "$!pod2man == ""Perl pod2man"""
+$ WRITE CONFIG "$!Perlbug == ""Perl Perl_Root:[lib]Perlbug.com"""
+$ WRITE CONFIG "$ c2ph == ""Perl Perl_Root:[utils]c2ph.com"""
+$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
+$ THEN
+$ WRITE CONFIG "$ dprofpp == ""Perl Perl_Root:[utils]dprofpp.com"""
+$ ENDIF
+$ WRITE CONFIG "$ h2ph == ""Perl Perl_Root:[utils]h2ph.com"""
+$ WRITE CONFIG "$ h2xs == ""Perl Perl_Root:[utils]h2xs.com"""
+$ WRITE CONFIG "$!perlcc == ""Perl Perl_Root:[utils]perlcc.com"""
+$ WRITE CONFIG "$ splain == ""Perl Perl_Root:[utils]splain.com"""
+$ ENDIF
$ CLOSE CONFIG
$!
$ echo ""
@@ -2206,6 +2301,20 @@ $ echo "-Config-I-VMS, Add that file (or an @ call to it) to your [SY]LOGIN.COM
$ echo "-Config-I-VMS, when you are satisfied with a successful compilation,"
$ echo "-Config-I-VMS, testing, and installation of your perl."
$ echo ""
+$ IF ((.NOT.perl_symbol) .AND. (perl_verb .EQS. "DCLTABLES"))
+$ THEN
+$ file_2_find = "[-]''packageup'_install.com"
+$ OPEN/WRITE CONFIG 'file_2_find
+$ WRITE CONFIG "$ set command perl /table=sys$common:[syslib]dcltables.exe -"
+$ WRITE CONFIG " /output=sys$common:[syslib]dcltables.exe"
+$ WRITE CONFIG "$ install replace sys$common:[syslib]dcltables.exe"
+$ CLOSE CONFIG
+$ echo4 ""
+$ echo4 "%Config-I-VMS, In order to install the ''packageup' verb into DCLTABLES run:"
+$ echo4 "-Config-I-VMS, @ ''F$SEARCH(file_2_find)'"
+$ echo4 "-Config-I-VMS, after a successful build, test, and install. Do so with CMKRNL privilege."
+$ echo4 ""
+$ ENDIF
$!
$!figure out where we "are" by parsing 'vms_default_directory_name'
$!
diff --git a/dump.c b/dump.c
index 3dd9b0e2e1..189d6721f1 100644
--- a/dump.c
+++ b/dump.c
@@ -433,6 +433,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o)
if (o->op_type == OP_AASSIGN) {
if (o->op_private & OPpASSIGN_COMMON)
sv_catpv(tmpsv, ",COMMON");
+ if (o->op_private & OPpASSIGN_HASH)
+ sv_catpv(tmpsv, ",HASH");
}
else if (o->op_type == OP_SASSIGN) {
if (o->op_private & OPpASSIGN_BACKWARDS)
diff --git a/embed.h b/embed.h
index 21a812d28e..e6bafffe79 100644
--- a/embed.h
+++ b/embed.h
@@ -71,6 +71,7 @@
#define avhv_delete_ent Perl_avhv_delete_ent
#define avhv_exists_ent Perl_avhv_exists_ent
#define avhv_fetch_ent Perl_avhv_fetch_ent
+#define avhv_store_ent Perl_avhv_store_ent
#define avhv_iternext Perl_avhv_iternext
#define avhv_iterval Perl_avhv_iterval
#define avhv_keys Perl_avhv_keys
@@ -825,6 +826,7 @@
#endif
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
#define avhv_index_sv S_avhv_index_sv
+#define avhv_index S_avhv_index
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
#define do_trans_CC_simple S_do_trans_CC_simple
@@ -945,6 +947,8 @@
#define qsortsv S_qsortsv
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+#define do_maybe_phash S_do_maybe_phash
+#define do_oddball S_do_oddball
#define get_db_sub S_get_db_sub
#define method_common S_method_common
#endif
@@ -1522,6 +1526,7 @@
#define avhv_delete_ent(a,b,c,d) Perl_avhv_delete_ent(aTHX_ a,b,c,d)
#define avhv_exists_ent(a,b,c) Perl_avhv_exists_ent(aTHX_ a,b,c)
#define avhv_fetch_ent(a,b,c,d) Perl_avhv_fetch_ent(aTHX_ a,b,c,d)
+#define avhv_store_ent(a,b,c,d) Perl_avhv_store_ent(aTHX_ a,b,c,d)
#define avhv_iternext(a) Perl_avhv_iternext(aTHX_ a)
#define avhv_iterval(a,b) Perl_avhv_iterval(aTHX_ a,b)
#define avhv_keys(a) Perl_avhv_keys(aTHX_ a)
@@ -2249,6 +2254,7 @@
#endif
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
#define avhv_index_sv(a) S_avhv_index_sv(aTHX_ a)
+#define avhv_index(a,b,c) S_avhv_index(aTHX_ a,b,c)
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
#define do_trans_CC_simple(a) S_do_trans_CC_simple(aTHX_ a)
@@ -2369,6 +2375,8 @@
#define qsortsv(a,b,c) S_qsortsv(aTHX_ a,b,c)
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+#define do_maybe_phash(a,b,c,d,e) S_do_maybe_phash(aTHX_ a,b,c,d,e)
+#define do_oddball(a,b,c) S_do_oddball(aTHX_ a,b,c)
#define get_db_sub(a,b) S_get_db_sub(aTHX_ a,b)
#define method_common(a,b) S_method_common(aTHX_ a,b)
#endif
@@ -2958,6 +2966,8 @@
#define avhv_exists_ent Perl_avhv_exists_ent
#define Perl_avhv_fetch_ent CPerlObj::Perl_avhv_fetch_ent
#define avhv_fetch_ent Perl_avhv_fetch_ent
+#define Perl_avhv_store_ent CPerlObj::Perl_avhv_store_ent
+#define avhv_store_ent Perl_avhv_store_ent
#define Perl_avhv_iternext CPerlObj::Perl_avhv_iternext
#define avhv_iternext Perl_avhv_iternext
#define Perl_avhv_iterval CPerlObj::Perl_avhv_iterval
@@ -4404,6 +4414,8 @@
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
#define S_avhv_index_sv CPerlObj::S_avhv_index_sv
#define avhv_index_sv S_avhv_index_sv
+#define S_avhv_index CPerlObj::S_avhv_index
+#define avhv_index S_avhv_index
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
#define S_do_trans_CC_simple CPerlObj::S_do_trans_CC_simple
@@ -4616,6 +4628,10 @@
#define qsortsv S_qsortsv
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+#define S_do_maybe_phash CPerlObj::S_do_maybe_phash
+#define do_maybe_phash S_do_maybe_phash
+#define S_do_oddball CPerlObj::S_do_oddball
+#define do_oddball S_do_oddball
#define S_get_db_sub CPerlObj::S_get_db_sub
#define get_db_sub S_get_db_sub
#define S_method_common CPerlObj::S_method_common
diff --git a/embed.pl b/embed.pl
index bf0b29c9be..0c568e37f1 100755
--- a/embed.pl
+++ b/embed.pl
@@ -1354,6 +1354,7 @@ p |I32 |apply |I32 type|SV** mark|SV** sp
Ap |SV* |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
Ap |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
Ap |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
+Ap |SV** |avhv_store_ent |AV *ar|SV* keysv|SV* val|U32 hash
Ap |HE* |avhv_iternext |AV *ar
Ap |SV* |avhv_iterval |AV *ar|HE* entry
Ap |HV* |avhv_keys |AV *ar
@@ -2156,6 +2157,7 @@ END_EXTERN_C
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
s |I32 |avhv_index_sv |SV* sv
+s |I32 |avhv_index |AV* av|SV* sv|U32 hash
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
@@ -2287,6 +2289,9 @@ s |void |qsortsv |SV ** array|size_t num_elts|SVCOMPARE_t f
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+s |int |do_maybe_phash |AV *ary|SV **lelem|SV **firstlelem \
+ |SV **relem|SV **lastrelem
+s |void |do_oddball |HV *hash|SV **relem|SV **firstrelem
s |CV* |get_db_sub |SV **svp|CV *cv
s |SV* |method_common |SV* meth|U32* hashp
#endif
diff --git a/ext/Sys/Syslog/Syslog.pm b/ext/Sys/Syslog/Syslog.pm
index b4473744c5..17ebb379c6 100644
--- a/ext/Sys/Syslog/Syslog.pm
+++ b/ext/Sys/Syslog/Syslog.pm
@@ -242,10 +242,11 @@ sub syslog {
}
}
else {
- open(CONS,">/dev/console");
- print CONS "<$facility.$priority>$whoami: $message\r";
- exit if defined $pid; # if fork failed, we're parent
- close CONS;
+ if (open(CONS,">/dev/console")) {
+ print CONS "<$facility.$priority>$whoami: $message\r";
+ exit if defined $pid; # if fork failed, we're parent
+ close CONS;
+ }
}
}
}
diff --git a/global.sym b/global.sym
index e69747a626..e34d5c08c7 100644
--- a/global.sym
+++ b/global.sym
@@ -24,6 +24,7 @@ Perl_Gv_AMupdate
Perl_avhv_delete_ent
Perl_avhv_exists_ent
Perl_avhv_fetch_ent
+Perl_avhv_store_ent
Perl_avhv_iternext
Perl_avhv_iterval
Perl_avhv_keys
diff --git a/lib/File/Spec/Mac.pm b/lib/File/Spec/Mac.pm
index be9a43cb78..959e33d0cf 100644
--- a/lib/File/Spec/Mac.pm
+++ b/lib/File/Spec/Mac.pm
@@ -343,8 +343,8 @@ sub abs2rel {
Converts a relative path to an absolute path.
- $abs_path = $File::Spec->rel2abs( $destination ) ;
- $abs_path = $File::Spec->rel2abs( $destination, $base ) ;
+ $abs_path = File::Spec->rel2abs( $destination ) ;
+ $abs_path = File::Spec->rel2abs( $destination, $base ) ;
If $base is not present or '', then L<cwd()> is used. If $base is relative,
then it is converted to absolute form using L</rel2abs()>. This means that it
diff --git a/lib/File/Spec/Unix.pm b/lib/File/Spec/Unix.pm
index f4e9f27bd1..0cbc8c7e57 100644
--- a/lib/File/Spec/Unix.pm
+++ b/lib/File/Spec/Unix.pm
@@ -383,8 +383,8 @@ sub abs2rel {
Converts a relative path to an absolute path.
- $abs_path = $File::Spec->rel2abs( $destination ) ;
- $abs_path = $File::Spec->rel2abs( $destination, $base ) ;
+ $abs_path = File::Spec->rel2abs( $destination ) ;
+ $abs_path = File::Spec->rel2abs( $destination, $base ) ;
If $base is not present or '', then L<cwd()> is used. If $base is relative,
then it is converted to absolute form using L</rel2abs()>. This means that it
diff --git a/lib/File/Spec/VMS.pm b/lib/File/Spec/VMS.pm
index 52519b953f..9514dd74b5 100644
--- a/lib/File/Spec/VMS.pm
+++ b/lib/File/Spec/VMS.pm
@@ -485,12 +485,12 @@ sub abs2rel {
}
# Figure out the effective $base and clean it up.
- if ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- elsif ( !defined( $base ) || $base eq '' ) {
+ if ( !defined( $base ) || $base eq '' ) {
$base = cwd() ;
}
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
else {
$base = $self->canonpath( $base ) ;
}
diff --git a/lib/File/Spec/Win32.pm b/lib/File/Spec/Win32.pm
index 85a71a23a3..aa95fbde36 100644
--- a/lib/File/Spec/Win32.pm
+++ b/lib/File/Spec/Win32.pm
@@ -341,8 +341,8 @@ sub abs2rel {
Converts a relative path to an absolute path.
- $abs_path = $File::Spec->rel2abs( $destination ) ;
- $abs_path = $File::Spec->rel2abs( $destination, $base ) ;
+ $abs_path = File::Spec->rel2abs( $destination ) ;
+ $abs_path = File::Spec->rel2abs( $destination, $base ) ;
If $base is not present or '', then L<cwd()> is used. If $base is relative,
then it is converted to absolute form using L</rel2abs()>. This means that it
@@ -368,12 +368,12 @@ sub rel2abs($;$;) {
if ( ! $self->file_name_is_absolute( $path ) ) {
- if ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- elsif ( !defined( $base ) || $base eq '' ) {
+ if ( !defined( $base ) || $base eq '' ) {
$base = cwd() ;
}
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
else {
$base = $self->canonpath( $base ) ;
}
diff --git a/makedef.pl b/makedef.pl
index b88b8e957d..ed3f1cccf8 100644
--- a/makedef.pl
+++ b/makedef.pl
@@ -270,6 +270,7 @@ elsif ($PLATFORM eq 'os2') {
dlopen
dlsym
dlerror
+ dlclose
my_tmpfile
my_tmpnam
my_flock
diff --git a/objXSUB.h b/objXSUB.h
index 86200bc9a1..bbe9f7dc7c 100644
--- a/objXSUB.h
+++ b/objXSUB.h
@@ -47,6 +47,10 @@
#define Perl_avhv_fetch_ent pPerl->Perl_avhv_fetch_ent
#undef avhv_fetch_ent
#define avhv_fetch_ent Perl_avhv_fetch_ent
+#undef Perl_avhv_store_ent
+#define Perl_avhv_store_ent pPerl->Perl_avhv_store_ent
+#undef avhv_store_ent
+#define avhv_store_ent Perl_avhv_store_ent
#undef Perl_avhv_iternext
#define Perl_avhv_iternext pPerl->Perl_avhv_iternext
#undef avhv_iternext
diff --git a/op.c b/op.c
index 9a3a187004..adf6aee7e0 100644
--- a/op.c
+++ b/op.c
@@ -3273,6 +3273,8 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
if (list_assignment(left)) {
dTHR;
+ OP *curop;
+
PL_modcount = 0;
PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
left = mod(left, OP_AASSIGN);
@@ -3283,12 +3285,19 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
op_free(right);
return Nullop;
}
- o = newBINOP(OP_AASSIGN, flags,
- list(force_list(right)),
- list(force_list(left)) );
+ curop = list(force_list(left));
+ o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
o->op_private = 0 | (flags >> 8);
+ for (curop = ((LISTOP*)curop)->op_first;
+ curop; curop = curop->op_sibling)
+ {
+ if (curop->op_type == OP_RV2HV &&
+ ((UNOP*)curop)->op_first->op_type != OP_GV) {
+ o->op_private |= OPpASSIGN_HASH;
+ break;
+ }
+ }
if (!(left->op_private & OPpLVAL_INTRO)) {
- OP *curop;
OP *lastop = o;
PL_generation++;
for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
@@ -3332,7 +3341,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
lastop = curop;
}
if (curop != o)
- o->op_private = OPpASSIGN_COMMON;
+ o->op_private |= OPpASSIGN_COMMON;
}
if (right && right->op_type == OP_SPLIT) {
OP* tmpop;
diff --git a/op.h b/op.h
index 52b68cb4b8..c9ec2df6f0 100644
--- a/op.h
+++ b/op.h
@@ -118,6 +118,7 @@ Deprecated. Use C<GIMME_V> instead.
/* Private for OP_AASSIGN */
#define OPpASSIGN_COMMON 64 /* Left & right have syms in common. */
+#define OPpASSIGN_HASH 32 /* Assigning to possible pseudohash. */
/* Private for OP_SASSIGN */
#define OPpASSIGN_BACKWARDS 64 /* Left & right switched. */
diff --git a/os2/diff.configure b/os2/diff.configure
index c8f3b5899b..59a8a5331c 100644
--- a/os2/diff.configure
+++ b/os2/diff.configure
@@ -1,18 +1,18 @@
---- Configure-pre Sun Jul 25 19:18:02 1999
-+++ Configure Wed Jul 28 17:50:14 1999
-@@ -1528,6 +1528,11 @@ if test X"$trnl" = X; then
+--- Configure.orig Tue Feb 29 19:07:00 2000
++++ Configure Thu Mar 2 10:10:24 2000
+@@ -1605,6 +1605,11 @@
esac
fi
if test X"$trnl" = X; then
-+ case "`echo foo|tr '\r' x 2>/dev/null`" in
-+ foox) trnl='\r' ;;
++ case "`echo foo|tr '\r\n' xy 2>/dev/null`" in
++ fooxy) trnl='\n\r' ;;
+ esac
+fi
+if test X"$trnl" = X; then
cat <<EOM >&2
$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
-@@ -1844,7 +1849,7 @@ for file in $loclist; do
+@@ -1921,7 +1926,7 @@
*)
echo "I don't know where '$file' is, and my life depends on it." >&4
echo "Go find a public domain implementation or fix your PATH setting!" >&4
@@ -21,16 +21,7 @@
;;
esac
done
-@@ -3688,7 +3693,7 @@ int main() {
- exit(0);
- }
- EOM
--if $cc -o gccvers gccvers.c; then
-+if $cc -o gccvers gccvers.c $ldflags; then
- gccversion=`./gccvers`
- case "$gccversion" in
- '') echo "You are not using GNU cc." ;;
-@@ -4892,7 +4897,7 @@ case "$libc" in
+@@ -5719,7 +5724,7 @@
esac
;;
esac
diff --git a/os2/dl_os2.c b/os2/dl_os2.c
index 4a9688cb59..aab48dd672 100644
--- a/os2/dl_os2.c
+++ b/os2/dl_os2.c
@@ -87,3 +87,13 @@ dlerror(void)
return buf;
}
+int
+dlclose(void *handle)
+{
+ ULONG rc;
+
+ if ((rc = DosFreeModule((HMODULE)handle)) == 0) return 0;
+
+ retcode = rc;
+ return 2;
+}
diff --git a/os2/dlfcn.h b/os2/dlfcn.h
index c96f97f82d..c2feee6000 100644
--- a/os2/dlfcn.h
+++ b/os2/dlfcn.h
@@ -1,3 +1,4 @@
void *dlopen(char *path, int mode);
void *dlsym(void *handle, char *symbol);
char *dlerror(void);
+int dlclose(void *handle);
diff --git a/os2/os2.sym b/os2/os2.sym
index 7724e566c1..685568623a 100644
--- a/os2/os2.sym
+++ b/os2/os2.sym
@@ -5,6 +5,7 @@ OS2_Perl_data
dlopen
dlsym
dlerror
+dlclose
my_tmpfile
my_tmpnam
my_flock
diff --git a/perlapi.c b/perlapi.c
index e26f9f1a63..7c19c22d8b 100755
--- a/perlapi.c
+++ b/perlapi.c
@@ -103,6 +103,13 @@ Perl_avhv_fetch_ent(pTHXo_ AV *ar, SV* keysv, I32 lval, U32 hash)
return ((CPerlObj*)pPerl)->Perl_avhv_fetch_ent(ar, keysv, lval, hash);
}
+#undef Perl_avhv_store_ent
+SV**
+Perl_avhv_store_ent(pTHXo_ AV *ar, SV* keysv, SV* val, U32 hash)
+{
+ return ((CPerlObj*)pPerl)->Perl_avhv_store_ent(ar, keysv, val, hash);
+}
+
#undef Perl_avhv_iternext
HE*
Perl_avhv_iternext(pTHXo_ AV *ar)
diff --git a/pod/perl.pod b/pod/perl.pod
index cb627cdb7a..7e940adae0 100644
--- a/pod/perl.pod
+++ b/pod/perl.pod
@@ -52,6 +52,7 @@ sections:
perlfork Perl fork() information
perlthrtut Perl threads tutorial
perllexwarn Perl warnings and their control
+ perlfilter Perl source filters
perldbmfilter Perl DBM filters
perlcompile Perl compiler suite intro
@@ -245,12 +246,12 @@ http://www.perl.com/CPAN/src/index.html
2) formerly known as MVS
3) formerly known as Digital UNIX and before that DEC OSF/1
4) compilers: Borland, Cygwin, Mingw32 EGCS/GCC, VC++
-
+
The following platforms have been known to build Perl from source,
but we haven't been able to verify their status for the current release,
either because the hardware/software platforms are rare or
because we don't have an active champion on these platforms--or both.
-
+
3b1 FPS Plan 9
AmigaOS GENIX PowerUX
ConvexOS Greenhills RISC/os
diff --git a/pod/perl5004delta.pod b/pod/perl5004delta.pod
index 43bfb51c66..85a8f96161 100644
--- a/pod/perl5004delta.pod
+++ b/pod/perl5004delta.pod
@@ -79,7 +79,7 @@ your scripts.
Before Perl 5.004, C<AUTOLOAD> functions were looked up as methods
(using the C<@ISA> hierarchy), even when the function to be autoloaded
was called as a plain function (e.g. C<Foo::bar()>), not a method
-(e.g. C<Foo-E<gt>bar()> or C<$obj-E<gt>bar()>).
+(e.g. C<< Foo->bar() >> or C<< $obj->bar() >>).
Perl 5.005 will use method lookup only for methods' C<AUTOLOAD>s.
However, there is a significant base of existing code that may be using
@@ -266,11 +266,11 @@ A subroutine reference may now be suffixed with an arrow and a
(possibly empty) parameter list. This syntax denotes a call of the
referenced subroutine, with the given parameters (if any).
-This new syntax follows the pattern of S<C<$hashref-E<gt>{FOO}>> and
-S<C<$aryref-E<gt>[$foo]>>: You may now write S<C<&$subref($foo)>> as
-S<C<$subref-E<gt>($foo)>>. All these arrow terms may be chained;
-thus, S<C<&{$table-E<gt>{FOO}}($bar)>> may now be written
-S<C<$table-E<gt>{FOO}-E<gt>($bar)>>.
+This new syntax follows the pattern of S<C<< $hashref->{FOO} >>> and
+S<C<< $aryref->[$foo] >>>: You may now write S<C<&$subref($foo)>> as
+S<C<< $subref->($foo) >>>. All these arrow terms may be chained;
+thus, S<C<< &{$table->{FOO}}($bar) >>> may now be written
+S<C<< $table->{FOO}->($bar) >>>.
=back
@@ -1290,7 +1290,7 @@ likely to eliminate these arbitrary limitations.
(F) A carriage return character was found in the input. This is an
error, and not a warning, because carriage return characters can break
-multi-line strings, including here documents (e.g., C<print E<lt>E<lt>EOF;>).
+multi-line strings, including here documents (e.g., C<print <<EOF;>).
=item Illegal switch in PERL5OPT: %s
@@ -1312,7 +1312,7 @@ architecture. On a 32-bit architecture the largest octal literal is
=item internal error: glob failed
(P) Something went wrong with the external program(s) used for C<glob>
-and C<E<lt>*.cE<gt>>. This may mean that your csh (C shell) is
+and C<< <*.c> >>. This may mean that your csh (C shell) is
broken. If so, you should change all of the csh-related variables in
config.sh: If you have tcsh, make the variables refer to it as if it
were csh (e.g. C<full_csh='/usr/bin/tcsh'>); otherwise, make them all
diff --git a/pod/perl5005delta.pod b/pod/perl5005delta.pod
index ca9f185bc5..b133c0dd81 100644
--- a/pod/perl5005delta.pod
+++ b/pod/perl5005delta.pod
@@ -482,10 +482,10 @@ magic lvalue too. For instance, this code now acts differently:
In previous versions, this would print "hello", but it now prints "g'bye".
-=head2 E<lt>E<gt> now reads in records
+=head2 <> now reads in records
If C<$/> is a reference to an integer, or a scalar that holds an integer,
-E<lt>E<gt> will read in records instead of lines. For more info, see
+<> will read in records instead of lines. For more info, see
L<perlvar/$/>.
=head1 Supported Platforms
@@ -759,10 +759,10 @@ only with arrays that have a hash reference at index 0.
=item Can't localize pseudo-hash element
-(F) You said something like C<local $ar-E<gt>{'key'}>, where $ar is
+(F) You said something like C<< local $ar->{'key'} >>, where $ar is
a reference to a pseudo-hash. That hasn't been implemented yet, but
you can get a similar effect by localizing the corresponding array
-element directly -- C<local $ar-E<gt>[$ar-E<gt>[0]{'key'}]>.
+element directly -- C<< local $ar->[$ar->[0]{'key'}] >>.
=item Can't use %%! because Errno.pm is not available
diff --git a/pod/perlboot.pod b/pod/perlboot.pod
index dbf4fc998c..bab365609e 100644
--- a/pod/perlboot.pod
+++ b/pod/perlboot.pod
@@ -67,7 +67,7 @@ Or is it?
=head2 Introducing the method invocation arrow
-For now, let's say that C<Class-E<gt>method> invokes subroutine
+For now, let's say that C<< Class->method >> invokes subroutine
C<method> in package C<Class>. (Here, "Class" is used in its
"category" meaning, not its "scholastic" meaning.) That's not
completely accurate, but we'll do this one step at a time. Now let's
@@ -176,8 +176,8 @@ This method provides the constant text for the sound itself.
}
}
-Now, when we call C<Cow-E<gt>speak>, we get a C<$class> of C<Cow> in
-C<speak>. This in turn selects the C<Cow-E<gt>sound> method, which
+Now, when we call C<< Cow->speak >>, we get a C<$class> of C<Cow> in
+C<speak>. This in turn selects the C<< Cow->sound >> method, which
returns C<moooo>. But how different would this be for the C<Horse>?
{ package Horse;
@@ -214,7 +214,7 @@ with the animal-specific sound:
Note the added C<@ISA> array. We'll get to that in a minute.
-But what happens when we invoke C<Cow-E<gt>speak> now?
+But what happens when we invoke C<< Cow->speak >> now?
First, Perl constructs the argument list. In this case, it's just
C<Cow>. Then Perl looks for C<Cow::speak>. But that's not there, so
@@ -227,7 +227,7 @@ with the already frozen argument list.
Inside the C<Animal::speak> subroutine, C<$class> becomes C<Cow> (the
first argument). So when we get to the step of invoking
-C<$class-E<gt>sound>, it'll be looking for C<Cow-E<gt>sound>, which
+C<< $class->sound >>, it'll be looking for C<< Cow->sound >>, which
gets it on the first try without looking at C<@ISA>. Success!
=head2 A few notes about @ISA
@@ -295,13 +295,13 @@ which results in:
a Mouse goes squeak!
[but you can barely hear it!]
-Here, C<Mouse> has its own speaking routine, so C<Mouse-E<gt>speak>
-doesn't immediately invoke C<Animal-E<gt>speak>. This is known as
+Here, C<Mouse> has its own speaking routine, so C<< Mouse->speak >>
+doesn't immediately invoke C<< Animal->speak >>. This is known as
"overriding". In fact, we didn't even need to say that a C<Mouse> was
an C<Animal> at all, since all of the methods needed for C<speak> are
completely defined with C<Mouse>.
-But we've now duplicated some of the code from C<Animal-E<gt>speak>,
+But we've now duplicated some of the code from C<< Animal->speak >>,
and this can once again be a maintenance headache. So, can we avoid
that? Can we say somehow that a C<Mouse> does everything any other
C<Animal> does, but add in the extra comment? Sure!
@@ -322,7 +322,7 @@ First, we can invoke the C<Animal::speak> method directly:
Note that we have to include the C<$class> parameter (almost surely
the value of C<"Mouse">) as the first parameter to C<Animal::speak>,
since we've stopped using the method arrow. Why did we stop? Well,
-if we invoke C<Animal-E<gt>speak> there, the first parameter to the
+if we invoke C<< Animal->speak >> there, the first parameter to the
method will be C<"Animal"> not C<"Mouse">, and when time comes for it
to call for the C<sound>, it won't have the right class to come back
to this package.
@@ -429,7 +429,7 @@ and the C<Horse> class:
sub sound { "neigh" }
}
-This lets us invoke C<Horse-E<gt>speak> to ripple upward to
+This lets us invoke C<< Horse->speak >> to ripple upward to
C<Animal::speak>, calling back to C<Horse::sound> to get the specific
sound, and the output of:
@@ -506,7 +506,7 @@ the name:
$$self;
}
}
-
+
Now we call for the name:
print $talking->name, " says ", $talking->sound, "\n";
@@ -695,8 +695,8 @@ Let's make a sheep that has a name and a color:
my $bad = bless { Name => "Evil", Color => "black" }, Sheep;
-so C<$bad-E<gt>{Name}> has C<Evil>, and C<$bad-E<gt>{Color}> has
-C<black>. But we want to make C<$bad-E<gt>name> access the name, and
+so C<< $bad->{Name} >> has C<Evil>, and C<< $bad->{Color} >> has
+C<black>. But we want to make C<< $bad->name >> access the name, and
that's now messed up because it's expecting a scalar reference. Not
to worry, because that's pretty easy to fix up:
diff --git a/pod/perldata.pod b/pod/perldata.pod
index 4dbc76564e..e3361e4dad 100644
--- a/pod/perldata.pod
+++ b/pod/perldata.pod
@@ -109,14 +109,14 @@ list context to each of its arguments. For example, if you say
int( <STDIN> )
-the integer operation provides scalar context for the E<lt><gt>
+the integer operation provides scalar context for the <>
operator, which responds by reading one line from STDIN and passing it
back to the integer operation, which will then find the integer value
of that line and return that. If, on the other hand, you say
sort( <STDIN> )
-then the sort operation provides list context for E<lt><gt>, which
+then the sort operation provides list context for <>, which
will proceed to read every line available up to the end of file, and
pass that list of lines back to the sort routine, which will then
sort those lines and return them as a list to whatever the context
@@ -398,13 +398,13 @@ plain paranoid, you can force the correct interpretation with curly
braces as above.
A line-oriented form of quoting is based on the shell "here-document"
-syntax. Following a C<E<lt>E<lt>> you specify a string to terminate
+syntax. Following a C<< << >> you specify a string to terminate
the quoted material, and all lines following the current line down to
the terminating string are the value of the item. The terminating
string may be either an identifier (a word), or some quoted text. If
quoted, the type of quotes you use determines the treatment of the
text, just as in regular quoting. An unquoted identifier works like
-double quotes. There must be no space between the C<E<lt>E<lt>> and
+double quotes. There must be no space between the C<< << >> and
the identifier. (If you put a space it will be treated as a null
identifier, which is valid, and matches the first empty line.) The
terminating string must appear by itself (unquoted and with no
@@ -576,8 +576,8 @@ hash. Likewise, hashes included as parts of other lists (including
parameters lists and return lists from functions) always flatten out into
key/value pairs. That's why it's good to use references sometimes.
-It is often more readable to use the C<=E<gt>> operator between key/value
-pairs. The C<=E<gt>> operator is mostly just a more visually distinctive
+It is often more readable to use the C<< => >> operator between key/value
+pairs. The C<< => >> operator is mostly just a more visually distinctive
synonym for a comma, but it also arranges for its left-hand operand to be
interpreted as a string--if it's a bareword that would be a legal identifier.
This makes it nice for initializing hashes:
diff --git a/pod/perldebug.pod b/pod/perldebug.pod
index 841ad752f3..f89e67fbfb 100644
--- a/pod/perldebug.pod
+++ b/pod/perldebug.pod
@@ -126,7 +126,7 @@ of the next statement. If an expression is supplied that includes
function calls, those functions will be executed with stops before
each statement.
-=item E<lt>CRE<gt>
+=item <CR>
Repeat last C<n> or C<s> command.
@@ -145,7 +145,7 @@ List C<incr+1> lines starting at C<min>.
=item l min-max
-List lines C<min> through C<max>. C<l E<45>> is synonymous to C<E<45>>.
+List lines C<min> through C<max>. C<l -> is synonymous to C<->.
=item l line
@@ -506,25 +506,25 @@ corresponds to F</dev/ttyc>, say, by issuing a command like
See L<"Debugger Internals"> below for more details.
-=item E<lt> [ command ]
+=item < [ command ]
Set an action (Perl command) to happen before every debugger prompt.
A multi-line command may be entered by backslashing the newlines. If
C<command> is missing, resets the list of actions.
-=item E<lt>E<lt> command
+=item << command
Add an action (Perl command) to happen before every debugger prompt.
A multi-line command may be entered by backslashing the newlines.
-=item E<gt> command
+=item > command
Set an action (Perl command) to happen after the prompt when you've
just given a command to return to executing the script. A multi-line
command may be entered by backslashing the newlines. If C<command> is
missing, resets the list of actions.
-=item E<gt>E<gt> command
+=item >> command
Adds an action (Perl command) to happen after the prompt when you've
just given a command to return to executing the script. A multi-line
@@ -701,7 +701,7 @@ Listing given via different flavors of C<l> command looks like this:
Note that the breakable lines are marked with C<:>, lines with
breakpoints are marked by C<b>, with actions by C<a>, and the
-next executed line is marked by C<==E<gt>>.
+next executed line is marked by C<< ==> >>.
=item Frame listing
@@ -979,14 +979,14 @@ application.
=item *
-The array C<@{"_E<lt>$filename"}> is the line-by-line contents of
+The array C<@{"_<$filename"}> is the line-by-line contents of
$filename for all the compiled files. Same for C<eval>ed strings which
contain subroutines, or which are currently executed. The $filename
for C<eval>ed strings looks like C<(eval 34)>.
=item *
-The hash C<%{"_E<lt>$filename"}> contains breakpoints and action (it is
+The hash C<%{"_<$filename"}> contains breakpoints and action (it is
keyed by line number), and individual entries are settable (as opposed
to the whole hash). Only true/false is important to Perl, though the
values used by F<perl5db.pl> have the form
@@ -999,7 +999,7 @@ C<(eval 34)>.
=item *
-The scalar C<${"_E<lt>$filename"}> contains C<"_E<lt>$filename">. Same for
+The scalar C<${"_<$filename"}> contains C<"_<$filename">. Same for
evaluated strings which contain subroutines, or which are currently
executed. The $filename for C<eval>ed strings looks like C<(eval
34)>.
@@ -1007,7 +1007,7 @@ executed. The $filename for C<eval>ed strings looks like C<(eval
=item *
After each C<require>d file is compiled, but before it is executed,
-C<DB::postponed(*{"_E<lt>$filename"})> is called (if subroutine
+C<DB::postponed(*{"_<$filename"})> is called (if subroutine
C<DB::postponed> exists). Here the $filename is the expanded name of
the C<require>d file (as found in values of %INC).
@@ -1031,7 +1031,7 @@ a breakpoint, a call to C<DB::DB()> is performed if any one of
variables $DB::trace, $DB::single, or $DB::signal is true. (Note that
these variables are not C<local>izable.) This feature is disabled when
the control is inside C<DB::DB()> or functions called from it (unless
-C<$^D & (1E<lt>E<lt>30)>).
+C<$^D & (1<<30)>).
=item *
@@ -1104,7 +1104,7 @@ C<line>.
The function C<DB::print_trace(FH, skip[, count[, short]])> prints
formatted info about caller frames. The last two functions may be
-convenient as arguments to C<E<lt>>, C<E<lt>E<lt>> commands.
+convenient as arguments to C<< < >>, C<< << >> commands.
=head2 Other resources
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index a443ff4ebf..2a29f8aded 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perldelta - what's new for perl v5.6 (as of v5.005_64)
+perldelta - what's new for perl v5.6.0
=head1 DESCRIPTION
@@ -60,14 +60,14 @@ See L<perldata>.
=head2 Perl's version numbering has changed
-Beginning with Perl version 5.6, the version number convention has been
+Beginning with Perl version 5.6.0, the version number convention has been
changed to a "dotted integer" scheme that is more commonly found in open
source projects.
Maintenance versions of v5.6.0 will be released as v5.6.1, v5.6.2 etc.
-The next development series following v5.6 will be numbered v5.7.x,
+The next development series following v5.6.0 will be numbered v5.7.x,
beginning with v5.7.0, and the next major production release following
-v5.6 will be v5.8.
+v5.6.0 will be v5.8.0.
The English module now sets $PERL_VERSION to $^V (a string value) rather
than C<$]> (a numeric value). (This is a potential incompatibility.
@@ -79,11 +79,12 @@ See L<Support for strings represented as a vector of ordinals> for more on that.
To cope with the new versioning system's use of at least three significant
digits for each version component, the method used for incrementing the
subversion number has also changed slightly. We assume that versions older
-than v5.6 have been incrementing the subversion component in multiples of
+than v5.6.0 have been incrementing the subversion component in multiples of
10. Versions after v5.6.0 will increment them by 1. Thus, using the new
-notation, 5.005_03 is the same as v5.5.30, and the first maintenance
-version following v5.6.0 will be v5.6.1, which amounts to a floating point
-value of 5.006_001).
+notation, 5.005_03 is the "same" as v5.5.30, and the first maintenance
+version following v5.6.0 will be v5.6.1 (which should be read as being
+equivalent to a floating point value of 5.006_001 in the older format,
+stored in C<$]>).
=item Literals of the form C<1.2.3> parse differently
@@ -589,10 +590,10 @@ C<oct()>:
Perl now allows the arrow to be omitted in many constructs
involving subroutine calls through references. For example,
-C<$foo[10]-E<gt>('foo')> may now be written C<$foo[10]('foo')>.
+C<< $foo[10]->('foo') >> may now be written C<$foo[10]('foo')>.
This is rather similar to how the arrow may be omitted from
-C<$foo[10]-E<gt>{'foo'}>. Note however, that the arrow is still
-required for C<foo(10)-E<gt>('bar')>.
+C<< $foo[10]->{'foo'} >>. Note however, that the arrow is still
+required for C<< foo(10)->('bar') >>.
=head2 exists() is supported on subroutine names
@@ -626,7 +627,7 @@ The length argument of C<syswrite()> has become optional.
=head2 File and directory handles can be autovivified
-Similar to how constructs such as C<$x-E<gt>[0]> autovivify a reference,
+Similar to how constructs such as C<< $x->[0] >> autovivify a reference,
handle constructors (open(), opendir(), pipe(), socketpair(), sysopen(),
socket(), and accept()) now autovivify a file or directory handle
if the handle passed to them is an uninitialized scalar variable. This
@@ -922,11 +923,11 @@ BEGIN blocks are executed under such conditions, this variable
enables perl code to determine whether actions that make sense
only during normal running are warranted. See L<perlvar>.
-=head2 New variable $^V contains Perl version in v5.6.0 format
+=head2 New variable $^V contains Perl version as a string
C<$^V> contains the Perl version number as a string composed of
-characters whose ordinals match the version numbers, so that it may
-be used in string comparisons.
+characters whose ordinals match the version numbers, e.g., v5.6.0.
+This may be used in string comparisons.
See C<Support for strings represented as a vector of ordinals> for an
example.
@@ -942,7 +943,7 @@ See F<INSTALL> and F<README.Y2K>.
=head1 Significant bug fixes
-=head2 E<lt>HANDLEE<gt> on empty files
+=head2 <HANDLE> on empty files
With C<$/> set to C<undef>, "slurping" an empty file returns a string of
zero length (instead of C<undef>, as it used to) the first time the
@@ -1000,14 +1001,14 @@ handles I/O.
=head2 Better diagnostics on meaningless filehandle operations
-Constructs such as C<open(E<lt>FHE<gt>)> and C<close(E<lt>FHE<gt>)>
+Constructs such as C<< open(<FH>) >> and C<< close(<FH>) >>
are compile time errors. Attempting to read from filehandles that
were opened only for writing will now produce warnings (just as
writing to read-only filehandles does).
=head2 Where possible, buffered data discarded from duped input filehandle
-C<open(NEW, "E<lt>&OLD")> now attempts to discard any data that
+C<< open(NEW, "<&OLD") >> now attempts to discard any data that
was previously read and buffered in C<OLD> before duping the handle.
On platforms where doing this is allowed, the next read operation
on C<NEW> will return the same data as the corresponding operation
@@ -1016,9 +1017,9 @@ of the following disk block instead.
=head2 eof() has the same old magic as <>
-C<eof()> would return true if no attempt to read from C<E<lt>E<gt>> had
+C<eof()> would return true if no attempt to read from C<< <> >> had
yet been made. C<eof()> has been changed to have a little magic of its
-own, it now opens the C<E<lt>E<gt>> files.
+own, it now opens the C<< <> >> files.
=head2 system(), backticks and pipe open now reflect exec() failure
@@ -1045,7 +1046,7 @@ array element in that slot.
=head2 Pseudo-hashes work better
Dereferencing some types of reference values in a pseudo-hash,
-such as C<$ph-E<gt>{foo}[1]>, was accidentally disallowed. This has
+such as C<< $ph->{foo}[1] >>, was accidentally disallowed. This has
been corrected.
When applied to a pseudo-hash element, exists() now reports whether
@@ -1203,7 +1204,7 @@ provide marginal improvements in performance.
=head1 Platform specific changes
-=head2 Additional supported platforms
+=head2 Supported platforms
=over 4
@@ -1226,7 +1227,7 @@ GNU/Hurd is now supported.
=item *
-Rhapsody is now supported.
+Rhapsody/Darwin is now supported.
=item *
@@ -1260,9 +1261,42 @@ This port is still using its own builtin globbing.
[TODO - Ilya Zakharevich <ilya@math.ohio-state.edu>]
+=head2 OS/390 (OpenEdition MVS)
+
+Support for this EBCDIC platform has not been renewed in this release.
+There are difficulties in reconciling Perl's standardization on UTF-8
+as its internal representation for characters with the EBCDIC character
+set, because the two are incompatible.
+
+It is unclear whether future versions will renew support for this
+platform, but the possibility exists.
+
=head2 VMS
-[TODO - Charles Bailey <bailey@newman.upenn.edu>]
+Numerous revisions and extensions to configuration, build, testing, and
+installation process to accomodate core changes and VMS-specific options
+
+Expand %ENV-handling code to allow runtime mapping to logical names,
+CLI symbols, and CRTL environ array
+
+Extension of subprocess invocation code to accept filespecs as command "verbs"
+
+Add to Perl command line processing the ability to use default file types and
+to recognize Unix-style C<2E<gt>&1>.
+
+Expansion of File::Spec::VMS routines, and integration into ExtUtils::MM_VMS
+
+Extension of ExtUtils::MM_VMS to handle complex extensions more flexibly
+
+Barewords at start of Unix-syntax paths may be treated as text rather than
+only as logical names
+
+Optional secure translation of several logical names used internally by Perl
+
+Miscellaneous bugfixing and porting of new core code to VMS
+
+Thanks are gladly extended to the many people who have contributed VMS
+patches, testing, and ideas.
=head2 Win32
@@ -1611,12 +1645,11 @@ messages. For example:
See L<Pod::Usage> for details.
-A bug that prevented the non-option call-back E<lt>E<gt> from being
+A bug that prevented the non-option call-back <> from being
specified as the first argument has been fixed.
-To specify the characters E<lt> and E<gt> as option starters, use
-E<gt>E<lt>. Note, however, that changing option starters is strongly
-deprecated.
+To specify the characters < and > as option starters, use ><. Note,
+however, that changing option starters is strongly deprecated.
=item IO
@@ -1651,7 +1684,7 @@ C<no lib> removes all named entries.
=item Math::BigInt
-The bitwise operations C<E<lt>E<lt>>, C<E<gt>E<gt>>, C<&>, C<|>,
+The bitwise operations C<<< << >>>, C<<< >> >>>, C<&>, C<|>,
and C<~> are now supported on bigints.
=item Math::Complex
@@ -1699,7 +1732,7 @@ translators. L<Pod::Find|Pod::Find> traverses directory structures and
returns found pod files, along with their canonical names (like
C<File::Spec::Unix>). L<Pod::ParseUtils|Pod::ParseUtils> contains
B<Pod::List> (useful for storing pod list information), B<Pod::Hyperlink>
-(for parsing the contents of C<LE<gt>E<lt>> sequences) and B<Pod::Cache>
+(for parsing the contents of C<LE<lt>E<gt>> sequences) and B<Pod::Cache>
(for caching information about pod files, e.g. link nodes).
=item Pod::Select, podselect
@@ -2004,7 +2037,7 @@ could also result in this warning. See L<perlcall/G_KEEPERR>.
=item <> should be quotes
-(F) You wrote C<require E<lt>fileE<gt>> when you should have written
+(F) You wrote C<< require <file> >> when you should have written
C<require 'file'>.
=item Attempt to join self
@@ -2182,8 +2215,8 @@ See L<perlre>.
(W) You tried to read from a filehandle opened only for writing. If you
intended it to be a read/write filehandle, you needed to open it with
-"+E<lt>" or "+E<gt>" or "+E<gt>E<gt>" instead of with "E<lt>" or nothing. If
-you intended only to read from the file, use "E<lt>". See
+"+<" or "+>" or "+>>" instead of with "<" or nothing. If
+you intended only to read from the file, use "<". See
L<perlfunc/open>.
=item flock() on closed filehandle %s
@@ -2421,8 +2454,8 @@ L<perlvms>) so that the environ array isn't the target of the change to
=item Unknown open() mode '%s'
(F) The second argument of 3-argument open() is not among the list
-of valid modes: C<E<lt>>, C<E<gt>>, C<E<gt>E<gt>>, C<+E<lt>>,
-C<+E<gt>>, C<+E<gt>E<gt>>, C<-|>, C<|E<45>>.
+of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>,
+C<< +> >>, C<<< +>> >>>, C<-|>, C<|->.
=item Unknown process %x sent message to prime_env_iter: %s
diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index f95c7d5920..23c376b0b0 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -298,7 +298,7 @@ the string being unpacked. See L<perlfunc/pack>.
=item <> should be quotes
-(F) You wrote C<require E<lt>fileE<gt>> when you should have written
+(F) You wrote C<< require <file> >> when you should have written
C<require 'file'>.
=item accept() on closed socket %s
@@ -771,7 +771,7 @@ your sysadmin why he and/or she removed it.
(F) This machine doesn't have either waitpid() or wait4(), so only waitpid()
without flags is emulated.
-=item Can't do {n,m} with n E<gt> m
+=item Can't do {n,m} with n > m
(F) Minima must be less than or equal to maxima. If you really want
your regexp to match something 0 times, just put {0}. See L<perlre>.
@@ -897,10 +897,10 @@ package name.
=item Can't localize pseudo-hash element
-(F) You said something like C<local $ar-E<gt>{'key'}>, where $ar is
+(F) You said something like C<< local $ar->{'key'} >>, where $ar is
a reference to a pseudo-hash. That hasn't been implemented yet, but
you can get a similar effect by localizing the corresponding array
-element directly -- C<local $ar-E<gt>[$ar-E<gt>[0]{'key'}]>.
+element directly -- C<< local $ar->[$ar->[0]{'key'}] >>.
=item Can't locate auto/%s.al in @INC
@@ -956,7 +956,7 @@ buffer.
=item Can't open %s: %s
-(S inplace) The implicit opening of a file through use of the C<E<lt>E<gt>>
+(S inplace) The implicit opening of a file through use of the C<< <> >>
filehandle, either implicitly under the C<-n> or C<-p> command-line
switches, or explicitly, failed for the indicated reason. Usually this
is because you don't have read permission for a file which you named
@@ -966,24 +966,24 @@ on the command line.
(W pipe) You tried to say C<open(CMD, "|cmd|")>, which is not supported. You can
try any of several modules in the Perl library to do this, such as
-IPC::Open2. Alternately, direct the pipe's output to a file using "E<gt>",
+IPC::Open2. Alternately, direct the pipe's output to a file using ">",
and then read it in under a different file handle.
=item Can't open error file %s as stderr
(F) An error peculiar to VMS. Perl does its own command line redirection, and
-couldn't open the file specified after '2E<gt>' or '2E<gt>E<gt>' on the
+couldn't open the file specified after '2>' or '2>>' on the
command line for writing.
=item Can't open input file %s as stdin
(F) An error peculiar to VMS. Perl does its own command line redirection, and
-couldn't open the file specified after 'E<lt>' on the command line for reading.
+couldn't open the file specified after '<' on the command line for reading.
=item Can't open output file %s as stdout
(F) An error peculiar to VMS. Perl does its own command line redirection, and
-couldn't open the file specified after 'E<gt>' or 'E<gt>E<gt>' on the command
+couldn't open the file specified after '>' or '>>' on the command
line for writing.
=item Can't open output pipe (name: %s)
@@ -1090,7 +1090,7 @@ provide symbolic names for C<$!> errno values.
=item Can't use "my %s" in sort comparison
(F) The global variables $a and $b are reserved for sort comparisons.
-You mentioned $a or $b in the same line as the E<lt>=E<gt> or cmp operator,
+You mentioned $a or $b in the same line as the <=> or cmp operator,
and the variable had earlier been declared as a lexical variable.
Either qualify the sort variable with the package name, or rename the
lexical variable.
@@ -1208,7 +1208,7 @@ backslash: "\[=" and "=\]".
not realizing that 777 will be interpreted as a decimal number, equivalent
to 01411. Octal constants are introduced with a leading 0 in Perl, as in C.
-=item Close on unopened file E<lt>%sE<gt>
+=item Close on unopened file <%s>
(W unopened) You tried to close a filehandle that was never opened.
@@ -1304,7 +1304,7 @@ just use C<if (%hash) { # not empty }> for example.
=item Delimiter for here document is too long
-(F) In a here document construct like C<E<lt>E<lt>FOO>, the label
+(F) In a here document construct like C<<<FOO>, the label
C<FOO> is too long for Perl to handle. You have to be seriously
twisted to write code that triggers this error.
@@ -1480,16 +1480,16 @@ the FileHandle package.
(W io) You tried to write on a read-only filehandle. If you
intended it to be a read-write filehandle, you needed to open it with
-"+E<lt>" or "+E<gt>" or "+E<gt>E<gt>" instead of with "E<lt>" or nothing. If
-you intended only to write the file, use "E<gt>" or "E<gt>E<gt>". See
+"+<" or "+>" or "+>>" instead of with "<" or nothing. If
+you intended only to write the file, use ">" or ">>". See
L<perlfunc/open>.
=item Filehandle %s opened only for output
(W io) You tried to read from a filehandle opened only for writing. If you
intended it to be a read/write filehandle, you needed to open it with
-"+E<lt>" or "+E<gt>" or "+E<gt>E<gt>" instead of with "E<lt>" or nothing. If
-you intended only to read from the file, use "E<lt>". See
+"+<" or "+>" or "+>>" instead of with "<" or nothing. If
+you intended only to read from the file, use "<". See
L<perlfunc/open>.
=item Final $ should be \$ or $name
@@ -1561,7 +1561,7 @@ C<getpwnam> operator returned an invalid UIC.
=item glob failed (%s)
(W glob) Something went wrong with the external program(s) used for C<glob>
-and C<E<lt>*.cE<gt>>. Usually, this means that you supplied a C<glob>
+and C<< <*.c> >>. Usually, this means that you supplied a C<glob>
pattern that caused the external program to fail and exit with a nonzero
status. If the message indicates that the abnormal exit resulted in a
coredump, this may also mean that your csh (C shell) is broken. If so,
@@ -2003,28 +2003,28 @@ but for some reason the perl5db.pl file (or some facsimile thereof)
didn't define a DB::sub routine to be called at the beginning of each
ordinary subroutine call.
-=item No error file after 2E<gt> or 2E<gt>E<gt> on command line
+=item No error file after 2> or 2>> on command line
(F) An error peculiar to VMS. Perl handles its own command line redirection,
-and found a '2E<gt>' or a '2E<gt>E<gt>' on the command line, but can't find
+and found a '2>' or a '2>>' on the command line, but can't find
the name of the file to which to write data destined for stderr.
-=item No input file after E<lt> on command line
+=item No input file after < on command line
(F) An error peculiar to VMS. Perl handles its own command line redirection,
-and found a 'E<lt>' on the command line, but can't find the name of the file
+and found a '<' on the command line, but can't find the name of the file
from which to read data for stdin.
-=item No output file after E<gt> on command line
+=item No output file after > on command line
(F) An error peculiar to VMS. Perl handles its own command line redirection,
-and found a lone 'E<gt>' at the end of the command line, so it doesn't know
+and found a lone '>' at the end of the command line, so it doesn't know
where you wanted to redirect stdout.
-=item No output file after E<gt> or E<gt>E<gt> on command line
+=item No output file after > or >> on command line
(F) An error peculiar to VMS. Perl handles its own command line redirection,
-and found a 'E<gt>' or a 'E<gt>E<gt>' on the command line, but can't find the
+and found a '>' or a '>>' on the command line, but can't find the
name of the file to which to write data destined for stdout.
=item No package name allowed for variable %s in "our"
@@ -2766,7 +2766,7 @@ think so.
=item seteuid() not implemented
-(F) You tried to assign to C<$E<gt>>, and your operating system doesn't support
+(F) You tried to assign to C<< $> >>, and your operating system doesn't support
the seteuid() system call (or equivalent), or at least Configure didn't
think so.
@@ -2783,7 +2783,7 @@ think so.
=item setruid() not implemented
-(F) You tried to assign to C<$E<lt>>, and your operating system doesn't support
+(F) You tried to assign to C<$<>, and your operating system doesn't support
the setruid() system call (or equivalent), or at least Configure didn't
think so.
@@ -2813,7 +2813,7 @@ But before sort was a keyword, people sometimes used it as a filehandle.
=item Sort subroutine didn't return a numeric value
(F) A sort comparison routine must return a number. You probably blew
-it by not using C<E<lt>=E<gt>> or C<cmp>, or by not using them correctly.
+it by not using C<< <=> >> or C<cmp>, or by not using them correctly.
See L<perlfunc/sort>.
=item Sort subroutine didn't return single value
@@ -2827,7 +2827,7 @@ or less than one element. See L<perlfunc/sort>.
more times than there are characters of input, which is what happened.)
See L<perlfunc/split>.
-=item Stat on unopened file E<lt>%sE<gt>
+=item Stat on unopened file <%s>
(W unopened) You tried to use the stat() function (or an equivalent file test)
on a filehandle that was either never opened or has since been closed.
@@ -2949,7 +2949,7 @@ nested for Perl to reach. Perl is doing you a favor by refusing.
(W unopened) You tried to use the tell() function on a filehandle that was either
never opened or has since been closed.
-=item Test on unopened file E<lt>%sE<gt>
+=item Test on unopened file <%s>
(W unopened) You tried to invoke a file test operator on a filehandle that isn't
open. Check your logic. See also L<perlfunc/-X>.
@@ -3156,8 +3156,8 @@ representative, who probably put it there in the first place.
=item Unknown open() mode '%s'
(F) The second argument of 3-argument open() is not among the list
-of valid modes: C<E<lt>>, C<E<gt>>, C<E<gt>E<gt>>, C<+E<lt>>,
-C<+E<gt>>, C<+E<gt>E<gt>>, C<-|>, C<|E<45>>.
+of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>,
+C<< +> >>, C<<< +>> >>>, C<-|>, C<|->.
=item Unknown process %x sent message to prime_env_iter: %s
@@ -3241,7 +3241,7 @@ At least, Configure doesn't think so.
(F) Your machine doesn't support the Berkeley socket mechanism, or at
least that's what Configure thought.
-=item Unterminated E<lt>E<gt> operator
+=item Unterminated <> operator
(F) The lexer saw a left angle bracket in a place where it was expecting
a term, so it's looking for the corresponding right angle bracket, and not
@@ -3279,7 +3279,7 @@ action-at-a-distance effects of C<$*>.
(F) You attempted to use a feature of printf that is accessible from
only C. This usually means there's a better way to do it in Perl.
-=item Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated
+=item Use of bare << to mean <<"" is deprecated
(D deprecated) You are now encouraged to use the explicitly quoted form if you
wish to use an empty line as the terminator of the here-document.
@@ -3292,10 +3292,10 @@ a split() explicitly to an array (or list).
=item Use of inherited AUTOLOAD for non-method %s() is deprecated
-(D deprecated) As an (ahem) accidental feature, C<AUTOLOAD> subroutines are looked
-up as methods (using the C<@ISA> hierarchy) even when the subroutines to
-be autoloaded were called as plain functions (e.g. C<Foo::bar()>), not
-as methods (e.g. C<Foo-E<gt>bar()> or C<$obj-E<gt>bar()>).
+(D deprecated) As an (ahem) accidental feature, C<AUTOLOAD> subroutines are
+looked up as methods (using the C<@ISA> hierarchy) even when the subroutines
+to be autoloaded were called as plain functions (e.g. C<Foo::bar()>),
+not as methods (e.g. C<< Foo->bar() >> or C<< $obj->bar() >>).
This bug will be rectified in Perl 5.005, which will use method lookup
only for methods' C<AUTOLOAD>s. However, there is a significant base
@@ -3559,13 +3559,13 @@ substitution, but stylistically it's better to use the variable form
because other Perl programmers will expect it, and it works better
if there are more than 9 backreferences.
-=item '|' and 'E<lt>' may not both be specified on command line
+=item '|' and '<' may not both be specified on command line
(F) An error peculiar to VMS. Perl does its own command line redirection, and
found that STDIN was a pipe, and that you also tried to redirect STDIN using
-'E<lt>'. Only one STDIN stream to a customer, please.
+'<'. Only one STDIN stream to a customer, please.
-=item '|' and 'E<gt>' may not both be specified on command line
+=item '|' and '>' may not both be specified on command line
(F) An error peculiar to VMS. Perl does its own command line redirection, and
thinks you tried to redirect stdout both to a file and into a pipe to another
diff --git a/pod/perlembed.pod b/pod/perlembed.pod
index b46c463f7f..c4df676b19 100644
--- a/pod/perlembed.pod
+++ b/pod/perlembed.pod
@@ -280,32 +280,32 @@ the first, a C<float> from the second, and a C<char *> from the third.
#include <EXTERN.h>
#include <perl.h>
-
+
static PerlInterpreter *my_perl;
-
+
main (int argc, char **argv, char **env)
{
STRLEN n_a;
char *embedding[] = { "", "-e", "0" };
-
+
my_perl = perl_alloc();
perl_construct( my_perl );
-
+
perl_parse(my_perl, NULL, 3, embedding, NULL);
perl_run(my_perl);
-
+
/** Treat $a as an integer **/
eval_pv("$a = 3; $a **= 2", TRUE);
printf("a = %d\n", SvIV(get_sv("a", FALSE)));
-
+
/** Treat $a as a float **/
eval_pv("$a = 3.14; $a **= 2", TRUE);
printf("a = %f\n", SvNV(get_sv("a", FALSE)));
-
+
/** Treat $a as a string **/
eval_pv("$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE);
printf("a = %s\n", SvPV(get_sv("a", FALSE), n_a));
-
+
perl_destruct(my_perl);
perl_free(my_perl);
}
@@ -364,7 +364,7 @@ been wrapped here):
#include <EXTERN.h>
#include <perl.h>
-
+
/** my_eval_sv(code, error_check)
** kinda like eval_sv(),
** but we pop the return value off the stack
@@ -374,41 +374,41 @@ been wrapped here):
dSP;
SV* retval;
STRLEN n_a;
-
+
PUSHMARK(SP);
eval_sv(sv, G_SCALAR);
-
+
SPAGAIN;
retval = POPs;
PUTBACK;
-
+
if (croak_on_error && SvTRUE(ERRSV))
croak(SvPVx(ERRSV, n_a));
-
+
return retval;
}
-
+
/** match(string, pattern)
**
** Used for matches in a scalar context.
**
** Returns 1 if the match was successful; 0 otherwise.
**/
-
+
I32 match(SV *string, char *pattern)
{
SV *command = NEWSV(1099, 0), *retval;
STRLEN n_a;
-
+
sv_setpvf(command, "my $string = '%s'; $string =~ %s",
SvPV(string,n_a), pattern);
-
+
retval = my_eval_sv(command, TRUE);
SvREFCNT_dec(command);
-
+
return SvIV(retval);
}
-
+
/** substitute(string, pattern)
**
** Used for =~ operations that modify their left-hand side (s/// and tr///)
@@ -416,22 +416,22 @@ been wrapped here):
** Returns the number of successful matches, and
** modifies the input string if there were any.
**/
-
+
I32 substitute(SV **string, char *pattern)
{
SV *command = NEWSV(1099, 0), *retval;
STRLEN n_a;
-
+
sv_setpvf(command, "$string = '%s'; ($string =~ %s)",
SvPV(*string,n_a), pattern);
-
+
retval = my_eval_sv(command, TRUE);
SvREFCNT_dec(command);
-
+
*string = get_sv("string", FALSE);
return SvIV(retval);
}
-
+
/** matches(string, pattern, matches)
**
** Used for matches in an array context.
@@ -439,25 +439,25 @@ been wrapped here):
** Returns the number of matches,
** and fills in **matches with the matching substrings
**/
-
+
I32 matches(SV *string, char *pattern, AV **match_list)
{
SV *command = NEWSV(1099, 0);
I32 num_matches;
STRLEN n_a;
-
+
sv_setpvf(command, "my $string = '%s'; @array = ($string =~ %s)",
SvPV(string,n_a), pattern);
-
+
my_eval_sv(command, TRUE);
SvREFCNT_dec(command);
-
+
*match_list = get_av("array", FALSE);
num_matches = av_len(*match_list) + 1; /** assume $[ is 0 **/
-
+
return num_matches;
}
-
+
main (int argc, char **argv, char **env)
{
PerlInterpreter *my_perl = perl_alloc();
@@ -466,30 +466,30 @@ been wrapped here):
I32 num_matches, i;
SV *text = NEWSV(1099,0);
STRLEN n_a;
-
+
perl_construct(my_perl);
perl_parse(my_perl, NULL, 3, embedding, NULL);
-
+
sv_setpv(text, "When he is at a convenience store and the bill comes to some amount like 76 cents, Maynard is aware that there is something he *should* do, something that will enable him to get back a quarter, but he has no idea *what*. He fumbles through his red squeezey changepurse and gives the boy three extra pennies with his dollar, hoping that he might luck into the correct amount. The boy gives him back two of his own pennies and then the big shiny quarter that is his prize. -RICHH");
-
+
if (match(text, "m/quarter/")) /** Does text contain 'quarter'? **/
printf("match: Text contains the word 'quarter'.\n\n");
else
printf("match: Text doesn't contain the word 'quarter'.\n\n");
-
+
if (match(text, "m/eighth/")) /** Does text contain 'eighth'? **/
printf("match: Text contains the word 'eighth'.\n\n");
else
printf("match: Text doesn't contain the word 'eighth'.\n\n");
-
+
/** Match all occurrences of /wi../ **/
num_matches = matches(text, "m/(wi..)/g", &match_list);
printf("matches: m/(wi..)/g found %d matches...\n", num_matches);
-
+
for (i = 0; i < num_matches; i++)
printf("match: %s\n", SvPV(*av_fetch(match_list, i, FALSE),n_a));
printf("\n");
-
+
/** Remove all vowels from text **/
num_matches = substitute(&text, "s/[aeiou]//gi");
if (num_matches) {
@@ -497,12 +497,12 @@ been wrapped here):
num_matches);
printf("Now text is: %s\n\n", SvPV(text,n_a));
}
-
+
/** Attempt a substitution **/
if (!substitute(&text, "s/Perl/C/")) {
printf("substitute: s/Perl/C...No substitution made.\n\n");
}
-
+
SvREFCNT_dec(text);
PL_perl_destruct_level = 1;
perl_destruct(my_perl);
diff --git a/pod/perlfaq.pod b/pod/perlfaq.pod
index 0d5dae8f5a..fa6943f0db 100644
--- a/pod/perlfaq.pod
+++ b/pod/perlfaq.pod
@@ -250,7 +250,7 @@ miscellaneous data issues.
=item * What's wrong with always quoting "$vars"?
-=item * Why don't my E<lt>E<lt>HERE documents work?
+=item * Why don't my <<HERE documents work?
=item * What is the difference between a list and an array?
@@ -361,11 +361,11 @@ I/O and the "f" issues: filehandles, flushing, formats and footers.
=item * How come when I open a file read-write it wipes it out?
-=item * Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
+=item * Why do I sometimes get an "Argument list too long" when I use <*>?
=item * Is there a leak/bug in glob()?
-=item * How can I open a file with a leading "E<gt>" or trailing blanks?
+=item * How can I open a file with a leading ">" or trailing blanks?
=item * How can I reliably rename a file?
@@ -508,7 +508,7 @@ other sections.
=item * What's the difference between deep and shallow binding?
-=item * Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
+=item * Why doesn't "my($foo) = <FILE>;" work right?
=item * How do I redefine a builtin function, operator, or method?
diff --git a/pod/perlfaq2.pod b/pod/perlfaq2.pod
index 4530f40032..d6870b71dc 100644
--- a/pod/perlfaq2.pod
+++ b/pod/perlfaq2.pod
@@ -262,7 +262,7 @@ a star may be ordered from O'Reilly.
by Ellen Siever, Stephan Spainhour, and Nathan Patwardhan
=item Tutorials
-
+
*Learning Perl [2nd edition]
by Randal L. Schwartz and Tom Christiansen
with foreword by Larry Wall
diff --git a/pod/perlfaq4.pod b/pod/perlfaq4.pod
index 7a342719f7..ad4824577d 100644
--- a/pod/perlfaq4.pod
+++ b/pod/perlfaq4.pod
@@ -465,7 +465,7 @@ really does work:
# $_ contains the string to parse
# BEGIN and END are the opening and closing markers for the
# nested text.
-
+
@( = ('(','');
@) = (')','');
($re=$_)=~s/((BEGIN)|(END)|.)/$)[!$3]\Q$1\E$([!$2]/gs;
@@ -821,7 +821,7 @@ Stringification also destroys arrays.
print "@lines"; # WRONG - extra blanks
print @lines; # right
-=head2 Why don't my E<lt>E<lt>HERE documents work?
+=head2 Why don't my <<HERE documents work?
Check for these three things:
@@ -1282,7 +1282,7 @@ Supply a comparison function to sort() (described in L<perlfunc/sort>):
@list = sort { $a <=> $b } @list;
The default sort function is cmp, string comparison, which would
-sort C<(1, 2, 10)> into C<(1, 10, 2)>. C<E<lt>=E<gt>>, used above, is
+sort C<(1, 2, 10)> into C<(1, 10, 2)>. C<< <=> >>, used above, is
the numerical comparison operator.
If you have a complicated function needed to pull out the part you
diff --git a/pod/perlfaq5.pod b/pod/perlfaq5.pod
index 2209180c22..6ae7755f8b 100644
--- a/pod/perlfaq5.pod
+++ b/pod/perlfaq5.pod
@@ -347,7 +347,7 @@ Then use any of those as you would a normal filehandle. Anywhere that
Perl is expecting a filehandle, an indirect filehandle may be used
instead. An indirect filehandle is just a scalar variable that contains
a filehandle. Functions like C<print>, C<open>, C<seek>, or
-the C<E<lt>FHE<gt>> diamond operator will accept either a read filehandle
+the C<< <FH> >> diamond operator will accept either a read filehandle
or a scalar variable containing one:
($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR);
@@ -407,7 +407,7 @@ calls doesn't work for the diamond operator. That's because it's a
real operator, not just a function with a comma-less argument. Assuming
you've been storing typeglobs in your structure as we did above, you
can use the built-in function named C<readline> to reads a record just
-as C<E<lt>E<gt>> does. Given the initialization shown above for @fd, this
+as C<< <> >> does. Given the initialization shown above for @fd, this
would work, but only because readline() require a typeglob. It doesn't
work with objects or strings, which might be a bug we haven't fixed yet.
@@ -463,7 +463,7 @@ whatever:
=head2 How can I translate tildes (~) in a filename?
-Use the E<lt>E<gt> (glob()) operator, documented in L<perlfunc>. This
+Use the <> (glob()) operator, documented in L<perlfunc>. This
requires that you have a shell installed that groks tildes, meaning
csh or tcsh or (some versions of) ksh, and thus may have portability
problems. The Glob::KGlob module (available from CPAN) gives more
@@ -495,7 +495,7 @@ doesn't exist.
open(FH, "+< /path/name"); # open for update
-Using "E<gt>" always clobbers or creates. Using "E<lt>" never does
+Using ">" always clobbers or creates. Using "<" never does
either. The "+" doesn't change this.
Here are examples of many kinds of file opens. Those using sysopen()
@@ -556,9 +556,9 @@ isn't so exclusive as you might wish.
See also the new L<perlopentut> if you have it (new for 5.6).
-=head2 Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
+=head2 Why do I sometimes get an "Argument list too long" when I use <*>?
-The C<E<lt>E<gt>> operator performs a globbing operation (see above).
+The C<< <> >> operator performs a globbing operation (see above).
In Perl versions earlier than v5.6.0, the internal glob() operator forks
csh(1) to do the actual glob expansion, but
csh can't handle more than 127 items and so gives the error message
@@ -576,7 +576,7 @@ use the glob() function or its angle-bracket alias in a scalar
context, you may cause a leak and/or unpredictable behavior. It's
best therefore to use glob() only in list context.
-=head2 How can I open a file with a leading "E<gt>" or trailing blanks?
+=head2 How can I open a file with a leading ">" or trailing blanks?
Normally perl ignores trailing blanks in filenames, and interprets
certain leading characters (or a trailing "|") to mean something
@@ -1100,7 +1100,7 @@ Or even with a literal numeric descriptor:
$fd = $ENV{MHCONTEXTFD};
open(MHCONTEXT, "<&=$fd"); # like fdopen(3S)
-Note that "E<lt>&STDIN" makes a copy, but "E<lt>&=STDIN" make
+Note that "<&STDIN" makes a copy, but "<&=STDIN" make
an alias. That means if you close an aliased handle, all
aliases become inaccessible. This is not true with
a copied one.
diff --git a/pod/perlfaq6.pod b/pod/perlfaq6.pod
index de6093a5ba..bf007ee26b 100644
--- a/pod/perlfaq6.pod
+++ b/pod/perlfaq6.pod
@@ -533,8 +533,8 @@ pos() point. A failed match resets the position of C<\G> unless the
C</c> modifier is in effect.
For example, suppose you had a line of text quoted in standard mail
-and Usenet notation, (that is, with leading C<E<gt>> characters), and
-you want change each leading C<E<gt>> into a corresponding C<:>. You
+and Usenet notation, (that is, with leading C<< > >> characters), and
+you want change each leading C<< > >> into a corresponding C<:>. You
could do so in this way:
s/^(>+)/':' x length($1)/gem;
diff --git a/pod/perlfaq7.pod b/pod/perlfaq7.pod
index 72f4bb74ab..0afbc0dd34 100644
--- a/pod/perlfaq7.pod
+++ b/pod/perlfaq7.pod
@@ -35,12 +35,12 @@ really type specifiers are:
<> are used for inputting a record from a filehandle.
\ takes a reference to something.
-Note that E<lt>FILEE<gt> is I<neither> the type specifier for files
-nor the name of the handle. It is the C<E<lt>E<gt>> operator applied
+Note that <FILE> is I<neither> the type specifier for files
+nor the name of the handle. It is the C<< <> >> operator applied
to the handle FILE. It reads one line (well, record - see
L<perlvar/$/>) from the handle FILE in scalar context, or I<all> lines
in list context. When performing open, close, or any other operation
-besides C<E<lt>E<gt>> on files, or even talking about the handle, do
+besides C<< <> >> on files, or even talking about the handle, do
I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
2)> and "copying from STDIN to FILE".
@@ -49,7 +49,7 @@ I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
Normally, a bareword doesn't need to be quoted, but in most cases
probably should be (and must be under C<use strict>). But a hash key
consisting of a simple word (that isn't the name of a defined
-subroutine) and the left-hand operand to the C<=E<gt>> operator both
+subroutine) and the left-hand operand to the C<< => >> operator both
count as though they were quoted:
This is like this
@@ -307,10 +307,10 @@ you want to pass in a bit of code into a function:
my $line;
timeout( 30, sub { $line = <STDIN> } );
-If the code to execute had been passed in as a string, C<'$line =
-E<lt>STDINE<gt>'>, there would have been no way for the hypothetical
-timeout() function to access the lexical variable $line back in its
-caller's scope.
+If the code to execute had been passed in as a string,
+C<< '$line = <STDIN>' >>, there would have been no way for the
+hypothetical timeout() function to access the lexical variable
+$line back in its caller's scope.
=head2 What is variable suicide and how can I prevent it?
@@ -581,10 +581,10 @@ However, dynamic variables (aka global, local, or package variables)
are effectively shallowly bound. Consider this just one more reason
not to use them. See the answer to L<"What's a closure?">.
-=head2 Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
+=head2 Why doesn't "my($foo) = <FILE>;" work right?
C<my()> and C<local()> give list context to the right hand side
-of C<=>. The E<lt>FHE<gt> read operation, like so many of Perl's
+of C<=>. The <FH> read operation, like so many of Perl's
functions and operators, can tell which context it was called in and
behaves appropriately. In general, the scalar() function can help.
This function does nothing to the data itself (contrary to popular myth)
@@ -766,7 +766,7 @@ before Perl has seen that such a package exists. It's wisest to make
sure your packages are all defined before you start using them, which
will be taken care of if you use the C<use> statement instead of
C<require>. If not, make sure to use arrow notation (eg,
-C<Guru-E<gt>find("Samy")>) instead. Object notation is explained in
+C<< Guru->find("Samy") >>) instead. Object notation is explained in
L<perlobj>.
Make sure to read about creating modules in L<perlmod> and
diff --git a/pod/perlfaq8.pod b/pod/perlfaq8.pod
index 0d77dc13fc..ed22ba0c59 100644
--- a/pod/perlfaq8.pod
+++ b/pod/perlfaq8.pod
@@ -410,7 +410,7 @@ For example:
}
However, because syscalls restart by default, you'll find that if
-you're in a "slow" call, such as E<lt>FHE<gt>, read(), connect(), or
+you're in a "slow" call, such as <FH>, read(), connect(), or
wait(), that the only way to terminate them is by "longjumping" out;
that is, by raising an exception. See the time-out handler for a
blocking flock() in L<perlipc/"Signals"> or chapter 6 of the Camel.
@@ -976,7 +976,7 @@ sysopen():
sysopen(FH, "/tmp/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
or die "can't open /tmp/somefile: $!":
-
+
=head2 How do I install a module from CPAN?
diff --git a/pod/perlfaq9.pod b/pod/perlfaq9.pod
index d2f2034e1b..16a803c997 100644
--- a/pod/perlfaq9.pod
+++ b/pod/perlfaq9.pod
@@ -82,7 +82,7 @@ way is to use HTML::FormatText which not only removes HTML but also
attempts to do a little simple formatting of the resulting plain text.
Many folks attempt a simple-minded regular expression approach, like
-C<s/E<lt>.*?E<gt>//g>, but that fails in many cases because the tags
+C<< s/<.*?>//g >>, but that fails in many cases because the tags
may continue over line breaks, they may contain quoted angle-brackets,
or HTML comment may be present. Plus folks forget to convert
entities, like C<&lt;> for example.
@@ -148,7 +148,7 @@ the same as the startform() method.
=head2 How do I make a pop-up menu in HTML?
-Use the B<E<lt>SELECTE<gt>> and B<E<lt>OPTIONE<gt>> tags. The CGI.pm
+Use the B<< <SELECT> >> and B<< <OPTION> >> tags. The CGI.pm
module (available from CPAN) supports this widget, as well as many
others, including some that it cleverly synthesizes on its own.
@@ -396,7 +396,7 @@ format after minor transliterations:
=head2 How do I return the user's mail address?
-On systems that support getpwuid, the $E<lt> variable and the
+On systems that support getpwuid, the $< variable and the
Sys::Hostname module (which is part of the standard perl distribution),
you can probably try using something like this:
diff --git a/pod/perlfilter.pod b/pod/perlfilter.pod
index d5fae925b1..bf287c0873 100644
--- a/pod/perlfilter.pod
+++ b/pod/perlfilter.pod
@@ -1,7 +1,7 @@
=head1 NAME
perlfilter - Source Filters
-
+
=head1 DESCRIPTION
@@ -198,7 +198,7 @@ going to this trouble is when writing a source scrambler. The
C<decrypt> filter (which unscrambles the source before Perl parses it)
included with the source filter distribution is an example of a C
source filter (see Decryption Filters, below).
-
+
=over 5
diff --git a/pod/perlguts.pod b/pod/perlguts.pod
index 58bcea3d1a..6caed3ebf8 100644
--- a/pod/perlguts.pod
+++ b/pod/perlguts.pod
@@ -385,10 +385,10 @@ Beginning with version 5.004, the following functions are also supported:
HE* hv_fetch_ent (HV* tb, SV* key, I32 lval, U32 hash);
HE* hv_store_ent (HV* tb, SV* key, SV* val, U32 hash);
-
+
bool hv_exists_ent (HV* tb, SV* key, U32 hash);
SV* hv_delete_ent (HV* tb, SV* key, I32 flags, U32 hash);
-
+
SV* hv_iterkeysv (HE* entry);
Note that these functions take C<SV*> keys, which simplifies writing
diff --git a/pod/perlipc.pod b/pod/perlipc.pod
index 3649e4f883..3ddea3e41b 100644
--- a/pod/perlipc.pod
+++ b/pod/perlipc.pod
@@ -1024,7 +1024,7 @@ something to the server before fetching the server's response.
The web server handing the "http" service, which is assumed to be at
its standard port, number 80. If your the web server you're trying to
connect to is at a different port (like 1080 or 8080), you should specify
-as the named-parameter pair, C<PeerPort =E<gt> 8080>. The C<autoflush>
+as the named-parameter pair, C<< PeerPort => 8080 >>. The C<autoflush>
method is used on the socket because otherwise the system would buffer
up the output we sent it. (If you're on a Mac, you'll also need to
change every C<"\n"> in your code that sends data over the network to
@@ -1142,7 +1142,7 @@ well.
As always, setting up a server is little bit more involved than running a client.
The model is that the server creates a special kind of socket that
does nothing but listen on a particular port for incoming connections.
-It does this by calling the C<IO::Socket::INET-E<gt>new()> method with
+It does this by calling the C<< IO::Socket::INET->new() >> method with
slightly different arguments than the client did.
=over
diff --git a/pod/perllexwarn.pod b/pod/perllexwarn.pod
index d370f04412..af1a910334 100644
--- a/pod/perllexwarn.pod
+++ b/pod/perllexwarn.pod
@@ -18,10 +18,10 @@ By default, optional warnings are disabled, so any legacy code that
doesn't attempt to control the warnings will work unchanged.
All warnings are enabled in a block by either of these:
-
+
use warnings ;
use warnings 'all' ;
-
+
Similarly all warnings are disabled in a block by either of these:
no warnings ;
@@ -138,7 +138,7 @@ will enable warnings everywhere. See L<Backward Compatibility> for
details of how this flag interacts with lexical warnings.
=item B<-W>
-
+
If the B<-W> flag is used on the command line, it will enable all warnings
throughout the program regardless of whether warnings were disabled
locally using C<no warnings> or C<$^W =0>. This includes all files that get
@@ -177,19 +177,19 @@ means that any legacy code that currently relies on manipulating C<$^W>
to control warning behavior will still work as is.
=item 3.
-
+
Apart from now being a boolean, the C<$^W> variable operates in exactly
the same horrible uncontrolled global way, except that it cannot
disable/enable default warnings.
=item 4.
-
+
If a piece of code is under the control of the C<warnings> pragma,
both the C<$^W> variable and the B<-w> flag will be ignored for the
scope of the lexical warning.
=item 5.
-
+
The only way to override a lexical warnings setting is with the B<-W>
or B<-X> command line flags.
@@ -200,7 +200,7 @@ the C<warnings> pragma to control the warning behavior of $^W-type
code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
=head2 Category Hierarchy
-
+
A hierarchy of "categories" have been defined to allow groups of warnings
to be enabled/disabled in isolation.
@@ -318,7 +318,7 @@ To determine which category a specific warning has been assigned to see
L<perldiag>.
=head2 Fatal Warnings
-
+
The presence of the word "FATAL" in the category list will escalate any
warnings detected from the categories specified in the lexical scope
into fatal errors. In the code below, there are 3 places where a
@@ -327,14 +327,14 @@ fatal error.
use warnings ;
-
+
$a = 1 if $a EQ $b ;
-
+
{
use warnings FATAL => qw(deprecated) ;
$a = 1 if $a EQ $b ;
}
-
+
$a = 1 if $a EQ $b ;
=head2 Reporting Warnings from a Module
@@ -383,7 +383,7 @@ then C<warnings::warn> will detect this and die after displaying the
warning message.
=head1 TODO
-
+
perl5db.pl
The debugger saves and restores C<$^W> at runtime. I haven't checked
whether the debugger will still work with the lexical warnings
@@ -398,7 +398,7 @@ warning message.
=head1 SEE ALSO
L<warnings>, L<perldiag>.
-
+
=head1 AUTHOR
-
+
Paul Marquess
diff --git a/pod/perllocale.pod b/pod/perllocale.pod
index 475cc0d1e5..ea56e1e03e 100644
--- a/pod/perllocale.pod
+++ b/pod/perllocale.pod
@@ -309,7 +309,7 @@ discussed above. We decided to try that instead of the above faulty
locale "En_US"--and in Cshish shells (B<csh>, B<tcsh>)
setenv LC_ALL en_US.ISO8859-1
-
+
If you do not know what shell you have, consult your local
helpdesk or the equivalent.
diff --git a/pod/perlmodinstall.pod b/pod/perlmodinstall.pod
index 6a861e4fbd..5f1c62e96d 100644
--- a/pod/perlmodinstall.pod
+++ b/pod/perlmodinstall.pod
@@ -285,7 +285,7 @@ in the Perl distribution.
While still in that directory, type:
make install
-
+
You will need the packages mentioned in F<README.dos> in the Perl distribution.
=item *
diff --git a/pod/perlmodlib.pod b/pod/perlmodlib.pod
index f4331c3324..38044c9157 100644
--- a/pod/perlmodlib.pod
+++ b/pod/perlmodlib.pod
@@ -1150,8 +1150,8 @@ Generally you can delete the C<eq 'FOO'> part with no harm at all.
Let the objects look after themselves! Generally, avoid hard-wired
class names as far as possible.
-Avoid C<$r-E<gt>Class::func()> where using C<@ISA=qw(... Class ...)> and
-C<$r-E<gt>func()> would work (see L<perlbot> for more details).
+Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
+C<< $r->func() >> would work (see L<perlbot> for more details).
Use autosplit so little used or newly added functions won't be a
burden to programs that don't use them. Add test functions to
@@ -1208,7 +1208,7 @@ or nature of a variable. For example:
$no_caps_here function scope my() or local() variables
Function and method names seem to work best as all lowercase.
-e.g., C<$obj-E<gt>as_string()>.
+e.g., C<< $obj->as_string() >>.
You can use a leading underscore to indicate that a variable or
function should not be used outside the package that defined it.
@@ -1224,7 +1224,7 @@ export try to use @EXPORT_OK in preference to @EXPORT and avoid
short or common names to reduce the risk of name clashes.
Generally anything not exported is still accessible from outside the
-module using the ModuleName::item_name (or C<$blessed_ref-E<gt>method>)
+module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
syntax. By convention you can use a leading underscore on names to
indicate informally that they are 'internal' and not for public use.
diff --git a/pod/perlobj.pod b/pod/perlobj.pod
index fa826415c8..4e45aff7c6 100644
--- a/pod/perlobj.pod
+++ b/pod/perlobj.pod
@@ -96,8 +96,8 @@ so that your constructors may be inherited:
return $self;
}
-Or if you expect people to call not just C<CLASS-E<gt>new()> but also
-C<$obj-E<gt>new()>, then use something like this. The initialize()
+Or if you expect people to call not just C<< CLASS->new() >> but also
+C<< $obj->new() >>, then use something like this. The initialize()
method used will be of whatever $class we blessed the
object into:
@@ -239,7 +239,7 @@ indirect object slot:
display {find Critter "Fred"} 'Height', 'Weight';
-For C++ fans, there's also a syntax using -E<gt> notation that does exactly
+For C++ fans, there's also a syntax using -> notation that does exactly
the same thing. The parentheses are required if there are any arguments.
$fred = Critter->find("Fred");
@@ -346,7 +346,7 @@ Rather than what you might have expected:
$obj->{FIELD}->move(); # You should be so lucky.
$ary[$i]->move; # Yeah, sure.
-The left side of ``-E<gt>'' is not so limited, because it's an infix operator,
+The left side of ``->'' is not so limited, because it's an infix operator,
not a postfix operator.
As if that weren't bad enough, think about this: Perl must guess I<at
@@ -362,7 +362,7 @@ tries to cheat by remembering bareword C<require>s, but the grief if it
messes up just isn't worth the years of debugging it would likely take
you to track such subtle bugs down.
-The infix arrow notation using ``C<-E<gt>>'' doesn't suffer from either
+The infix arrow notation using ``C<< -> >>'' doesn't suffer from either
of these disturbing ambiguities, so we recommend you use it exclusively.
=head2 Default UNIVERSAL methods
diff --git a/pod/perlopentut.pod b/pod/perlopentut.pod
index d3d9f5ada5..9cb9f6738a 100644
--- a/pod/perlopentut.pod
+++ b/pod/perlopentut.pod
@@ -175,7 +175,7 @@ L<perlfaq5> for more details.
One of the most common uses for C<open> is one you never
even notice. When you process the ARGV filehandle using
-C<E<lt>ARGVE<gt>>, Perl actually does an implicit open
+C<< <ARGV> >>, Perl actually does an implicit open
on each file in @ARGV. Thus a program called like this:
$ myprogram file1 file2 file3
@@ -189,7 +189,7 @@ using a construct no more complex than:
If @ARGV is empty when the loop first begins, Perl pretends you've opened
up minus, that is, the standard input. In fact, $ARGV, the currently
-open file during C<E<lt>ARGVE<gt>> processing, is even set to "-"
+open file during C<< <ARGV> >> processing, is even set to "-"
in these circumstances.
You are welcome to pre-process your @ARGV before starting the loop to
@@ -239,7 +239,7 @@ Here's an example:
or die "can't open $pwdinfo: $!";
This sort of thing also comes into play in filter processing. Because
-C<E<lt>ARGVE<gt>> processing employs the normal, shell-style Perl C<open>,
+C<< <ARGV> >> processing employs the normal, shell-style Perl C<open>,
it respects all the special things we've already seen:
$ myprogram f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
@@ -264,7 +264,7 @@ you can fetch URLs before processing them:
@ARGV = map { m#^\w+://# ? "GET $_ |" : $_ } @ARGV;
-It's not for nothing that this is called magic C<E<lt>ARGVE<gt>>.
+It's not for nothing that this is called magic C<< <ARGV> >>.
Pretty nifty, eh?
=head1 Open E<agrave> la C
@@ -393,7 +393,7 @@ folders, cookie files, and internal temporary files.
Sometimes you already have a filehandle open, and want to make another
handle that's a duplicate of the first one. In the shell, we place an
ampersand in front of a file descriptor number when doing redirections.
-For example, C<2E<gt>&1> makes descriptor 2 (that's STDERR in Perl)
+For example, C<< 2>&1 >> makes descriptor 2 (that's STDERR in Perl)
be redirected into descriptor 1 (which is usually Perl's STDOUT).
The same is essentially true in Perl: a filename that begins with an
ampersand is treated instead as a file descriptor if a number, or as a
@@ -444,8 +444,8 @@ these days. Here's an example of that:
$fd = $ENV{"MHCONTEXTFD"};
open(MHCONTEXT, "<&=$fd") or die "couldn't fdopen $fd: $!";
-If you're using magic C<E<lt>ARGVE<gt>>, you could even pass in as a
-command line argument in @ARGV something like C<"E<lt>&=$MHCONTEXTFD">,
+If you're using magic C<< <ARGV> >>, you could even pass in as a
+command line argument in @ARGV something like C<"<&=$MHCONTEXTFD">,
but we've never seen anyone actually do this.
=head2 Dispelling the Dweomer
@@ -474,7 +474,7 @@ The only vaguely popular system that doesn't work this way is the
proprietary Macintosh system, which uses a colon where the rest of us
use a slash. Maybe C<sysopen> isn't such a bad idea after all.
-If you want to use C<E<lt>ARGVE<gt>> processing in a totally boring
+If you want to use C<< <ARGV> >> processing in a totally boring
and non-magical way, you could do this first:
# "Sam sat on the ground and put his head in his hands.
diff --git a/pod/perlpod.pod b/pod/perlpod.pod
index 49e0ffc767..f4725ba790 100644
--- a/pod/perlpod.pod
+++ b/pod/perlpod.pod
@@ -173,7 +173,7 @@ here and in commands:
L<text|name/"sec">
L<text|"sec">
L<text|/"sec">
-
+
F<file> Used for filenames
X<index> An index entry
Z<> A zero-width character
diff --git a/pod/perlport.pod b/pod/perlport.pod
index b062b3b106..10723ee3a4 100644
--- a/pod/perlport.pod
+++ b/pod/perlport.pod
@@ -75,7 +75,7 @@ This information should not be considered complete; it includes possibly
transient information about idiosyncrasies of some of the ports, almost
all of which are in a state of constant evolution. Thus, this material
should be considered a perpetual work in progress
-(E<lt>IMG SRC="yellow_sign.gif" ALT="Under Construction"E<gt>).
+(<IMG SRC="yellow_sign.gif" ALT="Under Construction">).
=head1 ISSUES
@@ -303,15 +303,15 @@ first 8 characters.
Whitespace in filenames is tolerated on most systems, but not all.
Many systems (DOS, VMS) cannot have more than one C<.> in their filenames.
-Don't assume C<E<gt>> won't be the first character of a filename.
-Always use C<E<lt>> explicitly to open a file for reading,
+Don't assume C<< > >> won't be the first character of a filename.
+Always use C<< < >> explicitly to open a file for reading,
unless you want the user to be able to specify a pipe open.
open(FILE, "< $existing_file") or die $!;
If filenames might use strange characters, it is safest to open it
with C<sysopen> instead of C<open>. C<open> is magic and can
-translate characters like C<E<gt>>, C<E<lt>>, and C<|>, which may
+translate characters like C<< > >>, C<< < >>, and C<|>, which may
be the wrong thing to do. (Sometimes, though, it's the right thing.)
=head2 System Interaction
@@ -787,7 +787,7 @@ you are so inclined. For example:
$ endif
Do take care with C<$ ASSIGN/nolog/user SYS$COMMAND: SYS$INPUT> if your
-perl-in-DCL script expects to do things like C<$read = E<lt>STDINE<gt>;>.
+perl-in-DCL script expects to do things like C<< $read = <STDIN>; >>.
Filenames are in the format "name.extension;version". The maximum
length for filenames is 39 characters, and the maximum length for
@@ -1053,9 +1053,9 @@ C<System$Path> until a name is made that points to an object on disk.
Writing to a new file C<System:Modules> would be allowed only if
C<System$Path> contains a single item list. The filesystem will also
expand system variables in filenames if enclosed in angle brackets, so
-C<E<lt>System$DirE<gt>.Modules> would look for the file
+C<< <System$Dir>.Modules >> would look for the file
S<C<$ENV{'System$Dir'} . 'Modules'>>. The obvious implication of this is
-that B<fully qualified filenames can start with C<E<lt>E<gt>>> and should
+that B<fully qualified filenames can start with C<< <> >>> and should
be protected when C<open> is used for input.
Because C<.> was in use as a directory separator and filenames could not
@@ -1095,11 +1095,11 @@ library emulates Unix filehandles. Consequently, you can't rely on
passing C<STDIN>, C<STDOUT>, or C<STDERR> to your children.
The desire of users to express filenames of the form
-C<E<lt>Foo$DirE<gt>.Bar> on the command line unquoted causes problems,
+C<< <Foo$Dir>.Bar >> on the command line unquoted causes problems,
too: C<``> command output capture has to perform a guessing game. It
-assumes that a string C<E<lt>[^E<lt>E<gt>]+\$[^E<lt>E<gt>]E<gt>> is a
+assumes that a string C<< <[^<>]+\$[^<>]> >> is a
reference to an environment variable, whereas anything else involving
-C<E<lt>> or C<E<gt>> is redirection, and generally manages to be 99%
+C<< < >> or C<< > >> is redirection, and generally manages to be 99%
right. Of course, the problem remains that scripts cannot rely on any
Unix tools being available, or that any tools found have Unix-like command
line arguments.
@@ -1500,7 +1500,7 @@ Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS)
The C<|> variants are supported only if ToolServer is installed.
(S<Mac OS>)
-open to C<|E<45>> and C<-|> are unsupported. (S<Mac OS>, Win32, S<RISC OS>)
+open to C<|-> and C<-|> are unsupported. (S<Mac OS>, Win32, S<RISC OS>)
=item pipe READHANDLE,WRITEHANDLE
@@ -1605,7 +1605,7 @@ in C<wait> or C<waitpid>. (Win32)
There is no shell to process metacharacters, and the native standard is
to pass a command line terminated by "\n" "\r" or "\0" to the spawned
-program. Redirection such as C<E<gt> foo> is performed (if at all) by
+program. Redirection such as C<< > foo >> is performed (if at all) by
the run time library of the spawned program. C<system> I<list> will call
the Unix emulation library's C<exec> emulation, which attempts to provide
emulation of the stdin, stdout, stderr in force in the parent, providing
@@ -1616,7 +1616,7 @@ of a child Unix program will exists. Mileage B<will> vary. (S<RISC OS>)
Far from being POSIX compliant. Because there may be no underlying
/bin/sh tries to work around the problem by forking and execing the
first token in its argument string. Handles basic redirection
-("E<lt>" or "E<gt>") on its own behalf. (MiNT)
+("<" or ">") on its own behalf. (MiNT)
=item times
@@ -1754,41 +1754,41 @@ First public release with perl5.005.
=head1 AUTHORS / CONTRIBUTORS
-Abigail E<lt>abigail@fnx.comE<gt>,
-Charles Bailey E<lt>bailey@newman.upenn.eduE<gt>,
-Graham Barr E<lt>gbarr@pobox.comE<gt>,
-Tom Christiansen E<lt>tchrist@perl.comE<gt>,
-Nicholas Clark E<lt>Nicholas.Clark@liverpool.ac.ukE<gt>,
-Thomas Dorner E<lt>Thomas.Dorner@start.deE<gt>,
-Andy Dougherty E<lt>doughera@lafcol.lafayette.eduE<gt>,
-Dominic Dunlop E<lt>domo@vo.luE<gt>,
-Neale Ferguson E<lt>neale@mailbox.tabnsw.com.auE<gt>,
-David J. Fiander E<lt>davidf@mks.comE<gt>,
-Paul Green E<lt>Paul_Green@stratus.comE<gt>,
-M.J.T. Guy E<lt>mjtg@cus.cam.ac.ukE<gt>,
-Jarkko Hietaniemi E<lt>jhi@iki.fi<gt>,
-Luther Huffman E<lt>lutherh@stratcom.comE<gt>,
-Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>,
-Andreas J. KE<ouml>nig E<lt>koenig@kulturbox.deE<gt>,
-Markus Laker E<lt>mlaker@contax.co.ukE<gt>,
-Andrew M. Langmead E<lt>aml@world.std.comE<gt>,
-Larry Moore E<lt>ljmoore@freespace.netE<gt>,
-Paul Moore E<lt>Paul.Moore@uk.origin-it.comE<gt>,
-Chris Nandor E<lt>pudge@pobox.comE<gt>,
-Matthias Neeracher E<lt>neeri@iis.ee.ethz.chE<gt>,
-Gary Ng E<lt>71564.1743@CompuServe.COME<gt>,
-Tom Phoenix E<lt>rootbeer@teleport.comE<gt>,
-AndrE<eacute> Pirard E<lt>A.Pirard@ulg.ac.beE<gt>,
-Peter Prymmer E<lt>pvhp@forte.comE<gt>,
-Hugo van der Sanden E<lt>hv@crypt0.demon.co.ukE<gt>,
-Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>,
-Paul J. Schinder E<lt>schinder@pobox.comE<gt>,
-Michael G Schwern E<lt>schwern@pobox.comE<gt>,
-Dan Sugalski E<lt>sugalskd@ous.eduE<gt>,
-Nathan Torkington E<lt>gnat@frii.comE<gt>.
+Abigail <abigail@fnx.com>,
+Charles Bailey <bailey@newman.upenn.edu>,
+Graham Barr <gbarr@pobox.com>,
+Tom Christiansen <tchrist@perl.com>,
+Nicholas Clark <Nicholas.Clark@liverpool.ac.uk>,
+Thomas Dorner <Thomas.Dorner@start.de>,
+Andy Dougherty <doughera@lafcol.lafayette.edu>,
+Dominic Dunlop <domo@vo.lu>,
+Neale Ferguson <neale@mailbox.tabnsw.com.au>,
+David J. Fiander <davidf@mks.com>,
+Paul Green <Paul_Green@stratus.com>,
+M.J.T. Guy <mjtg@cus.cam.ac.uk>,
+Jarkko Hietaniemi <jhi@iki.fi<gt>,
+Luther Huffman <lutherh@stratcom.com>,
+Nick Ing-Simmons <nick@ni-s.u-net.com>,
+Andreas J. KE<ouml>nig <koenig@kulturbox.de>,
+Markus Laker <mlaker@contax.co.uk>,
+Andrew M. Langmead <aml@world.std.com>,
+Larry Moore <ljmoore@freespace.net>,
+Paul Moore <Paul.Moore@uk.origin-it.com>,
+Chris Nandor <pudge@pobox.com>,
+Matthias Neeracher <neeri@iis.ee.ethz.ch>,
+Gary Ng <71564.1743@CompuServe.COM>,
+Tom Phoenix <rootbeer@teleport.com>,
+AndrE<eacute> Pirard <A.Pirard@ulg.ac.be>,
+Peter Prymmer <pvhp@forte.com>,
+Hugo van der Sanden <hv@crypt0.demon.co.uk>,
+Gurusamy Sarathy <gsar@activestate.com>,
+Paul J. Schinder <schinder@pobox.com>,
+Michael G Schwern <schwern@pobox.com>,
+Dan Sugalski <sugalskd@ous.edu>,
+Nathan Torkington <gnat@frii.com>.
This document is maintained by Chris Nandor
-E<lt>pudge@pobox.comE<gt>.
+<pudge@pobox.com>.
=head1 VERSION
diff --git a/pod/perlre.pod b/pod/perlre.pod
index 64f7f1cdcb..09bee37161 100644
--- a/pod/perlre.pod
+++ b/pod/perlre.pod
@@ -312,11 +312,11 @@ several patterns that you want to match against consequent substrings
of your string, see the previous reference. The actual location
where C<\G> will match can also be influenced by using C<pos()> as
an lvalue. See L<perlfunc/pos>.
-
+
The bracketing construct C<( ... )> creates capture buffers. To
-refer to the digit'th buffer use \E<lt>digitE<gt> within the
+refer to the digit'th buffer use \<digit> within the
match. Outside the match use "$" instead of "\". (The
-\E<lt>digitE<gt> notation works in certain circumstances outside
+\<digit> notation works in certain circumstances outside
the match. See the warning below about \1 vs $1 for details.)
Referring back to another part of the match is called a
I<backreference>.
@@ -337,13 +337,13 @@ Examples:
if (/(.)\1/) { # find first doubled char
print "'$1' is the first doubled character\n";
}
-
+
if (/Time: (..):(..):(..)/) { # parse out values
$hours = $1;
$minutes = $2;
$seconds = $3;
}
-
+
Several special variables also refer back to portions of the previous
match. C<$+> returns whatever the last bracket match matched.
C<$&> returns the entire matched string. (At one point C<$0> did
@@ -373,7 +373,7 @@ other two.
Backslashed metacharacters in Perl are alphanumeric, such as C<\b>,
C<\w>, C<\n>. Unlike some other regular expression languages, there
are no backslashed symbols that aren't alphanumeric. So anything
-that looks like \\, \(, \), \E<lt>, \E<gt>, \{, or \} is always
+that looks like \\, \(, \), \<, \>, \{, or \} is always
interpreted as a literal character, not a metacharacter. This was
once used in a common idiom to disable or quote the special meanings
of regular expression metacharacters in a string that you want to
@@ -496,9 +496,9 @@ Sometimes it's still easier just to say:
For look-behind see below.
-=item C<(?E<lt>=pattern)>
+=item C<(?<=pattern)>
-A zero-width positive look-behind assertion. For example, C</(?E<lt>=\t)\w+/>
+A zero-width positive look-behind assertion. For example, C</(?<=\t)\w+/>
matches a word that follows a tab, without including the tab in C<$&>.
Works only for fixed-width look-behind.
@@ -597,7 +597,7 @@ The following pattern matches a parenthesized group:
\)
}x;
-=item C<(?E<gt>pattern)>
+=item C<< (?>pattern) >>
B<WARNING>: This extended regular expression feature is considered
highly experimental, and may be changed or deleted without notice.
@@ -610,7 +610,7 @@ construct is useful for optimizations of what would otherwise be
It may also be useful in places where the "grab all you can, and do not
give anything back" semantic is desirable.
-For example: C<^(?E<gt>a*)ab> will never match, since C<(?E<gt>a*)>
+For example: C<< ^(?>a*)ab >> will never match, since C<< (?>a*) >>
(anchored at the beginning of string, as above) will match I<all>
characters C<a> at the beginning of string, leaving no C<a> for
C<ab> to match. In contrast, C<a*ab> will match the same as C<a+b>,
@@ -619,10 +619,10 @@ group C<ab> (see L<"Backtracking">). In particular, C<a*> inside
C<a*ab> will match fewer characters than a standalone C<a*>, since
this makes the tail match.
-An effect similar to C<(?E<gt>pattern)> may be achieved by writing
+An effect similar to C<< (?>pattern) >> may be achieved by writing
C<(?=(pattern))\1>. This matches the same substring as a standalone
C<a+>, and the following C<\1> eats the matched string; it therefore
-makes a zero-length assertion into an analogue of C<(?E<gt>...)>.
+makes a zero-length assertion into an analogue of C<< (?>...) >>.
(The difference between these two constructs is that the second one
uses a capturing group, thus shifting ordinals of backreferences
in the rest of a regular expression.)
@@ -658,13 +658,13 @@ hung. However, a tiny change to this pattern
\)
}x
-which uses C<(?E<gt>...)> matches exactly when the one above does (verifying
+which uses C<< (?>...) >> matches exactly when the one above does (verifying
this yourself would be a productive exercise), but finishes in a fourth
the time when used on a similar string with 1000000 C<a>s. Be aware,
however, that this pattern currently triggers a warning message under
B<-w> saying it C<"matches the null string many times">):
-On simple groups, such as the pattern C<(?E<gt> [^()]+ )>, a comparable
+On simple groups, such as the pattern C<< (?> [^()]+ ) >>, a comparable
effect may be achieved by negative look-ahead, as in C<[^()]+ (?! [^()] )>.
This was only 4 times slower on a string with 1000000 C<a>s.
@@ -907,12 +907,12 @@ then it would take forever--or until you ran out of stack space.
A powerful tool for optimizing such beasts is what is known as an
"independent group",
-which does not backtrack (see L<C<(?E<gt>pattern)>>). Note also that
+which does not backtrack (see L<C<< (?>pattern) >>>). Note also that
zero-length look-ahead/look-behind assertions will not backtrack to make
the tail match, since they are in "logical" context: only
whether they match is considered relevant. For an example
where side-effects of look-ahead I<might> have influenced the
-following match, see L<C<(?E<gt>pattern)>>.
+following match, see L<C<< (?>pattern) >>>.
=head2 Version 8 Regular Expressions
@@ -1160,7 +1160,7 @@ Same as C<S{0,1}>, C<S{0,BIG_NUMBER}>, C<S{1,BIG_NUMBER}> respectively.
Same as C<S{0,1}?>, C<S{0,BIG_NUMBER}?>, C<S{1,BIG_NUMBER}?> respectively.
-=item C<(?E<gt>S)>
+=item C<< (?>S) >>
Matches the best match for C<S> and only that.
diff --git a/pod/perlref.pod b/pod/perlref.pod
index 1d47f37606..274f43d029 100644
--- a/pod/perlref.pod
+++ b/pod/perlref.pod
@@ -84,7 +84,7 @@ brackets:
Here we've created a reference to an anonymous array of three elements
whose final element is itself a reference to another anonymous array of three
elements. (The multidimensional syntax described later can be used to
-access this. For example, after the above, C<$arrayref-E<gt>[2][1]> would have
+access this. For example, after the above, C<< $arrayref->[2][1] >> would have
the value "b".)
Taking a reference to an enumerated list is not the same
@@ -357,7 +357,7 @@ syntactic sugar, the examples for method 2 may be written:
The left side of the arrow can be any expression returning a reference,
including a previous dereference. Note that C<$array[$x]> is I<not> the
-same thing as C<$array-E<gt>[$x]> here:
+same thing as C<< $array->[$x] >> here:
$array[$x]->{"foo"}->[0] = "January";
@@ -365,7 +365,7 @@ This is one of the cases we mentioned earlier in which references could
spring into existence when in an lvalue context. Before this
statement, C<$array[$x]> may have been undefined. If so, it's
automatically defined with a hash reference so that we can look up
-C<{"foo"}> in it. Likewise C<$array[$x]-E<gt>{"foo"}> will automatically get
+C<{"foo"}> in it. Likewise C<< $array[$x]->{"foo"} >> will automatically get
defined with an array reference so that we can look up C<[0]> in it.
This process is called I<autovivification>.
diff --git a/pod/perlreftut.pod b/pod/perlreftut.pod
index 09bea594ff..c8593fb1ce 100644
--- a/pod/perlreftut.pod
+++ b/pod/perlreftut.pod
@@ -184,26 +184,26 @@ Using a hash reference is I<exactly> the same:
B<Use Rule 2>
-C<${$aref}[3]> is too hard to read, so you can write C<$aref-E<gt>[3]>
+C<${$aref}[3]> is too hard to read, so you can write C<< $aref->[3] >>
instead.
C<${$href}{red}> is too hard to read, so you can write
-C<$href-E<gt>{red}> instead.
+C<< $href->{red} >> instead.
Most often, when you have an array or a hash, you want to get or set a
single element from it. C<${$aref}[3]> and C<${$href}{'red'}> have
too much punctuation, and Perl lets you abbreviate.
-If C<$aref> holds a reference to an array, then C<$aref-E<gt>[3]> is
+If C<$aref> holds a reference to an array, then C<< $aref->[3] >> is
the fourth element of the array. Don't confuse this with C<$aref[3]>,
which is the fourth element of a totally different array, one
deceptively named C<@aref>. C<$aref> and C<@aref> are unrelated the
same way that C<$item> and C<@item> are.
-Similarly, C<$href-E<gt>{'red'}> is part of the hash referred to by
+Similarly, C<< $href->{'red'} >> is part of the hash referred to by
the scalar variable C<$href>, perhaps even one with no name.
C<$href{'red'}> is part of the deceptively named C<%href> hash. It's
-easy to forget to leave out the C<-E<gt>>, and if you do, you'll get
+easy to forget to leave out the C<< -> >>, and if you do, you'll get
bizarre results when your program gets array and hash elements out of
totally unexpected hashes and arrays that weren't the ones you wanted
to use.
@@ -228,10 +228,10 @@ another array.
C<$a[1]> is one of these references. It refers to an array, the array
containing C<(4, 5, 6)>, and because it is a reference to an array,
-B<USE RULE 2> says that we can write C<$a[1]-E<gt>[2]> to get the
-third element from that array. C<$a[1]-E<gt>[2]> is the 6.
-Similarly, C<$a[0]-E<gt>[1]> is the 2. What we have here is like a
-two-dimensional array; you can write C<$a[ROW]-E<gt>[COLUMN]> to get
+B<USE RULE 2> says that we can write C<< $a[1]->[2] >> to get the
+third element from that array. C<< $a[1]->[2] >> is the 6.
+Similarly, C<< $a[0]->[1] >> is the 2. What we have here is like a
+two-dimensional array; you can write C<< $a[ROW]->[COLUMN] >> to get
or set the element in any row and any column of the array.
The notation still looks a little cumbersome, so there's one more
@@ -241,8 +241,8 @@ abbreviation:
In between two B<subscripts>, the arrow is optional.
-Instead of C<$a[1]-E<gt>[2]>, we can write C<$a[1][2]>; it means the
-same thing. Instead of C<$a[0]-E<gt>[1]>, we can write C<$a[0][1]>;
+Instead of C<< $a[1]->[2] >>, we can write C<$a[1][2]>; it means the
+same thing. Instead of C<< $a[0]->[1] >>, we can write C<$a[0][1]>;
it means the same thing.
Now it really looks like two-dimensional arrays!
diff --git a/pod/perlsub.pod b/pod/perlsub.pod
index 927e944c93..46d1a2a2b0 100644
--- a/pod/perlsub.pod
+++ b/pod/perlsub.pod
@@ -179,7 +179,7 @@ when just naming the subroutine, such as when it's used as
an argument to defined() or undef(). Nor is it optional when you
want to do an indirect subroutine call with a subroutine name or
reference using the C<&$subref()> or C<&{$subref}()> constructs,
-although the C<$subref-E<gt>()> notation solves that problem.
+although the C<< $subref->() >> notation solves that problem.
See L<perlref> for more about all that.
Subroutines may be called recursively. If a subroutine is called
@@ -891,7 +891,7 @@ like a built-in function. If you call it like an old-fashioned
subroutine, then it behaves like an old-fashioned subroutine. It
naturally falls out from this rule that prototypes have no influence
on subroutine references like C<\&foo> or on indirect subroutine
-calls like C<&{$subref}> or C<$subref-E<gt>()>.
+calls like C<&{$subref}> or C<< $subref->() >>.
Method calls are not influenced by prototypes either, because the
function to be called is indeterminate at compile time, since
diff --git a/pod/perltie.pod b/pod/perltie.pod
index 58e9c4375b..92040528e9 100644
--- a/pod/perltie.pod
+++ b/pod/perltie.pod
@@ -184,7 +184,7 @@ methods: TIEARRAY, FETCH, STORE, FETCHSIZE, STORESIZE and perhaps DESTROY.
FETCHSIZE and STORESIZE are used to provide C<$#array> and
equivalent C<scalar(@array)> access.
-
+
The methods POP, PUSH, SHIFT, UNSHIFT, SPLICE, DELETE, and EXISTS are
required if the perl operator with the corresponding (but lowercase) name
is to operate on the tied array. The B<Tie::Array> class can be used as a
diff --git a/pod/perltodo.pod b/pod/perltodo.pod
index a6ca1f10ef..f22d4737f8 100644
--- a/pod/perltodo.pod
+++ b/pod/perltodo.pod
@@ -165,7 +165,7 @@ I think we can accomodate that by extending bless() to stash
extra information for objects so we track their lifetime accurately
for those that want their DESTROY() to be predictable (this will be
a speed hit, naturally, and will therefore be optional, naturally. :)
-
+
[N.B. Don't even ask me about this now! When I have the time to
write a cogent summary, I'll post it.]
@@ -321,14 +321,14 @@ We need something in the vicinity of:
No documentation for perl function `random stuff' found
The following entry in perlfunc.pod matches /random/a:
=item rand EXPR
-
+
=item rand
-
+
Returns a random fractional number greater than or equal to C<0> and less
than the value of EXPR. (EXPR should be positive.) If EXPR is
omitted, the value C<1> is used. Automatically calls C<srand()> unless
C<srand()> has already been called. See also C<srand()>.
-
+
(Note: If your rand function consistently returns numbers that are too
large or too small, then your version of Perl was probably compiled
with the wrong number of RANDBITS.)
diff --git a/pod/perltoot.pod b/pod/perltoot.pod
index 3062f5924d..31a7c76353 100644
--- a/pod/perltoot.pod
+++ b/pod/perltoot.pod
@@ -111,8 +111,8 @@ by up-casing the hash keys:
PEERS => [ "Norbert", "Rhys", "Phineas"],
};
-And so you could get at C<$rec-E<gt>{NAME}> to find "Jason", or
-C<@{ $rec-E<gt>{PEERS} }> to get at "Norbert", "Rhys", and "Phineas".
+And so you could get at C<< $rec->{NAME} >> to find "Jason", or
+C<< @{ $rec->{PEERS} } >> to get at "Norbert", "Rhys", and "Phineas".
(Have you ever noticed how many 23-year-old programmers seem to
be named "Jason" these days? :-)
@@ -542,7 +542,7 @@ and DESTROY methods as follows:
}
What happens if a derived class (which we'll call Employee) inherits
-methods from this Person base class? Then C<Employee-E<gt>debug()>, when called
+methods from this Person base class? Then C<< Employee->debug() >>, when called
as a class method, manipulates $Person::Debugging not $Employee::Debugging.
=head2 Class Destructors
@@ -816,7 +816,7 @@ What do we mean by the Person::new() function -- isn't that actually
a method? Well, in principle, yes. A method is just a function that
expects as its first argument a class name (package) or object
(blessed reference). Person::new() is the function that both the
-C<Person-E<gt>new()> method and the C<Employee-E<gt>new()> method end
+C<< Person->new() >> method and the C<< Employee->new() >> method end
up calling. Understand that while a method call looks a lot like a
function call, they aren't really quite the same, and if you treat them
as the same, you'll very soon be left with nothing but broken programs.
diff --git a/pod/perltootc.pod b/pod/perltootc.pod
index 85ae6fba03..64f8233fdb 100644
--- a/pod/perltootc.pod
+++ b/pod/perltootc.pod
@@ -653,8 +653,8 @@ settings can then be used in constructors for initialization of a
particular object. The class's eponymous hash can also be used to
implement I<translucent attributes>. A translucent attribute is one
that has a class-wide default. Each object can set its own value for the
-attribute, in which case C<$object-E<gt>attribute()> returns that value.
-But if no value has been set, then C<$object-E<gt>attribute()> returns
+attribute, in which case C<< $object->attribute() >> returns that value.
+But if no value has been set, then C<< $object->attribute() >> returns
the class-wide default.
We'll apply something of a copy-on-write approach to these translucent
@@ -1294,8 +1294,8 @@ or the AutoLoader, because they alter the lexical scope in which the
module's methods wind up getting compiled.
The usual mealy-mouthed package-mungeing doubtless applies to setting
-up names of object attributes. For example, C<$self-E<gt>{ObData1}>
-should probably be C<$self-E<gt>{ __PACKAGE__ . "_ObData1" }>, but that
+up names of object attributes. For example, C<< $self->{ObData1} >>
+should probably be C<< $self->{ __PACKAGE__ . "_ObData1" } >>, but that
would just confuse the examples.
=head1 SEE ALSO
diff --git a/pod/perltrap.pod b/pod/perltrap.pod
index f278fa0929..e528254e0e 100644
--- a/pod/perltrap.pod
+++ b/pod/perltrap.pod
@@ -69,7 +69,7 @@ executed.) See L<perlvar>.
=item *
-$E<lt>I<digit>E<gt> does not refer to fields--it refers to substrings matched
+$<I<digit>> does not refer to fields--it refers to substrings matched
by the last match pattern.
=item *
@@ -103,7 +103,7 @@ basically incompatible with C.)
The concatenation operator is ".", not the null string. (Using the
null string would render C</pat/ /pat/> unparsable, because the third slash
would be interpreted as a division operator--the tokenizer is in fact
-slightly context sensitive for operators like "/", "?", and "E<gt>".
+slightly context sensitive for operators like "/", "?", and ">".
And in fact, "." itself can be the beginning of a number.)
=item *
@@ -295,7 +295,7 @@ you might expect to do not.
=item *
-The E<lt>FHE<gt> construct is not the name of the filehandle, it is a readline
+The <FH> construct is not the name of the filehandle, it is a readline
operation on that handle. The data read is assigned to $_ only if the
file read is the sole condition in a while loop:
@@ -424,7 +424,7 @@ behave differently in perl4 vs. perl5, because the packages don't exist.
$a=1;$b=2;$c=3;$var=4;
print "$a::$b::$c ";
print "$var::abc::xyz\n";
-
+
# perl4 prints: 1::2::3 4::abc::xyz
# perl5 prints: 3
@@ -1266,7 +1266,7 @@ Since version 5.002, Perl uses sigaction() under SysV.
=item * (SysV)
-Under SysV OSes, C<seek()> on a file opened to append C<E<gt>E<gt>> now does
+Under SysV OSes, C<seek()> on a file opened to append C<<< >> >>> now does
the right thing w.r.t. the fopen() manpage. e.g., - When a file is opened
for append, it is impossible to overwrite information already in
the file.
diff --git a/pod/perlvar.pod b/pod/perlvar.pod
index 1b394b3fbe..04fb3fec96 100644
--- a/pod/perlvar.pod
+++ b/pod/perlvar.pod
@@ -99,7 +99,7 @@ The implicit iterator variable in the grep() and map() functions.
=item *
-The default place to put an input record when a C<E<lt>FHE<gt>>
+The default place to put an input record when a C<< <FH> >>
operation's result is tested by itself as the sole criterion of a C<while>
test. Outside a C<while> test, this will not happen.
@@ -111,7 +111,7 @@ test. Outside a C<while> test, this will not happen.
=over 8
-=item $E<lt>I<digits>E<gt>
+=item $<I<digits>>
Contains the subpattern from the corresponding set of capturing
parentheses from the last pattern match, not counting patterns
@@ -215,7 +215,7 @@ you just read() (or called a C<seek> or C<tell> on). The value
may be different from the actual physical line number in the file,
depending on what notion of "line" is in effect--see C<$/> on how
to change that. An explicit close on a filehandle resets the line
-number. Because C<E<lt>E<gt>> never does an explicit close, line
+number. Because C<< <> >> never does an explicit close, line
numbers increase across ARGV files (but see examples in L<perlfunc/eof>).
Consider this variable read-only: setting it does not reposition
the seek pointer; you'll have to do that on your own. Localizing C<$.>
@@ -421,7 +421,7 @@ I<n>-th subpattern, or undef if the subpattern did not match.
Thus after a match against $_, $& coincides with C<substr $_, $-[0],
$+[0] - $-[0]>. Similarly, C<$>I<n> coincides with C<substr $_, $-[>I<n>C<],
$+[>I<n>C<] - $-[>I<n>C<]> if C<$-[>I<n>C<]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-]>. One can use C<$#E<45>> to find the last
+C<substr $_, $-[$#-], $+[$#-]>. One can use C<$#-> to find the last
matched subgroup in the last successful match. Contrast with
C<$#+>, the number of subgroups in the regular expression. Compare
with C<@+>.
@@ -511,7 +511,7 @@ The status returned by the last pipe close, backtick (C<``>) command,
successful call to wait() or waitpid(), or from the system()
operator. This is just the 16-bit status word returned by the
wait() system call (or else is made up to look like it). Thus, the
-exit value of the subprocess is really (C<$? E<gt>E<gt> 8>), and
+exit value of the subprocess is really (C<<< $? >> 8 >>>), and
C<$? & 127> gives which signal, if any, the process died from, and
C<$? & 128> reports whether there was a core dump. (Mnemonic:
similar to B<sh> and B<ksh>.)
@@ -629,7 +629,7 @@ The effective uid of this process. Example:
($<,$>) = ($>,$<); # swap real and effective uid
(Mnemonic: it's the uid you went I<to>, if you're running setuid.)
-C<$E<lt>> and C<$E<gt>> can be swapped only on machines
+C<< $< >> and C<< $> >> can be swapped only on machines
supporting setreuid().
=item $REAL_GROUP_ID
@@ -673,7 +673,7 @@ list, say C< $) = "5 5" >.
(Mnemonic: parentheses are used to I<group> things. The effective gid
is the group that's I<right> for you, if you're running setgid.)
-C<$E<lt>>, C<$E<gt>>, C<$(> and C<$)> can be set only on
+C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
and C<$)> can be swapped only on machines supporting setregid().
@@ -964,7 +964,7 @@ This may not be a full pathname, nor even necessarily in your path.
=item $ARGV
-contains the name of the current file when reading from E<lt>E<gt>.
+contains the name of the current file when reading from <>.
=item @ARGV
@@ -1134,7 +1134,7 @@ the value of $@ is the compile error, or the argument to C<die>
(which will interpolate C<$!> and C<$?>!). (See also L<Fatal>,
though.)
-When the eval() expression above is executed, open(), C<<PIPEE<gt>>,
+When the eval() expression above is executed, open(), C<< <PIPE> >>,
and C<close> are translated to calls in the C run-time library and
thence to the operating system kernel. C<$!> is set to the C library's
C<errno> if one of these calls fails.
diff --git a/pod/perlxstut.pod b/pod/perlxstut.pod
index 35edd05ac0..88c04ad300 100644
--- a/pod/perlxstut.pod
+++ b/pod/perlxstut.pod
@@ -201,11 +201,11 @@ example only, we'll create our own test script. Create a file called hello
that looks like this:
#! /opt/perl5/bin/perl
-
+
use ExtUtils::testlib;
-
+
use Mytest;
-
+
Mytest::hello();
Now we make the script executable (C<chmod -x hello>), run the script
@@ -504,7 +504,7 @@ Also create a file mylib.c that looks like this:
#include <stdlib.h>
#include "./mylib.h"
-
+
double
foo(int a, long b, const char *c)
{
diff --git a/pod/pod2usage.PL b/pod/pod2usage.PL
index 24e93fa350..e0f70b2ca4 100644
--- a/pod/pod2usage.PL
+++ b/pod/pod2usage.PL
@@ -16,8 +16,8 @@ use Cwd;
$origdir = cwd;
chdir(dirname($0));
($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
+$file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
+$file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
open OUT,">$file" or die "Can't create $file: $!";
diff --git a/pod/podselect.PL b/pod/podselect.PL
index 3fa411846b..f2ba80a73b 100644
--- a/pod/podselect.PL
+++ b/pod/podselect.PL
@@ -16,8 +16,8 @@ use Cwd;
$origdir = cwd;
chdir(dirname($0));
($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
+$file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
+$file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
open OUT,">$file" or die "Can't create $file: $!";
diff --git a/pp_hot.c b/pp_hot.c
index b1bbbc7cab..d2eef9b84a 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -621,6 +621,93 @@ PP(pp_rv2hv)
}
}
+STATIC int
+S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
+ SV **lastrelem)
+{
+ OP *leftop;
+ SV *tmpstr;
+ I32 i;
+
+ leftop = ((BINOP*)PL_op)->op_last;
+ assert(leftop);
+ assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
+ leftop = ((LISTOP*)leftop)->op_first;
+ assert(leftop);
+ /* Skip PUSHMARK and each element already assigned to. */
+ for (i = lelem - firstlelem; i > 0; i--) {
+ leftop = leftop->op_sibling;
+ assert(leftop);
+ }
+ if (leftop->op_type != OP_RV2HV)
+ return 0;
+
+ /* pseudohash */
+ if (av_len(ary) > 0)
+ av_fill(ary, 0); /* clear all but the fields hash */
+ if (lastrelem >= relem) {
+ while (relem < lastrelem) { /* gobble up all the rest */
+ SV *tmpstr;
+ assert(relem[0]);
+ assert(relem[1]);
+ /* Avoid a memory leak when avhv_store_ent dies. */
+ tmpstr = sv_newmortal();
+ sv_setsv(tmpstr,relem[1]); /* value */
+ relem[1] = tmpstr;
+ if (avhv_store_ent(ary,relem[0],tmpstr,0))
+ SvREFCNT_inc(tmpstr);
+ if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
+ mg_set(tmpstr);
+ relem += 2;
+ TAINT_NOT;
+ }
+ }
+ if (relem == lastrelem)
+ return 1;
+ return 2;
+}
+
+STATIC void
+S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
+{
+ if (*relem) {
+ SV *tmpstr;
+ if (ckWARN(WARN_MISC)) {
+ if (relem == firstrelem &&
+ SvROK(*relem) &&
+ (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
+ SvTYPE(SvRV(*relem)) == SVt_PVHV))
+ {
+ Perl_warner(aTHX_ WARN_MISC,
+ "Reference found where even-sized list expected");
+ }
+ else
+ Perl_warner(aTHX_ WARN_MISC,
+ "Odd number of elements in hash assignment");
+ }
+ if (SvTYPE(hash) == SVt_PVAV) {
+ /* pseudohash */
+ tmpstr = sv_newmortal();
+ if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
+ SvREFCNT_inc(tmpstr);
+ if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
+ mg_set(tmpstr);
+ }
+ else {
+ HE *didstore;
+ tmpstr = NEWSV(29,0);
+ didstore = hv_store_ent(hash,*relem,tmpstr,0);
+ if (SvMAGICAL(hash)) {
+ if (SvSMAGICAL(tmpstr))
+ mg_set(tmpstr);
+ if (!didstore)
+ sv_2mortal(tmpstr);
+ }
+ }
+ TAINT_NOT;
+ }
+}
+
PP(pp_aassign)
{
djSP;
@@ -646,21 +733,22 @@ PP(pp_aassign)
* special care that assigning the identifier on the left doesn't
* clobber a value on the right that's used later in the list.
*/
- if (PL_op->op_private & OPpASSIGN_COMMON) {
+ if (PL_op->op_private & (OPpASSIGN_COMMON)) {
EXTEND_MORTAL(lastrelem - firstrelem + 1);
- for (relem = firstrelem; relem <= lastrelem; relem++) {
- /*SUPPRESS 560*/
- if (sv = *relem) {
+ for (relem = firstrelem; relem <= lastrelem; relem++) {
+ /*SUPPRESS 560*/
+ if (sv = *relem) {
TAINT_NOT; /* Each item is independent */
- *relem = sv_mortalcopy(sv);
+ *relem = sv_mortalcopy(sv);
}
- }
+ }
}
relem = firstrelem;
lelem = firstlelem;
ary = Null(AV*);
hash = Null(HV*);
+
while (lelem <= lastlelem) {
TAINT_NOT; /* Each item stands on its own, taintwise. */
sv = *lelem++;
@@ -668,7 +756,19 @@ PP(pp_aassign)
case SVt_PVAV:
ary = (AV*)sv;
magic = SvMAGICAL(ary) != 0;
-
+ if (PL_op->op_private & OPpASSIGN_HASH) {
+ switch (do_maybe_phash(ary, lelem, firstlelem, relem,
+ lastrelem))
+ {
+ case 0:
+ goto normal_array;
+ case 1:
+ do_oddball((HV*)ary, relem, firstrelem);
+ }
+ relem = lastrelem + 1;
+ break;
+ }
+ normal_array:
av_clear(ary);
av_extend(ary, lastrelem - relem);
i = 0;
@@ -688,7 +788,7 @@ PP(pp_aassign)
TAINT_NOT;
}
break;
- case SVt_PVHV: {
+ case SVt_PVHV: { /* normal hash */
SV *tmpstr;
hash = (HV*)sv;
@@ -715,27 +815,7 @@ PP(pp_aassign)
TAINT_NOT;
}
if (relem == lastrelem) {
- if (*relem) {
- HE *didstore;
- if (ckWARN(WARN_MISC)) {
- if (relem == firstrelem &&
- SvROK(*relem) &&
- ( SvTYPE(SvRV(*relem)) == SVt_PVAV ||
- SvTYPE(SvRV(*relem)) == SVt_PVHV ) )
- Perl_warner(aTHX_ WARN_MISC, "Reference found where even-sized list expected");
- else
- Perl_warner(aTHX_ WARN_MISC, "Odd number of elements in hash assignment");
- }
- tmpstr = NEWSV(29,0);
- didstore = hv_store_ent(hash,*relem,tmpstr,0);
- if (magic) {
- if (SvSMAGICAL(tmpstr))
- mg_set(tmpstr);
- if (!didstore)
- sv_2mortal(tmpstr);
- }
- TAINT_NOT;
- }
+ do_oddball(hash, relem, firstrelem);
relem++;
}
}
diff --git a/proto.h b/proto.h
index ae352c7f5b..4ea8472760 100644
--- a/proto.h
+++ b/proto.h
@@ -64,6 +64,7 @@ PERL_CALLCONV I32 Perl_apply(pTHX_ I32 type, SV** mark, SV** sp);
PERL_CALLCONV SV* Perl_avhv_delete_ent(pTHX_ AV *ar, SV* keysv, I32 flags, U32 hash);
PERL_CALLCONV bool Perl_avhv_exists_ent(pTHX_ AV *ar, SV* keysv, U32 hash);
PERL_CALLCONV SV** Perl_avhv_fetch_ent(pTHX_ AV *ar, SV* keysv, I32 lval, U32 hash);
+PERL_CALLCONV SV** Perl_avhv_store_ent(pTHX_ AV *ar, SV* keysv, SV* val, U32 hash);
PERL_CALLCONV HE* Perl_avhv_iternext(pTHX_ AV *ar);
PERL_CALLCONV SV* Perl_avhv_iterval(pTHX_ AV *ar, HE* entry);
PERL_CALLCONV HV* Perl_avhv_keys(pTHX_ AV *ar);
@@ -932,6 +933,7 @@ END_EXTERN_C
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
STATIC I32 S_avhv_index_sv(pTHX_ SV* sv);
+STATIC I32 S_avhv_index(pTHX_ AV* av, SV* sv, U32 hash);
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
@@ -1061,6 +1063,8 @@ STATIC void S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t f);
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+STATIC int S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem, SV **lastrelem);
+STATIC void S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem);
STATIC CV* S_get_db_sub(pTHX_ SV **svp, CV *cv);
STATIC SV* S_method_common(pTHX_ SV* meth, U32* hashp);
#endif
diff --git a/regcomp.c b/regcomp.c
index 6d5a33b922..330dcbe429 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -1734,6 +1734,9 @@ S_reg(pTHX_ I32 paren, I32 *flagp)
nextchar();
*flagp = TRYAGAIN;
return NULL;
+ case 'p':
+ Perl_warner(aTHX_ WARN_REGEXP, "(?p{}) is deprecated - use (??{})");
+ /* FALL THROUGH*/
case '?':
logical = 1;
paren = *PL_regcomp_parse++;
diff --git a/t/lib/anydbm.t b/t/lib/anydbm.t
index 9efe5e9f3e..e38c7e7860 100755
--- a/t/lib/anydbm.t
+++ b/t/lib/anydbm.t
@@ -122,24 +122,24 @@ if ($h{''} eq 'bar') {
print "ok 12\n" ;
}
else {
- print "not ok 12\n" ;
if ($AnyDBM_File::ISA[0] eq 'DB_File' && $DB_File::db_ver >= 2.004010) {
($major, $minor, $patch) = ($DB_File::db_ver =~ /^(\d+)\.(\d\d\d)(\d\d\d)/) ;
$major =~ s/^0+// ;
$minor =~ s/^0+// ;
$patch =~ s/^0+// ;
$compact = "$major.$minor.$patch" ;
-
- print STDERR <<EOM ;
-#
-# anydbm.t test 12 will fail when AnyDBM_File uses the combination of
-# DB_File and Berkeley DB 2.4.10 (or greater).
-# You are using DB_File $DB_File::VERSION and Berkeley DB $compact
-#
-# Berkeley DB 2 from version 2.4.10 onwards does not allow null keys.
-# This feature will be reenabled in a future version of Berkeley DB.
-#
-EOM
+ #
+ # anydbm.t test 12 will fail when AnyDBM_File uses the combination of
+ # DB_File and Berkeley DB 2.4.10 (or greater).
+ # You are using DB_File $DB_File::VERSION and Berkeley DB $compact
+ #
+ # Berkeley DB 2 from version 2.4.10 onwards does not allow null keys.
+ # This feature will be reenabled in a future version of Berkeley DB.
+ #
+ print "ok 12 # skipped: db v$compact, no null key support\n" ;
+ }
+ else {
+ print "not ok 12\n" ;
}
}
diff --git a/t/lib/glob-basic.t b/t/lib/glob-basic.t
index b967e8d033..47280831a9 100755
--- a/t/lib/glob-basic.t
+++ b/t/lib/glob-basic.t
@@ -14,6 +14,7 @@ END {
print "not ok 1\n" unless $loaded;
}
use File::Glob ':glob';
+use Cwd ();
$loaded = 1;
print "ok 1\n";
@@ -72,7 +73,9 @@ print "ok 5\n";
# check bad protections
# should return an empty list, and set ERROR
-if ($^O eq 'mpeix' or $^O eq 'MSWin32' or $^O eq 'os2' or $^O eq 'VMS' or $^O eq 'cygwin' or not $>) {
+if ($^O eq 'mpeix' or $^O eq 'MSWin32' or $^O eq 'os2' or $^O eq 'VMS'
+ or $^O eq 'cygwin' or Cwd::cwd() =~ m#^/afs#s or not $>)
+{
print "ok 6 # skipped\n";
}
else {
diff --git a/t/op/avhv.t b/t/op/avhv.t
index 23f9c69c8c..cd7c957619 100755
--- a/t/op/avhv.t
+++ b/t/op/avhv.t
@@ -1,5 +1,5 @@
#!./perl
-
+
BEGIN {
chdir 't' if -d 't';
unshift @INC, '../lib';
@@ -17,7 +17,7 @@ sub STORESIZE { $#{$_[0]} = $_[1]+1 }
package main;
-print "1..20\n";
+print "1..28\n";
$sch = {
'abc' => 1,
@@ -139,3 +139,40 @@ print "ok 19\n";
print "not " unless "$avhv->{bar}" eq "yyy";
print "ok 20\n";
+
+# hash assignment
+%$avhv = ();
+print "not " unless ref($avhv->[0]) eq 'HASH';
+print "ok 21\n";
+
+%hv = %$avhv;
+print "not " if grep defined, values %hv;
+print "ok 22\n";
+print "not " if grep ref, keys %hv;
+print "ok 23\n";
+
+%$avhv = (foo => 29, pants => 2, bar => 0);
+print "not " unless "@$avhv[1..3]" eq '29 0 2';
+print "ok 24\n";
+
+my $extra;
+my @extra;
+($extra, %$avhv) = ("moo", foo => 42, pants => 53, bar => "HIKE!");
+print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and $extra eq 'moo';
+print "ok 25\n";
+
+%$avhv = ();
+(%$avhv, $extra) = (foo => 42, pants => 53, bar => "HIKE!");
+print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and !defined $extra;
+print "ok 26\n";
+
+@extra = qw(whatever and stuff);
+%$avhv = ();
+(%$avhv, @extra) = (foo => 42, pants => 53, bar => "HIKE!");
+print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and @extra == 0;
+print "ok 27\n";
+
+%$avhv = ();
+(@extra, %$avhv) = (foo => 42, pants => 53, bar => "HIKE!");
+print "not " unless ref $avhv->[0] eq 'HASH' and @extra == 6;
+print "ok 28\n";
diff --git a/t/op/hashwarn.t b/t/op/hashwarn.t
index 634e7e1f25..0b6f10feee 100755
--- a/t/op/hashwarn.t
+++ b/t/op/hashwarn.t
@@ -14,7 +14,7 @@ BEGIN {
# ...and save 'em as we go
$SIG{'__WARN__'} = sub { push @warnings, @_ };
$| = 1;
- print "1..7\n";
+ print "1..9\n";
}
END { print "not ok\n# Uncaught warnings:\n@warnings\n" if @warnings }
@@ -66,6 +66,13 @@ my $ref_msg = '/^Reference found where even-sized list expected/';
%hash = sub { print "ok" };
test_warning 6, shift @warnings, $odd_msg;
+ my $avhv = [{x=>1,y=>2}];
+ %$avhv = (x=>13,'y');
+ test_warning 7, shift @warnings, $odd_msg;
+
+ %$avhv = 'x';
+ test_warning 8, shift @warnings, $odd_msg;
+
$_ = { 1..10 };
- test 7, ! @warnings, "Unexpected warning";
+ test 9, ! @warnings, "Unexpected warning";
}
diff --git a/toke.c b/toke.c
index 3af0896349..79ee972e02 100644
--- a/toke.c
+++ b/toke.c
@@ -1269,8 +1269,8 @@ S_scan_const(pTHX_ char *start)
if (s[2] == '#') {
while (s < send && *s != ')')
*d++ = *s++;
- } else if (s[2] == '{'
- || s[2] == '?' && s[3] == '{') { /* This should march regcomp.c */
+ } else if (s[2] == '{' /* This should match regcomp.c */
+ || (s[2] == 'p' || s[2] == '?') && s[3] == '{') {
I32 count = 1;
char *regparse = s + (s[2] == '{' ? 3 : 4);
char c;
diff --git a/utils/dprofpp.PL b/utils/dprofpp.PL
index a6a1d911a5..51e8d7839a 100644
--- a/utils/dprofpp.PL
+++ b/utils/dprofpp.PL
@@ -14,9 +14,8 @@ use File::Basename qw(&basename &dirname);
# This is so that make depend always knows where to find PL derivatives.
chdir(dirname($0));
($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($Config{'osname'} eq 'VMS' or
- $Config{'osname'} eq 'OS2'); # "case-forgiving"
+$file =~ s/\.pl$// if ($Config{'osname'} eq 'OS2'); # "case-forgiving"
+$file =~ s/\.pl$/.com/ if ($Config{'osname'} eq 'VMS'); # "case-forgiving"
my $dprof_pm = '../ext/Devel/DProf/DProf.pm';
my $VERSION = 0;
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
index eb9d0bd97a..c96c145752 100644
--- a/vms/descrip_mms.template
+++ b/vms/descrip_mms.template
@@ -347,7 +347,7 @@ libmods : $(LIBPREREQ)
@ $(NOOP)
utils : $(utils1) $(utils2)
@ $(NOOP)
-podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com
+podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com [.lib.pod]pod2usage.com [.lib.pod]podselect.com
@ $(NOOP)
x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com
@ $(NOOP)
@@ -582,6 +582,16 @@ dynext : $(LIBPREREQ) $(DBG)perlshr$(E)
$(MINIPERL) $(MMS$SOURCE)
Copy/Log [.pod]podchecker.com $(MMS$TARGET)
+[.lib.pod]pod2usage.com : [.pod]pod2usage.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+ $(MINIPERL) $(MMS$SOURCE)
+ Copy/Log [.pod]pod2usage.com $(MMS$TARGET)
+
+[.lib.pod]podselect.com : [.pod]podselect.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+ $(MINIPERL) $(MMS$SOURCE)
+ Copy/Log [.pod]podselect.com $(MMS$TARGET)
+
preplibrary : $(MINIPERL_EXE) $(LIBPREREQ) $(SOCKPM)
@ Write Sys$Output "Autosplitting Perl library . . ."
@ Create/Directory [.lib.auto]
diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t
index 779396be73..bf0208d94b 100644
--- a/vms/ext/filespec.t
+++ b/vms/ext/filespec.t
@@ -86,7 +86,7 @@ some:[where.over]the.rainbow unixify /some/where/over/the.rainbow
/some/where/over/the.rainbow vmsify some:[where.over]the.rainbow
some/where/over/the.rainbow vmsify [.some.where.over]the.rainbow
../some/where/over/the.rainbow vmsify [-.some.where.over]the.rainbow
-some/../../where/over/the.rainbow vmsify [-.where.over]the.rainbow
+some/../../where/over/the.rainbow vmsify [.some.--.where.over]the.rainbow
.../some/where/over/the.rainbow vmsify [...some.where.over]the.rainbow
some/.../where/over/the.rainbow vmsify [.some...where.over]the.rainbow
/some/.../where/over/the.rainbow vmsify some:[...where.over]the.rainbow
diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl
index c668120464..a109f7bdfd 100644
--- a/vms/gen_shrfls.pl
+++ b/vms/gen_shrfls.pl
@@ -186,12 +186,6 @@ LINE: while (<CPP>) {
print "opcode.h>> $_" if $debug > 2;
if (/^OP \*\s/) { &scan_func($_); }
if (/^\s*EXT/) { &scan_var($_); }
- if (/^\s+OP_/) { &scan_enum($_); }
- last LINE unless defined($_ = <CPP>);
- }
- while (/^typedef enum/ .. /^\s*\}/) {
- print "global enum>> $_" if $debug > 2;
- &scan_enum($_);
last LINE unless defined($_ = <CPP>);
}
# Check for transition to new header file
diff --git a/vms/perlvms.pod b/vms/perlvms.pod
index 53925b2541..3883233c28 100644
--- a/vms/perlvms.pod
+++ b/vms/perlvms.pod
@@ -463,7 +463,11 @@ is executed as a DCL command. Otherwise, the first token on
the command line is treated as the filespec of an image to
run, and an attempt is made to invoke it (using F<.Exe> and
the process defaults to expand the filespec) and pass the
-rest of C<exec>'s argument to it as parameters.
+rest of C<exec>'s argument to it as parameters. If the token
+has no file type, and matches a file with null type, then an
+attempt is made to determine whether the file is an executable
+image which should be invoked using C<MCR> or a text file which
+should be passed to DCL as a command procedure.
You can use C<exec> in both ways within the same script, as
long as you call C<fork> and C<exec> in pairs. Perl
@@ -558,9 +562,16 @@ specification (e.g. C<:> or C<]>), an attempt is made to expand it
using a default type of F<.Exe> and the process defaults, and if
successful, the resulting file is invoked via C<MCR>. This allows you
to invoke an image directly simply by passing the file specification
-to C<system>, a common Unixish idiom. If LIST consists
-of the empty string, C<system> spawns an interactive DCL subprocess,
-in the same fashion as typiing B<SPAWN> at the DCL prompt.
+to C<system>, a common Unixish idiom. If the token has no file type,
+and matches a file with null type, then an attempt is made to
+determine whether the file is an executable image which should be
+invoked using C<MCR> or a text file which should be passed to DCL
+as a command procedure.
+
+If LIST consists of the empty string, C<system> spawns an
+interactive DCL subprocess, in the same fashion as typiing
+B<SPAWN> at the DCL prompt.
+
Perl waits for the subprocess to complete before continuing
execution in the current process. As described in L<perlfunc>,
the return value of C<system> is a fake "status" which follows
diff --git a/vms/subconfigure.com b/vms/subconfigure.com
index a9c3e66904..1686c663de 100644
--- a/vms/subconfigure.com
+++ b/vms/subconfigure.com
@@ -4103,7 +4103,7 @@ $ WC "sPRIx64='" + perl_sPRIx64 + "'"
$ WC "d_llseek='" + perl_d_llseek + "'"
$ WC "d_iconv='" + perl_d_iconv +"'"
$ WC "i_iconv='" + perl_i_iconv +"'"
-$ WC "inc_version_list_init='""""'"
+$ WC "inc_version_list_init='0'"
$ WC "uselargefiles='" + perl_uselargefiles + "'"
$ WC "uselongdouble='" + perl_uselongdouble + "'"
$ WC "usemorebits='" + perl_usemorebits + "'"
diff --git a/vms/vms.c b/vms/vms.c
index a498e16266..f1f62bd6eb 100644
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -987,6 +987,7 @@ pipe_exit_routine()
info = open_pipes;
while (info) {
+ int need_eof;
_ckvmssts(SYS$SETAST(0));
need_eof = info->mode != 'r' && !info->done;
_ckvmssts(SYS$SETAST(1));
@@ -2518,6 +2519,9 @@ getredirection(int *ac, char ***av)
exit(vaxc$errno);
}
if (err != NULL) {
+ if (strcmp(err,"&1") == 0) {
+ dup2(fileno(stdout), fileno(Perl_debug_log));
+ } else {
FILE *tmperr;
if (NULL == (tmperr = fopen(err, errmode, "mbc=32", "mbf=2")))
{
@@ -2530,6 +2534,7 @@ getredirection(int *ac, char ***av)
exit(vaxc$errno);
}
}
+ }
#ifdef ARGPROC_DEBUG
PerlIO_printf(Perl_debug_log, "Arglist:\n");
for (j = 0; j < *ac; ++j)
@@ -3388,6 +3393,7 @@ setup_cmddsc(char *cmd, int check_img)
{
char vmsspec[NAM$C_MAXRSS+1], resspec[NAM$C_MAXRSS+1];
$DESCRIPTOR(defdsc,".EXE");
+ $DESCRIPTOR(defdsc2,".");
$DESCRIPTOR(resdsc,resspec);
struct dsc$descriptor_s imgdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
unsigned long int cxt = 0, flags = 1, retsts = SS$_NORMAL;
@@ -3443,18 +3449,44 @@ setup_cmddsc(char *cmd, int check_img)
imgdsc.dsc$a_pointer = s;
imgdsc.dsc$w_length = wordbreak - s;
retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags);
+ if (!(retsts&1)) {
+ _ckvmssts(lib$find_file_end(&cxt));
+ retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags);
if (!(retsts & 1) && *s == '$') {
+ _ckvmssts(lib$find_file_end(&cxt));
imgdsc.dsc$a_pointer++; imgdsc.dsc$w_length--;
retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags);
+ if (!(retsts&1)) {
_ckvmssts(lib$find_file_end(&cxt));
+ retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags);
+ }
}
+ }
+ _ckvmssts(lib$find_file_end(&cxt));
+
if (retsts & 1) {
+ FILE *fp;
s = resspec;
while (*s && !isspace(*s)) s++;
*s = '\0';
+
+ /* check that it's really not DCL with no file extension */
+ fp = fopen(resspec,"r","ctx=bin,shr=get");
+ if (fp) {
+ char b[4] = {0,0,0,0};
+ read(fileno(fp),b,4);
+ isdcl = isprint(b[0]) && isprint(b[1]) && isprint(b[2]) && isprint(b[3]);
+ fclose(fp);
+ }
+ if (check_img && isdcl) return RMS$_FNF;
+
if (cando_by_name(S_IXUSR,0,resspec)) {
New(402,VMScmd.dsc$a_pointer,7 + s - resspec + (rest ? strlen(rest) : 0),char);
+ if (!isdcl) {
strcpy(VMScmd.dsc$a_pointer,"$ MCR ");
+ } else {
+ strcpy(VMScmd.dsc$a_pointer,"@");
+ }
strcat(VMScmd.dsc$a_pointer,resspec);
if (rest) strcat(VMScmd.dsc$a_pointer,rest);
VMScmd.dsc$w_length = strlen(VMScmd.dsc$a_pointer);
diff --git a/vms/vmsish.h b/vms/vmsish.h
index 8d4a8caf6b..a09d2be438 100644
--- a/vms/vmsish.h
+++ b/vms/vmsish.h
@@ -263,6 +263,10 @@
#define HAS_WAIT
#define PERL_FS_VER_FMT "%d_%d_%d"
+/* Temporary; we need to add support for this to Configure.Com */
+#ifdef PERL_INC_VERSION_LIST
+# undef PERL_INC_VERSION_LIST
+#endif
/* VMS:
* This symbol, if defined, indicates that the program is running under