From: Perl 5 Porters Date: Thu, 6 Mar 1997 16:01:12 +0000 (+1200) Subject: [inseparable changes from match from perl-5.003_92 to perl-5.003_93] X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2ae324a7ad5d4e616e757c311984fd86d5857ddd;p=p5sagit%2Fp5-mst-13.2.git [inseparable changes from match from perl-5.003_92 to perl-5.003_93] BUILD PROCESS Subject: Fix for Unisys UNIX and libperl.so Date: Thu, 6 Mar 97 16:28 GMT0 From: Alan Burlison Files: Configure Msg-ID: memo.147328@cix.compulink.co.uk (applied based on p5p patch as commit 2f525a329506abe067c4ec9d4c7ae13d8b223081) Subject: Allow './Configure -Uoptimize' Date: Thu, 06 Mar 1997 11:15:47 -0500 (EST) From: Andy Dougherty Files: Configure Msg-ID: Pine.SOL.3.95q.970306110532.11070A-100000@fractal.lafayette. (applied based on p5p patch as commit 59ae47780c168857b216412f8354d10ae6dd0b61) Subject: Use 'test -f', not 'test -x' Date: Fri, 7 Mar 1997 19:53:00 -0500 From: Spider Boardman Files: Configure Msg-ID: 199703080053.TAA13943@web.zk3.dec.com (applied based on p5p patch as commit 64b4562546c4e74f87c21f65a76ec05e96a1b74f) CORE LANGUAGE CHANGES Subject: Don't autovivify array and hash elements in sub parameters Date: Thu, 06 Mar 1997 14:12:09 -0500 From: Gurusamy Sarathy Files: op.c pod/perldelta.pod pod/perlsub.pod pod/perltrap.pod Msg-ID: 199703061912.OAA20606@aatma.engin.umich.edu (applied based on p5p patch as commit 0ffc6623ceb5acc7b954e8cdbaeb8ba319474d7b) Subject: Support READ and GETC for tied handles Date: Sat, 08 Mar 1997 19:19:38 -0500 From: Doug MacEachern Files: pod/perldelta.pod pod/perltie.pod pp_sys.c t/op/misc.t Msg-ID: 199703090019.TAA32591@postman.osf.org (applied based on p5p patch as commit b06b64f805517c26cbd7c4d2f74efd5f36b4692c) Subject: Warn on C<@x =~ /a/> and C<%x =~ s/a/b/> From: Chip Salzenberg Files: op.c pod/perldiag.pod CORE PORTABILITY Subject: VMS update Date: Fri, 07 Mar 1997 22:49:46 -0500 (EST) From: Charles Bailey Files: lib/ExtUtils/MM_VMS.pm vms/descrip.mms vms/gen_shrfls.pl vms/sockadapt.h private-msgid: 01IG8KN5R28M00661G@hmivax.humgen.upenn.edu DOCUMENTATION Subject: Consolidated INSTALL updates since _92 Date: Sat, 08 Mar 1997 13:21:22 -0500 (EST) From: Andy Dougherty Files: Msg-ID: Pine.SOL.3.95q.970308131806.23766F-100000@fractal.lafayette. (applied based on p5p patch as commit e6834c60cd85866fc530e8b4bb831af6186bad4d) Subject: PODs corrections Date: Fri, 7 Mar 1997 21:53:04 -0500 (EST) From: Ilya Zakharevich Files: ext/DB_File/DB_File.pm ext/Socket/Socket.pm lib/Class/Template.pm lib/ExtUtils/Embed.pm lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Mksymlists.pm lib/File/Basename.pm lib/File/stat.pm lib/Time/gmtime.pm lib/Time/localtime.pm lib/Time/tm.pm lib/User/grent.pm lib/User/pwent.pm pod/perlcall.pod pod/perldebug.pod pod/perlfunc.pod pod/perlguts.pod pod/perllocale.pod pod/perlop.pod pod/perlsub.pod Msg-ID: 199703080253.VAA24975@monk.mps.ohio-state.edu (applied based on p5p patch as commit 72451f4af0d31f24ef5b12bc5d034e3e8b35d43d) OTHER CORE CHANGES Subject: Fix imbalanced ENTER/LEAVE from C From: Chip Salzenberg Files: op.c perl.c proto.h Subject: perl -P path patch Date: Sat, 08 Mar 1997 12:45:08 -0500 (EST) From: Andy Dougherty Files: config_H config_h.SH perl.c plan9/config.plan9 t/comp/cpp.t vms/config.vms win32/config.H Msg-ID: Pine.SOL.3.95q.970308120242.23766D-100000@fractal.lafayette. (applied based on p5p patch as commit bba014945c609b5474f61f5e82ed2ff3e83a6e47) --- diff --git a/Changes b/Changes index f34114e..701c871 100644 --- a/Changes +++ b/Changes @@ -9,6 +9,170 @@ releases.) ---------------- +Version 5.003_93 +---------------- + +Me, last time: + "This release will be the public beta of 5.004, + or my name isn't Larson T. Pettifogger." +Me, now: + "Gone like *that*, a fortune in letterhead." + + CORE LANGUAGE CHANGES + + Title: "Don't autovivify array and hash elements in sub parameters" + From: Gurusamy Sarathy + Msg-ID: <199703061912.OAA20606@aatma.engin.umich.edu> + Date: Thu, 06 Mar 1997 14:12:09 -0500 + Files: op.c pod/perldelta.pod pod/perlsub.pod pod/perltrap.pod + + Title: "Support READ and GETC for tied handles" + From: Doug MacEachern + Msg-ID: <199703090019.TAA32591@postman.osf.org> + Date: Sat, 08 Mar 1997 19:19:38 -0500 + Files: pod/perldelta.pod pod/perltie.pod pp_sys.c t/op/misc.t + + Title: "Warn on C<@x =~ /a/> and C<%x =~ s/a/b/>" + From: Chip Salzenberg + Files: op.c pod/perldiag.pod + + Title: "Warn on %{+undef} and @{+undef}" + From: Chip Salzenberg + Files: pp.c pp_hot.c + + CORE PORTABILITY + + Title: "VMS update" + From: Charles Bailey + Msg-ID: <01IG8KN5R28M00661G@hmivax.humgen.upenn.edu> + Date: Fri, 07 Mar 1997 22:49:46 -0500 (EST) + Files: lib/ExtUtils/MM_VMS.pm vms/descrip.mms vms/gen_shrfls.pl + vms/sockadapt.h + + Title: "AmigaOS hint patch" + From: "Norbert Pueschel" + Msg-ID: <77724767@Armageddon.meb.uni-bonn.de> + Date: Sat, 08 Mar 1997 12:50:15 +0100 + Files: hints/amigaos.sh + + OTHER CORE CHANGES + + Title: "Make conversion of @_ to real array work right after C" + From: Chip Salzenberg + Files: av.c + + Title: "Fix imbalanced ENTER/LEAVE from C" + From: Chip Salzenberg + Files: op.c perl.c proto.h + + Title: "perl -P path patch" + From: Andy Dougherty + Msg-ID: + Date: Thu, 6 Mar 97 16:28 GMT0 + Files: Configure + + Title: "Allow './Configure -Uoptimize'" + From: Andy Dougherty + Msg-ID: + Msg-ID: <199703080053.TAA13943@web.zk3.dec.com> + Date: Fri, 7 Mar 1997 19:53:00 -0500 + Files: Configure + + Title: "Don't count on 'trap 0' inside () in shell script" + From: aburlison@cix.compulink.co.uk (Alan Burlison) + Msg-ID: + Date: Thu, 6 Mar 97 16:28 GMT0 + Files: perl_exp.SH + + LIBRARY AND EXTENSIONS + + Title: "Carp with multiple arguments" + From: "M.J.T. Guy" + Msg-ID: + Date: Sat, 8 Mar 1997 20:12:17 +0000 + Files: lib/Carp.pm + + Title: "@EXPORT_FAIL fix for Exporter.pm" + From: Roderick Schertler + Msg-ID: <24884.857841724@eeyore.ibcinc.com> + Date: Sat, 08 Mar 1997 12:22:04 -0500 + Files: lib/Exporter.pm + + Title: "Open[23] autoflush docs" + From: Roderick Schertler + Msg-ID: <7939.857693947@eeyore.ibcinc.com> + Date: Thu, 06 Mar 1997 19:19:07 -0500 + Files: lib/IPC/Open2.pm lib/IPC/Open3.pm + + TESTS + + Title: "Fix counts in output of TEST" + From: Hugo van der Sanden + Msg-ID: <331F1507.4BE8@iii.co.uk> + Date: Thu, 06 Mar 1997 19:03:35 +0000 + Files: t/TEST + + Title: "Ignore backup files in strict.t and warning.t" + From: Chip Salzenberg + Files: t/pragma/strict.t t/pragma/warning.t + + UTILITIES + + Title: "Quote pathname before using as pattern" + From: Chip Salzenberg + Files: pod/pod2html.PL + + DOCUMENTATION + + Title: "Consolidated INSTALL updates since _92" + From: Andy Dougherty + Msg-ID: + Msg-ID: <199703080537.AAA25157@monk.mps.ohio-state.edu> + Date: Sat, 8 Mar 1997 00:37:30 -0500 (EST) + Files: README.os2 + + Title: "PODs corrections" + From: Ilya Zakharevich + Msg-ID: <199703080253.VAA24975@monk.mps.ohio-state.edu> + Date: Fri, 7 Mar 1997 21:53:04 -0500 (EST) + Files: ext/DB_File/DB_File.pm ext/Socket/Socket.pm + lib/Class/Template.pm lib/ExtUtils/Embed.pm + lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Mksymlists.pm + lib/File/Basename.pm lib/File/stat.pm lib/Time/gmtime.pm + lib/Time/localtime.pm lib/Time/tm.pm lib/User/grent.pm + lib/User/pwent.pm pod/perlcall.pod pod/perldebug.pod + pod/perlfunc.pod pod/perlguts.pod pod/perllocale.pod + pod/perlop.pod pod/perlsub.pod + + +---------------- Version 5.003_92 ---------------- @@ -446,7 +610,7 @@ At last, a mil[le]stone: The first beta of Perl 5.004. t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t t/op/magic.t t/op/stat.t - #20: "Hints for DC/OSx" + Title: "Hints for DC/OSx" From: Stephen Zander Msg-ID: <199702242124.NAA03796@wsuse5.mckesson.com> Date: Mon, 24 Feb 1997 13:24:54 -0800 diff --git a/Configure b/Configure index dc24cf7..5eacc6c 100755 --- a/Configure +++ b/Configure @@ -3557,7 +3557,7 @@ $rm -f testcpp.c testcpp.out : determine optimize, if desired, or use for debug flag also case "$optimize" in -' ') dflt='none';; +' '|$undef) dflt='none';; '') dflt='-O';; *) dflt="$optimize";; esac @@ -3899,7 +3899,7 @@ case "$nm_opt" in nm_opt='-p' # Solaris (and SunOS?) elif $test -f /dgux; then nm_opt='-p' # DG-UX - elif $test -x /lib64/rld; then + elif $test -f /lib64/rld; then nm_opt='-p' # 64-bit Irix else nm_opt='' @@ -4555,7 +4555,7 @@ $undef) ;; *) case "$useshrplib" in '') case "$osname" in - svr4|dgux|dynixptx|esix|powerux) + svr4*|dgux|dynixptx|esix|powerux) dflt='yes' also='Building a shared libperl is required for dynamic loading to work on your system.' ;; diff --git a/INSTALL b/INSTALL index 470acfc..6b36f93 100644 --- a/INSTALL +++ b/INSTALL @@ -20,7 +20,7 @@ The basic steps to build and install perl5 on a Unix system are: Each of these is explained in further detail below. For information on non-Unix systems, see the section on -L<"Porting Information"> below. +L<"Porting information"> below. =head1 DESCRIPTION @@ -616,11 +616,22 @@ In a future version of perl, these might be enabled by default. =over 4 +=item -DDEBUGGING_MSTATS + +If C is defined, you can extract malloc +statistics from the Perl interpreter. The overhead this imposes is not +large (perl just twiddles integers at malloc/free/sbrk time). When you +run perl with the environment variable C set to +either 1 or 2, the interpreter will dump statistics to stderr at exit +time and (with a value of 2) after compilation. If you install the +Devel::Peek module you can get the statistics whenever you like by +invoking its mstat() function. + =item -DEMERGENCY_SBRK -If this macro is defined, running out of memory need not be a fatal -error: a memory pool can allocated by assigning to the special -variable C<$^M>. +If C is defined, running out of memory need not be a +fatal error: a memory pool can allocated by assigning to the special +variable C<$^M>. See L for more details. =item -DPACK_MALLOC @@ -787,7 +798,7 @@ mechanism. =item Porting information -Specific information for the OS/2, Plan9, VMS and Win32 ports are in the +Specific information for the OS/2, Plan9, VMS and Win32 ports is in the corresponding subdirectories. Additional information, including a glossary of all those config.sh variables, is in the Porting subdirectory. @@ -1274,4 +1285,4 @@ from the original README by Larry Wall. =head1 LAST MODIFIED -$Id: INSTALL,v 1.3 1997/02/28 16:34:11 doughera Released $ +$Id: INSTALL,v 1.5 1997/03/08 18:15:49 doughera Released $ diff --git a/config_H b/config_H index 39dd436..fbc1206 100644 --- a/config_H +++ b/config_H @@ -40,7 +40,12 @@ * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ #define BIN "/opt/perl/bin" /**/ +#define BIN_EXP "/opt/perl/bin" /**/ /* CAT2: * This macro catenates 2 tokens together. @@ -1342,14 +1347,6 @@ */ #define RANDBITS 15 /**/ -/* SCRIPTDIR: - * This symbol holds the name of the directory in which the user wants - * to put publicly executable scripts for the package in question. It - * is often a directory that is mounted across diverse architectures. - * Programs must be prepared to deal with ~name expansion. - */ -#define SCRIPTDIR "/opt/perl/script" /**/ - /* Select_fd_set_t: * This symbol holds the type used for the 2nd, 3rd, and 4th * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET diff --git a/config_h.SH b/config_h.SH index 893e71e..23cb896 100755 --- a/config_h.SH +++ b/config_h.SH @@ -54,7 +54,12 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ #define BIN "$bin" /**/ +#define BIN_EXP "$binexp" /**/ /* CAT2: * This macro catenates 2 tokens together. @@ -1356,14 +1361,6 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- */ #define RANDBITS $randbits /**/ -/* SCRIPTDIR: - * This symbol holds the name of the directory in which the user wants - * to put publicly executable scripts for the package in question. It - * is often a directory that is mounted across diverse architectures. - * Programs must be prepared to deal with ~name expansion. - */ -#define SCRIPTDIR "$scriptdir" /**/ - /* Select_fd_set_t: * This symbol holds the type used for the 2nd, 3rd, and 4th * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET diff --git a/ext/DB_File/DB_File.pm b/ext/DB_File/DB_File.pm index c8a7e3e..d962b88 100644 --- a/ext/DB_File/DB_File.pm +++ b/ext/DB_File/DB_File.pm @@ -1144,7 +1144,7 @@ destroyed. undef $db ; untie %hash ; -See L for more details. +See L for more details. All the functions defined in L are available except for close() and dbopen() itself. The B method interface to the diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm index e04689d..51dce59 100644 --- a/ext/Socket/Socket.pm +++ b/ext/Socket/Socket.pm @@ -47,6 +47,8 @@ all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc. In addition, some structure manipulation functions are available: +=over + =item inet_aton HOSTNAME Takes a string giving the name of a host, and translates that @@ -144,6 +146,8 @@ Takes a sockaddr_un structure (as returned by pack_sockaddr_un()) and returns the pathname. Will croak if the structure does not have AF_UNIX in the right place. +=back + =cut use Carp; diff --git a/lib/Class/Template.pm b/lib/Class/Template.pm index 23a0d5b..38c2e98 100644 --- a/lib/Class/Template.pm +++ b/lib/Class/Template.pm @@ -45,6 +45,8 @@ This module uses perl5 classes to create nested data types. =head1 EXAMPLES +=over + =item * Example 1 use Class::Template; @@ -83,6 +85,8 @@ This module uses perl5 classes to create nested data types. bless $r; } +=back + =head1 NOTES Use '%' if the member should point to an anonymous hash. Use '@' if the diff --git a/lib/ExtUtils/Embed.pm b/lib/ExtUtils/Embed.pm index 4d2ed6a..39d797e 100644 --- a/lib/ExtUtils/Embed.pm +++ b/lib/ExtUtils/Embed.pm @@ -272,6 +272,8 @@ ccdlflags(), xsi_header(), xsi_protos(), xsi_body() =head1 FUNCTIONS +=over + =item xsinit() Generate C/C++ code for the XS initializer function. @@ -454,6 +456,8 @@ function to B for each @modules. B uses the xsi_* functions to generate most of it's code. +=back + =head1 EXAMPLES For examples on how to use B for building C/C++ applications diff --git a/lib/ExtUtils/MM_VMS.pm b/lib/ExtUtils/MM_VMS.pm index aca41ea..0e2897c 100644 --- a/lib/ExtUtils/MM_VMS.pm +++ b/lib/ExtUtils/MM_VMS.pm @@ -36,6 +36,8 @@ the semantics. =head2 Methods always loaded +=over + =item eliminate_macros Expands MM[KS]/Make macros in a text string, using the contents of @@ -312,6 +314,7 @@ sub ext { ExtUtils::Liblist::ext(@_); } +=back =head2 SelfLoaded methods @@ -321,6 +324,8 @@ For overridden methods, documentation is limited to an explanation of why this method overrides the MM_Unix method; see the ExtUtils::MM_Unix documentation for more details. +=over + =item guess_name (override) Try to determine name of extension being built. We begin with the name @@ -1111,12 +1116,17 @@ default MM_Unix method. sub dist { my($self, %attribs) = @_; $attribs{VERSION} ||= $self->{VERSION_SYM}; + $attribs{NAME} ||= $self->{DISTNAME}; $attribs{ZIPFLAGS} ||= '-Vu'; $attribs{COMPRESS} ||= 'gzip'; $attribs{SUFFIX} ||= '-gz'; $attribs{SHAR} ||= 'vms_share'; $attribs{DIST_DEFAULT} ||= 'zipdist'; + # Sanitize these for use in $(DISTVNAME) filespec + $attribs{VERSION} =~ s/[^\w\$]/_/g; + $attribs{NAME} =~ s/[^\w\$]/_/g; + return ExtUtils::MM_Unix::dist($self,%attribs); } @@ -1745,28 +1755,28 @@ sub dist_core { my($self) = @_; q[ dist : $(DIST_DEFAULT) - $(NOECHO) $(PERL) -le "print 'Warning: $m older than $vf' if -e ($vf = '$(VERSION_FROM)') && -M $vf < -M ($m = '$(MAKEFILE)'" + $(NOECHO) $(PERL) -le "print 'Warning: $m older than $vf' if -e ($vf = '$(VERSION_FROM)') && -M $vf < -M ($m = '$(MAKEFILE)')" zipdist : $(DISTVNAME).zip $(NOECHO) $(NOOP) $(DISTVNAME).zip : distdir $(PREOP) - $(ZIP) "$(ZIPFLAGS)" $(MMS$TARGET) $(SRC) + $(ZIP) "$(ZIPFLAGS)" $(MMS$TARGET) [.$(DISTVNAME)...]*.*; $(RM_RF) $(DISTVNAME) $(POSTOP) $(DISTVNAME).tar$(SUFFIX) : distdir $(PREOP) $(TO_UNIX) - $(TAR) "$(TARFLAGS)" $(DISTVNAME).tar $(SRC) + $(TAR) "$(TARFLAGS)" $(DISTVNAME).tar [.$(DISTVNAME)] $(RM_RF) $(DISTVNAME) $(COMPRESS) $(DISTVNAME).tar $(POSTOP) shdist : distdir $(PREOP) - $(SHARE) $(SRC) $(DISTVNAME).share + $(SHAR) [.$(DISTVNAME...]*.*; $(DISTVNAME).share $(RM_RF) $(DISTVNAME) $(POSTOP) ]; @@ -2353,5 +2363,9 @@ sub nicetext { 1; +=back + +=cut + __END__ diff --git a/lib/ExtUtils/Mksymlists.pm b/lib/ExtUtils/Mksymlists.pm index eeed4bf..4c6814c 100644 --- a/lib/ExtUtils/Mksymlists.pm +++ b/lib/ExtUtils/Mksymlists.pm @@ -164,6 +164,8 @@ C, which is exported by default from C. It takes one argument, a list of key-value pairs, in which the following keys are recognized: +=over + =item NAME This gives the name of the extension (I Tk::Canvas) for which @@ -217,6 +219,8 @@ extension itself (for instance, some linkers add an '_' to the name of the extension). If it is not specified, it is derived from the NAME attribute. It is presently used only by OS2. +=back + When calling C, one should always specify the NAME attribute. In most cases, this is all that's necessary. In the case of unusual extensions, however, the other attributes diff --git a/lib/File/Basename.pm b/lib/File/Basename.pm index dd7cdcf..6abfcd2 100644 --- a/lib/File/Basename.pm +++ b/lib/File/Basename.pm @@ -95,6 +95,8 @@ would yield $dir eq 'Doc_Root:[Help]' $type eq '.Rnh' +=over + =item C The basename() routine returns the first element of the list produced @@ -116,6 +118,8 @@ cases. For example, for the input file specification F, fileparse() considers the directory name to be F, while dirname() considers the directory name to be F<.>). +=back + =cut require 5.002; diff --git a/lib/File/stat.pm b/lib/File/stat.pm index 014af60..82cb3f6 100644 --- a/lib/File/stat.pm +++ b/lib/File/stat.pm @@ -50,7 +50,7 @@ __END__ =head1 NAME -File::stat.pm - by-name interface to Perl's built-in stat() functions +File::stat - by-name interface to Perl's built-in stat() functions =head1 SYNOPSIS diff --git a/lib/Time/gmtime.pm b/lib/Time/gmtime.pm index 35233f5..353ade4 100644 --- a/lib/Time/gmtime.pm +++ b/lib/Time/gmtime.pm @@ -35,7 +35,7 @@ __END__ =head1 NAME -Time::gmtime.pm - by-name interface to Perl's built-in gmtime() function +Time::gmtime - by-name interface to Perl's built-in gmtime() function =head1 SYNOPSIS diff --git a/lib/Time/localtime.pm b/lib/Time/localtime.pm index 2e811e6..8f7695b 100644 --- a/lib/Time/localtime.pm +++ b/lib/Time/localtime.pm @@ -36,7 +36,7 @@ __END__ =head1 NAME -Time::localtime.pm - by-name interface to Perl's built-in localtime() function +Time::localtime - by-name interface to Perl's built-in localtime() function =head1 SYNOPSIS diff --git a/lib/Time/tm.pm b/lib/Time/tm.pm index d1df295..7041432 100644 --- a/lib/Time/tm.pm +++ b/lib/Time/tm.pm @@ -11,7 +11,7 @@ __END__ =head1 NAME -Time::tm.pm - internal object used by Time::gmtime and Time::localtime +Time::tm - internal object used by Time::gmtime and Time::localtime =head1 SYNOPSIS diff --git a/lib/User/grent.pm b/lib/User/grent.pm index 1185958..3c4635b 100644 --- a/lib/User/grent.pm +++ b/lib/User/grent.pm @@ -37,7 +37,7 @@ __END__ =head1 NAME -User::grent.pm - by-name interface to Perl's built-in getgr*() functions +User::grent - by-name interface to Perl's built-in getgr*() functions =head1 SYNOPSIS diff --git a/lib/User/pwent.pm b/lib/User/pwent.pm index 9f41fe9..a027fe6 100644 --- a/lib/User/pwent.pm +++ b/lib/User/pwent.pm @@ -49,7 +49,7 @@ __END__ =head1 NAME -User::pwent.pm - by-name interface to Perl's built-in getpw*() functions +User::pwent - by-name interface to Perl's built-in getpw*() functions =head1 SYNOPSIS diff --git a/op.c b/op.c index f27aa94..3b05012 100644 --- a/op.c +++ b/op.c @@ -1264,6 +1264,20 @@ OP *right; { OP *op; + if (dowarn && + (left->op_type == OP_RV2AV || + left->op_type == OP_RV2HV || + left->op_type == OP_PADAV || + left->op_type == OP_PADHV)) { + char *desc = op_desc[(right->op_type == OP_SUBST || + right->op_type == OP_TRANS) + ? right->op_type : OP_MATCH]; + char *sample = ((left->op_type == OP_RV2AV || + left->op_type == OP_PADAV) + ? "@array" : "%hash"); + warn("Applying %s to %s will act on scalar(%s)", desc, sample, sample); + } + if (right->op_type == OP_MATCH || right->op_type == OP_SUBST || right->op_type == OP_TRANS) { @@ -3192,6 +3206,7 @@ OP *block; else s = name; if (strEQ(s, "BEGIN") && !error_count) { + I32 oldscope = scopestack_ix; ENTER; SAVESPTR(compiling.cop_filegv); SAVEI16(compiling.cop_line); @@ -3204,7 +3219,7 @@ OP *block; DEBUG_x( dump_sub(gv) ); av_push(beginav, (SV *)cv); GvCV(gv) = 0; - calllist(beginav); + calllist(oldscope, beginav); curcop = &compiling; LEAVE; @@ -4399,7 +4414,6 @@ OP *op; } else list(o); - mod(o, OP_ENTERSUB); prev = o; o = o->op_sibling; } diff --git a/patchlevel.h b/patchlevel.h index 42143c3..15e2194 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1,5 +1,5 @@ #define PATCHLEVEL 3 -#define SUBVERSION 92 +#define SUBVERSION 93 /* local_patches -- list of locally applied less-than-subversion patches. diff --git a/perl.c b/perl.c index d799f2b..06534ff 100644 --- a/perl.c +++ b/perl.c @@ -449,6 +449,7 @@ char **env; char *scriptname = NULL; VOL bool dosearch = FALSE; char *validarg = ""; + I32 oldscope; AV* comppadlist; #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW @@ -496,6 +497,7 @@ setuid perl scripts securely.\n"); main_cv = Nullcv; time(&basetime); + oldscope = scopestack_ix; mustcatch = FALSE; switch (Sigsetjmp(top_env,1)) { @@ -504,9 +506,11 @@ setuid perl scripts securely.\n"); /* FALL THROUGH */ case 2: /* my_exit() was called */ + while (scopestack_ix > oldscope) + LEAVE; curstash = defstash; if (endav) - calllist(endav); + calllist(oldscope, endav); return STATUS_NATIVE_EXPORT; case 3: mustcatch = FALSE; @@ -783,17 +787,24 @@ int perl_run(sv_interp) PerlInterpreter *sv_interp; { + I32 oldscope; + if (!(curinterp = sv_interp)) return 255; + + oldscope = scopestack_ix; + switch (Sigsetjmp(top_env,1)) { case 1: cxstack_ix = -1; /* start context stack again */ break; case 2: /* my_exit() was called */ + while (scopestack_ix > oldscope) + LEAVE; curstash = defstash; if (endav) - calllist(endav); + calllist(oldscope, endav); FREETMPS; #ifdef DEBUGGING_MSTATS if (getenv("PERL_DEBUG_MSTATS")) @@ -1476,7 +1487,7 @@ my_unexec() extern int etext; sprintf (buf, "%s.perldump", origfilename); - sprintf (tokenbuf, "%s/perl", BIN); + sprintf (tokenbuf, "%s/perl", BIN_EXP); status = unexec(buf, tokenbuf, &etext, sbrk(0), 0); if (status) @@ -1650,7 +1661,7 @@ SV *sv; char *cpp = CPPSTDIN; if (strEQ(cpp,"cppstdin")) - sprintf(tokenbuf, "%s/%s", SCRIPTDIR, cpp); + sprintf(tokenbuf, "%s/%s", BIN_EXP, cpp); else sprintf(tokenbuf, "%s", cpp); sv_catpv(sv,"-I"); @@ -1733,7 +1744,7 @@ sed %s -e \"/^[^#]/b\" \ #ifndef IAMSUID /* in case script is not readable before setuid */ if (euid && Stat(SvPVX(GvSV(curcop->cop_filegv)),&statbuf) >= 0 && statbuf.st_mode & (S_ISUID|S_ISGID)) { - (void)sprintf(buf, "%s/sperl%s", BIN, patchlevel); + (void)sprintf(buf, "%s/sperl%s", BIN_EXP, patchlevel); execv(buf, origargv); /* try again */ croak("Can't do setuid\n"); } @@ -1881,7 +1892,7 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n"); if (euid) { /* oops, we're not the setuid root perl */ (void)PerlIO_close(rsfp); #ifndef IAMSUID - (void)sprintf(buf, "%s/sperl%s", BIN, patchlevel); + (void)sprintf(buf, "%s/sperl%s", BIN_EXP, patchlevel); execv(buf, origargv); /* try again */ #endif croak("Can't do setuid\n"); @@ -1966,7 +1977,7 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n"); fcntl(PerlIO_fileno(rsfp),F_SETFD,0); /* ensure no close-on-exec */ #endif - (void)sprintf(tokenbuf, "%s/perl%s", BIN, patchlevel); + (void)sprintf(tokenbuf, "%s/perl%s", BIN_EXP, patchlevel); execv(tokenbuf, origargv); /* try again */ croak("Can't do setuid\n"); #endif /* IAMSUID */ @@ -2426,7 +2437,8 @@ int addsubdirs; } void -calllist(list) +calllist(oldscope, list) +I32 oldscope; AV* list; { Sigjmp_buf oldtop; @@ -2454,6 +2466,8 @@ AV* list; sv_catpv(atsv, "BEGIN failed--compilation aborted"); else sv_catpv(atsv, "END failed--cleanup aborted"); + while (scopestack_ix > oldscope) + LEAVE; croak("%s", SvPVX(atsv)); } } @@ -2463,9 +2477,11 @@ AV* list; /* FALL THROUGH */ case 2: /* my_exit() was called */ + while (scopestack_ix > oldscope) + LEAVE; curstash = defstash; if (endav) - calllist(endav); + calllist(oldscope, endav); FREETMPS; Copy(oldtop, top_env, 1, Sigjmp_buf); curcop = &compiling; diff --git a/plan9/buildinfo b/plan9/buildinfo index ac81a7f..97d00f4 100644 --- a/plan9/buildinfo +++ b/plan9/buildinfo @@ -1 +1 @@ -p9pvers = 5.003_92 +p9pvers = 5.003_93 diff --git a/plan9/config.plan9 b/plan9/config.plan9 index 8b6b89f..9965c73 100644 --- a/plan9/config.plan9 +++ b/plan9/config.plan9 @@ -49,7 +49,12 @@ * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ #define BIN "/_P9P_OBJTYPE/bin" /* */ +#define BIN_EXP "/_P9P_OBJTYPE/bin" /* */ /* BINCOMPAT3: * This symbol, if defined, indicates that Perl 5.004 should be @@ -1308,14 +1313,6 @@ */ #define RANDBITS 15 /**/ -/* SCRIPTDIR: - * This symbol holds the name of the directory in which the user wants - * to put publicly executable scripts for the package in question. It - * is often a directory that is mounted across diverse architectures. - * Programs must be prepared to deal with ~name expansion. - */ -#define SCRIPTDIR "/bin" - /* Select_fd_set_t: * This symbol holds the type used for the 2nd, 3rd, and 4th * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET diff --git a/pod/perlcall.pod b/pod/perlcall.pod index dc96500..9a4a886 100644 --- a/pod/perlcall.pod +++ b/pod/perlcall.pod @@ -565,7 +565,7 @@ Next, we come to XPUSHs. This is where the parameters actually get pushed onto the stack. In this case we are pushing a string and an integer. -See the L for details +See the L for details on how the XPUSH macros work. =item 6. diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 0c61b74..a682de1 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -465,8 +465,6 @@ corresponds to F, say, by issuing a command like See L<"Debugger Internals"> below for more details. -=over 12 - =item E [ command ] Set an action (Perl command) to happen before every debugger prompt. diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 734e940..cf6036f 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -27,12 +27,17 @@ might have symbol conflicts if you embed Perl in another application, just as in the 5.003 release. By default, binary compatibility is preserved at the expense of symbol table pollution. -=head2 New Opcode Module and Revised Safe Module +=head2 Subroutine Parameters Are Not Autovivified -A new Opcode module supports the creation, manipulation and -application of opcode masks. The revised Safe module has a new API -and is implemented using the new Opcode module. Please read the new -Opcode and Safe documentation. +In Perl versions 5.002 and 5.003, array and hash elements used as +subroutine parameters were "autovivified"; that is, they were brought +into existence if they did not already exist. For example, calling +C would create C<$h{foo}> if it did not already exist, +causing C to become true and C to return +C<('foo')>. + +Perl 5.004 returns to the pre-5.002 behavior of I autovivifying +array and hash elements used as subroutine parameters. =head2 Fixed Parsing of $$, &$, etc. @@ -52,6 +57,13 @@ previously-working script to now fail -- which should be construed as a blessing, since that indicates a potentially-serious security hole was just plugged. +=head2 New Opcode Module and Revised Safe Module + +A new Opcode module supports the creation, manipulation and +application of opcode masks. The revised Safe module has a new API +and is implemented using the new Opcode module. Please read the new +Opcode and Safe documentation. + =head2 Internal Change: FileHandle Class Based on IO::* Classes File handles are now stored internally as type IO::Handle. The @@ -222,7 +234,7 @@ would yield the same sequence of random numbers on most or all machines. Now, when perl sees that you're calling C and haven't yet called C, it calls C with the default seed. You should still call C manually if your code might ever be run on a pre-5.004 system, -of course, or if you want a seed other than the default. +of course, or if you want a seed other than the default. =item $_ as Default @@ -241,8 +253,8 @@ zero-width assertion. See L and L. =item nested C closures work now -Prior to the 5.004 release, nested anonymous functions -didn't work right. They do now. +Prior to the 5.004 release, nested anonymous functions didn't work +right. They do now. =item formats work right on changing lexicals @@ -258,7 +270,7 @@ before, and is fine now: $i . write; - } + } =back @@ -324,9 +336,9 @@ This is the constructor for the class. That means it is expected to return an object of some sort. The reference can be used to hold some internal information. - sub TIEHANDLE { - print "\n"; - my $i; + sub TIEHANDLE { + print "\n"; + my $i; return bless \$i, shift; } @@ -336,29 +348,46 @@ This method will be triggered every time the tied handle is printed to. Beyond its self reference it also expects the list that was passed to the print function. - sub PRINT { - $r = shift; - $$r++; + sub PRINT { + $r = shift; + $$r++; return print join( $, => map {uc} @_), $\; } +=item READ this LIST + +This method will be called when the handle is read from via the C +or C functions. + + sub READ { + $r = shift; + my($buf,$len,$offset) = @_; + print "READ called, \$buf=$buf, \$len=$len, \$offset=$offset"; + } + =item READLINE this This method will be called when the handle is read from. The method should return undef when there is no more data. - sub READLINE { - $r = shift; - return "PRINT called $$r times\n"; + sub READLINE { + $r = shift; + return "PRINT called $$r times\n" } +=item GETC this + +This method will be called when the C function is called. + + sub GETC { print "Don't GETC, Get Perl"; return "a"; } + =item DESTROY this As with the other types of ties, this method will be called when the tied handle is about to be destroyed. This is useful for debugging and possibly for cleaning up. - sub DESTROY { + sub DESTROY { print "\n"; } @@ -366,8 +395,15 @@ possibly for cleaning up. =head2 Malloc Enhancements -If perl's malloc() is used, you can print memory statistics at runtime -by running Perl thusly: +Four new compilation flags are recognized by malloc.c. (They have no +effect if perl is compiled with system malloc().) + +=over + +=item -DDEBUGGING_MSTATS + +If perl is compiled with C defined, you can print +memory statistics at runtime by running Perl thusly: env PERL_DEBUG_MSTATS=2 perl your_script_here @@ -376,11 +412,6 @@ exit; with a value of 1, the statistics ares printed only on exit. (If you want the statistics at an arbitrary time, you'll need to install the optional module Devel::Peek.) -In addition, three new compilation flags are recognized by malloc.c. -(They have no effect if perl is compiled with system malloc().) - -=over - =item -DEMERGENCY_SBRK If this macro is defined, running out of memory need not be a fatal @@ -498,7 +529,7 @@ New constants in the existing Fcntl modules are now supported, provided that your operating system happens to support them: F_GETOWN F_SETOWN - O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC + O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC O_EXLOCK O_SHLOCK These constants are intended for use with the Perl operators sysopen() @@ -747,7 +778,7 @@ Although not new, this has been massively updated. Several new conditions will trigger warnings that were silent before. Some only affect certain platforms. -The following new warnings and errors outline these. +The following new warnings and errors outline these. These messages are classified as follows (listed in increasing order of desperation): @@ -906,7 +937,7 @@ used.) You probably wrote something like this: - @list = qw( + @list = qw( a # a comment b # another comment ); @@ -914,7 +945,7 @@ You probably wrote something like this: when you should have written this: @list = qw( - a + a b ); @@ -933,7 +964,7 @@ aren't needed to separate the items. (You may have used different delimiters than the parentheses shown here; braces are also frequently used.) -You probably wrote something like this: +You probably wrote something like this: qw! a, b, c !; @@ -1077,4 +1108,4 @@ Constructed by Tom Christiansen, grabbing material with permission from innumerable contributors, with kibitzing by more than a few Perl porters. -Last update: Tue Jan 14 14:03:02 EST 1997 +Last update: Sat Mar 8 19:51:26 EST 1997 diff --git a/pod/perldiag.pod b/pod/perldiag.pod index c21e28a..24b1612 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -180,6 +180,15 @@ the return value of your socket() call? See L. (F) You can't allocate more than 2^31+"small amount" bytes. +=item Applying %s to %s will act on scalar(%s) + +(W) The pattern match (//), substitution (s///), and translation (tr///) +operators work on scalar values. If you apply one of them to an array +or a hash, it will convert the array or hash to a scalar value -- the +length of an array, or the population info of a hash -- and then work on +that scalar value. This is probably not what you meant to do. See +L and L for alternatives. + =item Arg too short for msgsnd (F) msgsnd() requires a string at least as long as sizeof(long). diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 09b5ad3..eb7276a 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -1517,7 +1517,7 @@ Note that, because $_ is a reference into the list value, it can be used to modify the elements of the array. While this is useful and supported, it can cause bizarre results if the LIST is not a named array. Similarly, grep returns aliases into the original list, -much like the way that L's index variable aliases the list +much like the way that L's index variable aliases the list elements. That is, modifying an element of a list returned by grep actually modifies the element in the original list. diff --git a/pod/perlguts.pod b/pod/perlguts.pod index 21e4b2c..8c78802 100644 --- a/pod/perlguts.pod +++ b/pod/perlguts.pod @@ -162,7 +162,7 @@ bus error, or just weird results. Change the zero to C<&sv_undef> in the first line and all will be well. To free an SV that you've created, call C. Normally this -call is not necessary (see the section on L). +call is not necessary (see the section on L). =head2 What's Really Stored in an SV? @@ -422,8 +422,8 @@ A reference can be blessed into a package with the following function: SV* sv_bless(SV* sv, HV* stash); The C argument must be a reference. The C argument specifies -which class the reference will belong to. See the section on L -for information on converting class names into stashes. +which class the reference will belong to. See the section on +L for information on converting class names into stashes. /* Still under construction */ @@ -995,7 +995,7 @@ The correspondence between OP's and Is is not 1-to-1. Different OP's in the compile tree of the unit can use the same target, if this would not conflict with the expected life of the temporary. -=head2 Scratchpads and recursions +=head2 Scratchpads and recursion In fact it is not 100% true that a compiled unit contains a pointer to the scratchpad AV. In fact it contains a pointer to an AV of diff --git a/pod/perllocale.pod b/pod/perllocale.pod index 9ac77b8..d393b81 100644 --- a/pod/perllocale.pod +++ b/pod/perllocale.pod @@ -63,7 +63,7 @@ C. If you want a Perl application to process and present your data according to a particular locale, the application code should include -the S> pragma (see L) where +the S> pragma (see L) where appropriate, and B of the following must be true: =over 4 @@ -345,7 +345,7 @@ call strxfrm() for both their operands, then do a byte-by-byte comparison of the transformed strings. By calling strxfrm() explicitly, and using a non locale-affected comparison, the example attempts to save a couple of transformations. In fact, it doesn't save anything: Perl -magic (see L) creates the transformed version of a +magic (see L) creates the transformed version of a string the first time it's needed in a comparison, then keeps it around in case it's needed again. An example rewritten the easy way with C runs just about as fast. It also copes with null characters @@ -703,7 +703,7 @@ L) was always in force, even if the program environment suggested otherwise. By default, Perl still behaves this way so as to maintain backward compatibility. If you want a Perl application to pay attention to locale information, you B use -the S> pragma (see L> Pragma>) to +the S> pragma (see L) to instruct it to do so. Versions of Perl from 5.002 to 5.003 did use the C diff --git a/pod/perlop.pod b/pod/perlop.pod index 88a8af0..71794fa 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -88,7 +88,7 @@ Also parsed as terms are the C and C constructs, as well as subroutine and method calls, and the anonymous constructors C<[]> and C<{}>. -See also L toward the end of this section, +See also L toward the end of this section, as well as L<"I/O Operators">. =head2 The Arrow Operator diff --git a/pod/perlsub.pod b/pod/perlsub.pod index a38d05b..9d725ab 100644 --- a/pod/perlsub.pod +++ b/pod/perlsub.pod @@ -48,15 +48,8 @@ there's really no difference from the language's perspective.) Any arguments passed to the routine come in as the array @_. Thus if you called a function with two arguments, those would be stored in C<$_[0]> and C<$_[1]>. The array @_ is a local array, but its values are implicit -references (predating L) to the actual scalar parameters. What -this means in practice is that when you explicitly modify C<$_[0]> et al., -you will be changing the actual arguments. As a result, all arguments -to functions are treated as lvalues. Any hash or array elements that are -passed to functions will get created if they do not exist (irrespective -of whether the function does modify the contents of C<@_>). This is -frequently a source of surprise. See L for an example. - -The return value of the subroutine is the value of the last expression +references (predating L) to the actual scalar parameters. The +return value of the subroutine is the value of the last expression evaluated. Alternatively, a return statement may be used to specify the returned value and exit the subroutine. If you return one or more arrays and/or hashes, these will be flattened together into one large @@ -503,7 +496,7 @@ Even if you don't want to modify an array, this mechanism is useful for passing multiple arrays in a single LIST, because normally the LIST mechanism will merge all the array values so that you can't extract out the individual arrays. For more on typeglobs, see -L. +L. =head2 Pass by Reference diff --git a/pod/perltie.pod b/pod/perltie.pod index ffd348f..8dc7c17 100644 --- a/pod/perltie.pod +++ b/pod/perltie.pod @@ -413,7 +413,7 @@ Here's the constructor: It's probably worth mentioning that if you're going to filetest the return values out of a readdir, you'd better prepend the directory in question. Otherwise, because we didn't chdir() there, it would -have been testing the wrong file. +have been testing the wrong file. =item FETCH this, key @@ -610,8 +610,9 @@ use the each() function to iterate over such. Example: This is partially implemented now. -A class implementing a tied filehandle should define the following methods: -TIEHANDLE, PRINT and/or READLINE, and possibly DESTROY. +A class implementing a tied filehandle should define the following +methods: TIEHANDLE, at least one of PRINT, READLINE, GETC, or READ, +and possibly DESTROY. It is especially useful when perl is embedded in some other program, where output to STDOUT and STDERR may have to be redirected in some @@ -639,13 +640,30 @@ the print function. sub PRINT { $r = shift; $$r++; print join($,,map(uc($_),@_)),$\ } +=item READ this LIST + +This method will be called when the handle is read from via the C +or C functions. + + sub READ { + $r = shift; + my($buf,$len,$offset) = @_; + print "READ called, \$buf=$buf, \$len=$len, \$offset=$offset"; + } + =item READLINE this -This method will be called when the handle is read from. The method -should return undef when there is no more data. +This method will be called when the handle is read from via . +The method should return undef when there is no more data. sub READLINE { $r = shift; "PRINT called $$r times\n"; } +=item GETC this + +This method will be called when the C function is called. + + sub GETC { print "Don't GETC, Get Perl"; return "a"; } + =item DESTROY this As with the other types of ties, this method will be called when the diff --git a/pod/perltoc.pod b/pod/perltoc.pod index 9e943d1..eb59cda 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -50,12 +50,14 @@ expression enhancements, Innumerable Unbundled Modules, Compilability =item Compilation Option: Binary Compatibility With 5.003 -=item New Opcode Module and Revised Safe Module +=item Subroutine Parameters Are Not Autovivified =item Fixed Parsing of $$, &$, etc. =item Changes to Tainting Checks +=item New Opcode Module and Revised Safe Module + =item Internal Change: FileHandle Class Based on IO::* Classes =item Internal Change: PerlIO internal IO abstraction interface @@ -78,11 +80,12 @@ isa(CLASS), can(METHOD), VERSION( [NEED] ) =item TIEHANDLE Now Supported -TIEHANDLE classname, LIST, PRINT this, LIST, READLINE this, DESTROY this +TIEHANDLE classname, LIST, PRINT this, LIST, READ this LIST, READLINE this, +GETC this, DESTROY this =item Malloc Enhancements --DEMERGENCY_SBRK, -DPACK_MALLOC, -DTWO_POT_OPTIMIZE +-DDEBUGGING_MSTATS, -DEMERGENCY_SBRK, -DPACK_MALLOC, -DTWO_POT_OPTIMIZE =item Miscellaneous Efficiency Enhancements @@ -962,7 +965,8 @@ this, NEXTKEY this, lastkey, DESTROY this =item Tying FileHandles -TIEHANDLE classname, LIST, PRINT this, LIST, READLINE this, DESTROY this +TIEHANDLE classname, LIST, PRINT this, LIST, READ this LIST, READLINE this, +GETC this, DESTROY this =item The C Gotcha @@ -1172,8 +1176,7 @@ Regular Expression =item Subroutine, Signal, Sorting Traps -Subroutine calls provide lvalue context to arguments, (Signals), (Sort -Subroutine), warn() won't let you specify a filehandle +(Signals), (Sort Subroutine), warn() won't let you specify a filehandle =item OS Traps @@ -1480,7 +1483,7 @@ B, B =item Scratchpads -=item Scratchpads and recursions +=item Scratchpads and recursion =back @@ -3624,6 +3627,6 @@ don't all have manual pages yet: =head1 AUTHOR -Larry Wall EFE, with the help of oodles +Larry Wall >, with the help of oodles of other folks. diff --git a/pod/perltrap.pod b/pod/perltrap.pod index 6f66887..17c576d 100644 --- a/pod/perltrap.pod +++ b/pod/perltrap.pod @@ -1137,26 +1137,6 @@ general subroutine traps. Includes some OS-Specific traps. =over 5 -=item * Subroutine calls provide lvalue context to arguments - -Beginning with version 5.002, all subroutine arguments are consistently -given a "value may be modified" context, since all subroutines are able -to modify their arguments by explicitly referring to C<$_[0]> etc. -This means that any array and hash elements provided as arguments -will B if they did not exist at the time -the subroutine is called. (perl5 versions before 5.002 used to provide -lvalue context for the second and subsequent arguments, and perl4 did -not provide lvalue context to subroutine arguments at all--even though -arguments were supposedly modifiable in perl4). - - sub test { $_[0] = 1; $_[1] = 2; $_[2] = 3; } - &test($foo{'bar'}, $bar{'foo'}, $foo[5]); - print join(':', %foo), '|', join(':',%bar), '|', join(':',@foo); - - # perl4 prints: || - # perl5 < 5.002 prints: |foo:2|:::::3 - # perl5 >= 5.002 prints: bar:1|foo:2|:::::3 - =item * (Signals) Barewords that used to look like strings to Perl will now look like subroutine diff --git a/pp_sys.c b/pp_sys.c index a1153c6..6cbca14 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -829,6 +829,7 @@ PP(pp_getc) { dSP; dTARGET; GV *gv; + MAGIC *mg; if (MAXARG <= 0) gv = stdingv; @@ -836,6 +837,19 @@ PP(pp_getc) gv = (GV*)POPs; if (!gv) gv = argvgv; + + if (SvMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) { + PUSHMARK(SP); + XPUSHs(mg->mg_obj); + PUTBACK; + ENTER; + perl_call_method("GETC", GIMME); + LEAVE; + SPAGAIN; + if (GIMME == G_SCALAR) + SvSetSV_nosteal(TARG, TOPs); + RETURN; + } if (!gv || do_eof(gv)) /* make sure we have fp with something */ RETPUSHUNDEF; TAINT; @@ -1126,8 +1140,24 @@ PP(pp_sysread) Sock_size_t bufsize; SV *bufsv; STRLEN blen; + MAGIC *mg; gv = (GV*)*++MARK; + if (SvMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) { + SV *sv; + + PUSHMARK(MARK-1); + *MARK = mg->mg_obj; + ENTER; + perl_call_method("READ", G_SCALAR); + LEAVE; + SPAGAIN; + sv = POPs; + SP = ORIGMARK; + PUSHs(sv); + RETURN; + } + if (!gv) goto say_undef; bufsv = *++MARK; diff --git a/proto.h b/proto.h index f8ad899..9912407 100644 --- a/proto.h +++ b/proto.h @@ -31,7 +31,7 @@ OP* bind_match _((I32 type, OP* left, OP* pat)); OP* block_end _((I32 floor, OP* seq)); int block_start _((int full)); void boot_core_UNIVERSAL _((void)); -void calllist _((AV* list)); +void calllist _((I32 oldscope, AV* list)); I32 cando _((I32 bit, I32 effective, struct stat* statbufp)); #ifndef CASTNEGFLOAT U32 cast_ulong _((double f)); diff --git a/t/comp/cpp.t b/t/comp/cpp.t index 880aed8..00a9e68 100755 --- a/t/comp/cpp.t +++ b/t/comp/cpp.t @@ -9,7 +9,7 @@ BEGIN { use Config; if ( ($Config{'cppstdin'} =~ /\bcppstdin\b/) and - ( ! -x $Config{'scriptdir'} . "/cppstdin") ) { + ( ! -x $Config{'binexp'} . "/cppstdin") ) { print "1..0\n"; exit; # Cannot test till after install, alas. } diff --git a/t/op/misc.t b/t/op/misc.t index d7a62dc..0f251ea 100755 --- a/t/op/misc.t +++ b/t/op/misc.t @@ -196,17 +196,34 @@ BEGIN failed--compilation aborted at - line 1. } sub DESTROY { print "and destroyed as well\n"; - } + } + sub READ { + shift; + print STDOUT "foo->can(READ)(@_)\n"; + return 100; + } + sub GETC { + shift; + print STDOUT "Don't GETC, Get Perl\n"; + return "a"; + } } { local(*FOO); tie(*FOO,'foo'); print FOO "sentence.", "reversed", "a", "is", "This"; print "-- ", , " --\n"; + my($buf,$len,$offset); + $buf = "string"; + $len = 10; $offset = 1; + read(FOO, $buf, $len, $offset) == 100 or die "foo->READ failed"; + getc(FOO) eq "a" or die "foo->GETC failed"; } EXPECT This is a reversed sentence. -- Out of inspiration -- +foo->can(READ)(string 10 1) +Don't GETC, Get Perl and destroyed as well ######## my @a; $a[2] = 1; for (@a) { $_ = 2 } print "@a\n" diff --git a/vms/config.vms b/vms/config.vms index 03051da..040895d 100644 --- a/vms/config.vms +++ b/vms/config.vms @@ -76,7 +76,7 @@ * when Perl is built. Please do not change it by hand; make * any changes to FndVers.Com instead. */ -#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00392" /**/ +#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00393" /**/ #define ARCHLIB ARCHLIB_EXP /*config-skip*/ /* ARCHNAME: @@ -979,7 +979,12 @@ * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ #define BIN "/perl_root/000000" /**/ +#define BIN_EXP "/perl_root/000000" /**/ /* HAS_ALARM: * This symbol, if defined, indicates that the alarm routine is @@ -1466,14 +1471,6 @@ #define SITEARCH_EXP "/perl_root/lib/site_perl/VMS_VAX" /**/ #define SITEARCH SITEARCH_EXP /*config-skip*/ -/* SCRIPTDIR: - * This symbol holds the name of the directory in which the user wants - * to put publicly executable scripts for the package in question. It - * is often a directory that is mounted across diverse architectures. - * Programs must be prepared to deal with ~name expansion. - */ -#define SCRIPTDIR "/perl_root/script" /**/ - /* Size_t: * This symbol holds the type used to declare length parameters * for string functions. It is usually size_t, but may be diff --git a/vms/descrip.mms b/vms/descrip.mms index 184271c..c22dcde 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -65,7 +65,7 @@ OBJVAL = $(MMS$TARGET_NAME)$(O) .endif # Updated by fndvers.com -- do not edit by hand -PERL_VERSION = 5_00392# +PERL_VERSION = 5_00393# ARCHDIR = [.lib.$(ARCH).$(PERL_VERSION)] @@ -85,10 +85,11 @@ PIPES_BROKEN = 1 @ @[.vms]fndvers.com "" "" "[.vms]descrip.mms" @ If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS] CC = gcc +PIPES_BROKEN = 1 # -fno-builtin avoids bug in gcc up to version 2.6.2 which can destroy # data when memcpy() is called on large (>64 kB) blocks of memory # (fixed in gcc 2.6.3) -XTRACCFLAGS = /Obj=$(MMS$TARGET_NAME)$(O)/NoCase_Hack/Optimize=2/CC1="""""-fno-builtin""""" +XTRACCFLAGS = /Obj=$(MMS$TARGET_NAME)$(O)/NoCase_Hack/Optimize=2 DBGSPECFLAGS = XTRADEF = ,GNUC_ATTRIBUTE_CHECK XTRAOBJS = @@ -373,7 +374,7 @@ $(ARCHDIR)config.pm : [.lib]config.pm $(XSUBPP) $(MMS$SOURCE) >$(MMS$TARGET) [.ext.dynaloader]dl_vms$(O) : [.ext.dynaloader]dl_vms.c - $(CC) $(CFLAGS) /Object=$(MMS$TARGET) $(MMS$SOURCE) + $(CC) $(CFLAGS) /Include=([],[.ext.dynaloader])/Object=$(MMS$TARGET) $(MMS$SOURCE) [.lib]DynaLoader.pm : [.ext.dynaloader]dynaloader.pm Copy/Log/NoConfirm [.ext.dynaloader]dynaloader.pm [.lib]DynaLoader.pm @@ -550,12 +551,28 @@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]S Link $(LINKFLAGS) /Exe=$(MMS$TARGET) $(MMS$SOURCE_LIST) $(CRTLOPTS) # Accomodate buggy cpp in some version of DECC, which chokes on illegal -# filespec "y.tab.c" +# filespec "y.tab.c", and broken gcc cpp, which doesn't start #include "" +# search in same dir as source file [.x2p]a2p$(O) : [.x2p]a2p.c $(MINIPERL_EXE) $(MINIPERL) -pe "s/^#line\s+(\d+)\s+\Q""y.tab.c""/#line $1 ""y_tab.c""/;" $(MMS$SOURCE) >$(MMS$TARGET_NAME)_vms.c - $(CC) $(CFLAGS) /Object=$(MMS$TARGET) $(MMS$TARGET_NAME)_vms.c + $(CC) $(CFLAGS) /Object=$(MMS$TARGET)/Include=([.x2p],[]) $(MMS$TARGET_NAME)_vms.c Delete/Log/NoConfirm $(MMS$TARGET_NAME)_vms.c; +# gcc cpp broken -- doesn't look in directory of source file for #include "" +.ifdef GNUC +[.x2p]hash$(O) : [.x2p]hash.c + $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE) + +[.x2p]str$(O) : [.x2p]str.c + $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE) + +[.x2p]util$(O) : [.x2p]util.c + $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE) + +[.x2p]walk$(O) : [.x2p]walk.c + $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE) +.endif + [.lib.pod]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) @@ -1611,7 +1628,9 @@ globals$(O) : util.h [.x2p]str$(O) : [.x2p]str.h [.x2p]str$(O) : handy.h [.x2p]str$(O) : [.x2p]util.h +.ifdef __MMK__ [.x2p]util$(O) : [.x2p]util.c +.endif [.x2p]util$(O) : [.x2p]EXTERN.h [.x2p]util$(O) : [.x2p]a2p.h [.x2p]util$(O) : [.x2p]hash.h diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl index 48092ba..cb4f7dd 100644 --- a/vms/gen_shrfls.pl +++ b/vms/gen_shrfls.pl @@ -268,7 +268,7 @@ elsif ($isgcc) { # if DOINIT is #defined. Bleah. It's cheaper to just add # it by hand than to add /Define=DOINIT to the preprocessing # run and wade through all the extra junk. - $vars{'Error'}++; + $vars{"${embed}Error"}++; } # Eventually, we'll check against existing copies here, so we can add new diff --git a/vms/sockadapt.h b/vms/sockadapt.h index e104ca7..d7f7cdc 100644 --- a/vms/sockadapt.h +++ b/vms/sockadapt.h @@ -140,9 +140,6 @@ void endnetent(); #include #include #include -/* However, we don't have these two in the system headers. */ -void setnetent(int); -void endnetent(); /* SocketShr doesn't support these routines, but the DECC RTL contains * stubs with these names, designed to be used with the UCX socket @@ -155,6 +152,10 @@ void endnetent(); #define endnetent no_endnetent #endif +/* We don't have these two in the system headers. */ +void setnetent(int); +void endnetent(); + #include /* socketshr.h from SocketShr 0.9D doesn't alias fileno; its comments say * that the CRTL version works OK. This isn't the case, at least with diff --git a/win32/config.H b/win32/config.H index 92768ee..62fa2f1 100644 --- a/win32/config.H +++ b/win32/config.H @@ -37,7 +37,12 @@ * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ #define BIN "/usr/local/bin" /**/ +#define BIN_EXP "/usr/local/bin" /**/ /* CAT2: * This macro catenates 2 tokens together. @@ -1259,14 +1264,6 @@ */ #define RANDBITS 15 /**/ -/* SCRIPTDIR: - * This symbol holds the name of the directory in which the user wants - * to put publicly executable scripts for the package in question. It - * is often a directory that is mounted across diverse architectures. - * Programs must be prepared to deal with ~name expansion. - */ -#define SCRIPTDIR "/usr/local/script" /**/ - /* Select_fd_set_t: * This symbol holds the type used for the 2nd, 3rd, and 4th * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET