summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Vincent <jesse@bestpractical.com>2011-08-15 22:20:53 +0300
committerJesse Vincent <jesse@bestpractical.com>2011-08-15 22:20:53 +0300
commitd0580c073780ff3a1d0eb8a91441553a8bc6dee9 (patch)
tree65ed891370131333b2e61cb0c7cb464086df900f
parentd6655a35db9c09cc4a4eeae16b9ec49c7881b1ab (diff)
parent5840c18f54d64eedd62c14cfd8d5afafb86c61bd (diff)
downloadperl-d0580c073780ff3a1d0eb8a91441553a8bc6dee9.tar.gz
Merge branch 'blead' of ssh://perl5.git.perl.org/perl into blead
* 'blead' of ssh://perl5.git.perl.org/perl: (198 commits) CORE.pod: fix nit grammar podcheck.t pod grammar fix Make lock(&foo) syntax nominally lock the subroutine Forgot one in d677d0fca41325ba7203de00652fdeb43659754a. Write some missing version strings in configure.com Correct some format strings in configure.com. Improve comments about op_private bits. And move the non op specific flags to the top. get authors.t passing again Update AUTHORS file and convert from Latin-1 to UTF-8 perldiag.pod on defined %hash perldelta for &CORE::foo Update core_prototype’s docs Move pp_-specific code out of core_prototype Change core_prototype to take a keyword num Add tests for precedence of CORE:: subs Add inlinable &CORE::functions Make core_prototype provide the op number as well Make sure the CORE package is always called CORE Remove select’s prototype B::Terse and B::Xref were missing some documentation. ...
-rw-r--r--AUTHORS69
-rwxr-xr-xConfigure219
-rw-r--r--Cross/config.sh-arm-linux2
-rw-r--r--MANIFEST8
-rwxr-xr-xMakefile.SH5
-rw-r--r--NetWare/config.wc2
-rw-r--r--NetWare/interface.c8
-rw-r--r--NetWare/interface.cpp8
-rw-r--r--Porting/Glossary7
-rwxr-xr-xPorting/Maintainers.pl28
-rw-r--r--Porting/bump-perl-version2
-rwxr-xr-xPorting/checkAUTHORS.pl3
-rwxr-xr-xPorting/checkcfgvar.pl129
-rw-r--r--Porting/config.sh2
-rw-r--r--Porting/exercise_makedef.pl92
-rw-r--r--README.hpux25
-rw-r--r--XSUB.h48
-rw-r--r--autodoc.pl4
-rwxr-xr-xconfig_h.SH10
-rw-r--r--configure.com104
-rw-r--r--cpan/CPAN-Meta/Changes19
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta.pm36
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm30
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm9
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/History.pm10
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm9
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm35
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm105
-rw-r--r--cpan/CPAN-Meta/t/converter.t27
-rw-r--r--cpan/CPAN/Changes20
-rw-r--r--cpan/CPAN/lib/App/Cpan.pm302
-rw-r--r--cpan/CPAN/lib/CPAN.pm84
-rw-r--r--cpan/CPAN/lib/CPAN/CacheMgr.pm1
-rw-r--r--cpan/CPAN/lib/CPAN/Distribution.pm109
-rw-r--r--cpan/CPAN/lib/CPAN/Distroprefs.pm8
-rw-r--r--cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm50
-rw-r--r--cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm53
-rw-r--r--cpan/CPAN/lib/CPAN/FTP.pm12
-rw-r--r--cpan/CPAN/lib/CPAN/FirstTime.pm48
-rw-r--r--cpan/CPAN/lib/CPAN/HTTP/Client.pm6
-rw-r--r--cpan/CPAN/lib/CPAN/HandleConfig.pm22
-rw-r--r--cpan/CPAN/lib/CPAN/Index.pm12
-rw-r--r--cpan/CPAN/lib/CPAN/Mirrors.pm439
-rw-r--r--cpan/CPAN/lib/CPAN/Shell.pm9
-rw-r--r--cpan/DB_File/Changes13
-rw-r--r--cpan/DB_File/DB_File.pm20
-rw-r--r--cpan/DB_File/t/db-recno.t1
-rw-r--r--cpan/Devel-PPPort/parts/inc/variables2
-rw-r--r--cpan/Encode/Changes16
-rw-r--r--cpan/Encode/Encode.pm6
-rw-r--r--cpan/Encode/META.yml4
-rw-r--r--cpan/Encode/Unicode/Unicode.xs7
-rw-r--r--cpan/Encode/encoding.pm4
-rw-r--r--cpan/Encode/lib/Encode/Alias.pm4
-rw-r--r--cpan/Encode/lib/Encode/Encoder.pm6
-rw-r--r--cpan/Encode/lib/Encode/Guess.pm4
-rw-r--r--cpan/ExtUtils-MakeMaker/Changes15
-rw-r--r--cpan/ExtUtils-MakeMaker/MANIFEST1
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm13
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm4
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm2
-rw-r--r--cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm2
-rw-r--r--cpan/Module-Load/lib/Module/Load.pm21
-rw-r--r--cpan/Module-Metadata/lib/Module/Metadata.pm154
-rw-r--r--cpan/Module-Metadata/t/lib/0_1/Foo.pm3
-rw-r--r--cpan/Module-Metadata/t/lib/0_2/Foo.pm3
-rw-r--r--cpan/Module-Metadata/t/metadata.t11
-rw-r--r--cpan/Module-Metadata/t/version.t22
-rw-r--r--cpan/Params-Check/lib/Params/Check.pm4
-rw-r--r--dist/Attribute-Handlers/lib/Attribute/Handlers.pm493
-rw-r--r--dist/B-Deparse/Deparse.pm2
-rw-r--r--dist/Cwd/lib/File/Spec.pm8
-rw-r--r--dist/Cwd/lib/File/Spec/Mac.pm25
-rw-r--r--dist/Cwd/lib/File/Spec/Unix.pm5
-rw-r--r--dist/Cwd/lib/File/Spec/VMS.pm5
-rw-r--r--dist/Cwd/lib/File/Spec/Win32.pm5
-rw-r--r--dist/Data-Dumper/Dumper.pm16
-rw-r--r--dist/ExtUtils-Install/lib/ExtUtils/Installed.pm6
-rw-r--r--dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm35
-rw-r--r--dist/ExtUtils-Manifest/t/Manifest.t44
-rw-r--r--dist/ExtUtils-ParseXS/Changes16
-rw-r--r--dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm23
-rw-r--r--dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm18
-rw-r--r--dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm7
-rw-r--r--dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t15
-rw-r--r--dist/I18N-LangTags/lib/I18N/LangTags.pm22
-rw-r--r--dist/IO/IO.pm6
-rw-r--r--dist/IO/lib/IO/Socket/INET.pm48
-rw-r--r--dist/Locale-Maketext/lib/Locale/Maketext.pod3
-rw-r--r--dist/Math-BigInt/lib/Math/BigFloat.pm320
-rw-r--r--dist/Math-BigInt/lib/Math/BigInt.pm243
-rw-r--r--dist/base/lib/fields.pm6
-rw-r--r--dist/bignum/lib/Math/BigFloat/Trace.pm2
-rw-r--r--dist/bignum/lib/Math/BigInt/Trace.pm2
-rw-r--r--dist/bignum/lib/bigint.pm8
-rw-r--r--dist/bignum/lib/bignum.pm6
-rw-r--r--dist/bignum/lib/bigrat.pm2
-rw-r--r--embed.fnc13
-rw-r--r--embed.h2
-rw-r--r--embedvar.h369
-rw-r--r--epoc/config.sh2
-rw-r--r--ext/B/B.pm2
-rw-r--r--ext/B/B.xs32
-rw-r--r--ext/B/B/Terse.pm12
-rw-r--r--ext/B/B/Xref.pm52
-rw-r--r--ext/Socket/t/getaddrinfo.t14
-rw-r--r--global.sym1
-rw-r--r--gv.c77
-rw-r--r--hints/hpux.sh10
-rw-r--r--hv.c2
-rw-r--r--intrpvar.h657
-rw-r--r--lib/CORE.pod24
-rw-r--r--lib/diagnostics.pm10
-rw-r--r--lib/diagnostics.t9
-rw-r--r--makedef.pl1435
-rw-r--r--metaconfig.h2
-rw-r--r--mydtrace.h27
-rw-r--r--op.c326
-rw-r--r--op.h12
-rw-r--r--opcode.h4
-rw-r--r--perl.c20
-rw-r--r--perl.h16
-rw-r--r--perlapi.c10
-rw-r--r--perlapi.h18
-rw-r--r--perldtrace.d4
-rw-r--r--perlvars.h68
-rw-r--r--perly.act129
-rw-r--r--perly.h264
-rw-r--r--perly.tab1601
-rw-r--r--perly.y9
-rw-r--r--plan9/config_sh.sample2
-rw-r--r--pod.lst4
-rw-r--r--pod/buildtoc35
-rw-r--r--pod/perl.pod4
-rw-r--r--pod/perl5100delta.pod2
-rw-r--r--pod/perl51311delta.pod2
-rw-r--r--pod/perl5140delta.pod2
-rw-r--r--pod/perl5150delta.pod2
-rw-r--r--pod/perl5151delta.pod2
-rw-r--r--pod/perl595delta.pod2
-rw-r--r--pod/perlcompile.pod293
-rw-r--r--pod/perldelta.pod134
-rw-r--r--pod/perldiag.pod45
-rw-r--r--pod/perlexperiment.pod305
-rw-r--r--pod/perlfunc.pod39
-rw-r--r--pod/perlgit.pod4
-rw-r--r--pod/perlglossary.pod10
-rw-r--r--pod/perlhack.pod2
-rw-r--r--pod/perlmod.pod4
-rw-r--r--pod/perlop.pod6
-rw-r--r--pod/perlperf.pod2
-rw-r--r--pod/perlpod.pod2
-rw-r--r--pod/perlreapi.pod2
-rw-r--r--pod/perlrecharclass.pod2
-rw-r--r--pod/perlretut.pod10
-rw-r--r--pod/perlsub.pod6
-rw-r--r--pod/perlvms.pod2
-rw-r--r--pp.c13
-rw-r--r--pp_ctl.c16
-rw-r--r--pp_sys.c8
-rw-r--r--proto.h14
-rwxr-xr-xregen/embed.pl107
-rw-r--r--regen/opcodes4
-rw-r--r--regexec.c4
-rw-r--r--scope.c3
-rw-r--r--symbian/config.sh2
-rw-r--r--t/comp/bproto.t5
-rw-r--r--t/io/eintr.t2
-rw-r--r--t/lib/strict/subs10
-rw-r--r--t/lib/warnings/op6
-rw-r--r--t/mro/inconsistent_c3.t3
-rw-r--r--t/op/array.t9
-rw-r--r--t/op/coreinline.t108
-rw-r--r--t/op/cproto.t11
-rw-r--r--t/op/lock.t6
-rw-r--r--t/op/sigdispatch.t6
-rw-r--r--t/porting/filenames.t4
-rw-r--r--t/porting/known_pod_issues.dat315
-rw-r--r--t/porting/podcheck.t60
-rw-r--r--t/re/re_tests10
-rw-r--r--toke.c24
-rw-r--r--uconfig.h14
-rw-r--r--uconfig.sh2
-rw-r--r--uconfig64.sh2
-rw-r--r--util.c8
-rw-r--r--vms/descrip_mms.template781
-rw-r--r--win32/Makefile.ce2
-rw-r--r--win32/config.bc2
-rw-r--r--win32/config.ce2
-rw-r--r--win32/config.gc2
-rw-r--r--win32/config.gc642
-rw-r--r--win32/config.gc64nox2
-rw-r--r--win32/config.vc2
-rw-r--r--win32/config.vc642
-rw-r--r--win32/perllib.c8
-rw-r--r--win32/pod.mak8
218 files changed, 5889 insertions, 5865 deletions
diff --git a/AUTHORS b/AUTHORS
index 20b588aef1..7cb1ded7a4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -69,7 +69,7 @@ Ananth Kesari <HYanantha@novell.com>
Anders Johnson <ajohnson@nvidia.com>
Andreas Karrer <karrer@ife.ee.ethz.ch>
Andreas Klussmann <andreas@infosys.heitec.de>
-Andreas Knig <a.koenig@mind.de>
+Andreas König <a.koenig@mind.de>
Andreas Marienborg <andreas.marienborg@gmail.com>
Andreas Schwab <schwab@suse.de>
Andrei Yelistratov <andrew@sundale.net>
@@ -106,7 +106,7 @@ Artiom Morozov <artiom@phreaker.net>
Artur Bergman <artur@contiller.se>
Arvan <apritchard@zeus.com>
Ash Berlin <ash@cpan.org>
-Ask Bjern Hansen <ask@develooper.com>
+Ask Bjöern Hansen <ask@develooper.com>
Audrey Tang <cpan@audreyt.org>
Axel Boldt
Barrie Slaymaker <barries@slaysys.com>
@@ -229,7 +229,7 @@ Craig DeForest <zowie@euterpe.boulder.swri.edu>
Craig Milo Rogers <Rogers@ISI.EDU>
Curtis Poe <cp@onsitetech.com>
Curtis Jewell <perl@csjewell.fastmail.us>
-Dagfinn Ilmari Mannsker <ilmari@ilmari.org>
+Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Dale Amon <amon@vnl.com>
Damian Conway <damian@conway.org>
Damon Atkins <Damon.Atkins@nabaus.com.au>
@@ -246,7 +246,7 @@ Daniel Chetlin <daniel@chetlin.com>
Daniel Frederick Crisman <daniel@crisman.org>
Daniel Grisinger <dgris@dimensional.com>
Daniel Lieberman <daniel@bitpusher.com>
-Daniel Muio <dmuino@afip.gov.ar>
+Daniel Muiño <dmuino@afip.gov.ar>
Daniel P. Berrange <dan@berrange.com>
Daniel S. Lewart <lewart@uiuc.edu>
Daniel Yacob <perl@geez.org>
@@ -360,8 +360,8 @@ Frank Tobin <ftobin@uiuc.edu>
Frank Wiegand <frank.wiegand@gmail.com>
Franklin Chen <chen@adi.com>
Franz Fasching <perldev@drfasching.com>
-Franois Dsarmnien <desar@club-internet.fr>
-Frderic Chauveau <fmc@pasteur.fr>
+François Désarménien <desar@club-internet.fr>
+Fréderic Chauveau <fmc@pasteur.fr>
Fyodor Krasnov <fyodor@aha.ru>
G. Del Merritt <del@intranetics.com>
Gabe Schaffer
@@ -440,7 +440,7 @@ Iain Truskett
Ian Goodacre <ian.goodacre@xtra.co.nz>
Ian Maloney <ian.malonet@ubs.com>
Ian Phillipps <Ian.Phillipps@iname.com>
-Ignasi Roca Carri <ignasi.roca@fujitsu-siemens.com>
+Ignasi Roca Carrió <ignasi.roca@fujitsu-siemens.com>
Igor Sutton <izut@cpan.org>
Ilmari Karonen <iltzu@sci.fi>
Ilya Martynov <ilya@martynov.org>
@@ -450,7 +450,7 @@ Ilya Zakharevich <ilya@math.berkeley.edu>
Inaba Hiroto <inaba@st.rim.or.jp>
Indy Singh <indy@nusphere.com>
Ingo Weinhold <ingo_weinhold@gmx.de>
-Ingy dt Net <ingy@ttul.org>
+Ingy döt Net <ingy@ttul.org>
insecure <insecure@mail.od.ua>
Irving Reid <irving@tor.securecomputing.com>
Ivan Kurmanov <kurmanov@openlib.org>
@@ -508,7 +508,7 @@ Jerry D. Hedden <jdhedden@cpan.org>
Jesse Glick <jesse@sig.bsh.com>
Jesse Luehrs <doy@tozt.net>
Jesse Vincent <jesse@fsck.com>
-Jess Quiroga <jquiroga@pobox.com>
+Jesús Quiroga <jquiroga@pobox.com>
Jim Anderson <jander@ml.com>
Jim Avera <avera@hal.com>
Jim Balter
@@ -588,8 +588,8 @@ juna <ggl.20.jj...@spamgourmet.com>
Jungshik Shin <jshin@mailaps.org>
Justin Banks <justinb@cray.com>
John E. Malmberg <wb8tyw@qsl.net>
-Jrg Walter <jwalt@cpan.org>
-Jos Pedro Oliveira <jpo@di.uminho.pt>
+Jörg Walter <jwalt@cpan.org>
+José Pedro Oliveira <jpo@di.uminho.pt>
Ka-Ping Yee <kpyee@aw.sgi.com>
Kaoru Maeda <maeda@src.ricoh.co.jp>
Karl Glazebrook <kgb@aaossz.aao.GOV.AU>
@@ -598,10 +598,10 @@ Karl Simon Berg <karl@it.kth.se>
Karl Williamson <public@khwilliamson.com>
Karsten Sperling <spiff@phreax.net>
Kaveh Ghazi <ghazi@caip.rutgers.edu>
-Kay Rpke <kroepke@dolphin-services.de>
+Kay Röpke <kroepke@dolphin-services.de>
KAWAI Takanori <GCD00051@nifty.ne.jp>
Keith Neufeld <neufeld@fast.pvi.org>
-Keith Thompson <kst@mib.org>
+Keith Thompson <Keith.S.Thompson@gmail.com>
Ken Estes <estes@ms.com>
Ken Fox <kfox@ford.com>
Ken Hirsch <kenhirsch@ftml.net>
@@ -637,7 +637,7 @@ Larry Shatzer <fugazi@zyx.net>
Larry W. Virden <lvirden@cas.org>
Larry Wall <larry@wall.org>
Lars Hecking <lhecking@nmrc.ucc.ie>
-Lars D <daxim@cpan.org>
+Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>
Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
Larwan Berke <apocal@cpan.org>
Leif Huhn <leif@hale.dkstat.com>
@@ -659,13 +659,13 @@ Lubomir Rintel <lkundrak@v3.sk>
Lupe Christoph <lupe@lupe-christoph.de>
Luther Huffman <lutherh@stratcom.com>
Maik Hentsche <maik@mm-double.de>
-Major Sbastien <sebastien.major@crdp.ac-caen.fr>
+Major Sébastien <sebastien.major@crdp.ac-caen.fr>
Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>
Malcolm Beattie <mbeattie@sable.ox.ac.uk>
Manuel Valente <mvalente@idealx.com>
Marc Lehmann <pcg@goof.com>
Marc Paquette <Marc.Paquette@Softimage.COM>
-Marcel Grnauer <marcel@codewerk.com>
+Marcel Grünauer <marcel@codewerk.com>
Marcus Holland-Moritz <mhx-perl@gmx.net>
Marek Rouchal <marek.rouchal@infineon.com>
Mark A Biggar <mab@wdl.loral.com>
@@ -765,6 +765,7 @@ Mike Mestnik <MMestnik@rustconsulting.com>
Mike Pomraning <mjp@pilcrow.madison.wi.us>
Mike Rogers
Mike Schilli <m@perlmeister.com>
+Mike Sheldrake <mike@sheldrake.net>
Mike Stok <mike@stok.co.uk>
Mike W Ellwood <mwe@rl.ac.uk>
Mikhail Zabaluev <mhz@alt-linux.org>
@@ -780,7 +781,7 @@ Neale Ferguson <neale@VMA.TABNSW.COM.AU>
Neil Bowers <neil@bowers.com>
Neil Watkiss <neil.watkiss@sophos.com>
Nicholas Clark <nick@ccl4.org>
-Nicholas Oxhj
+Nicholas Oxhøj
Nicholas Perez <nperez@cpan.org>
Nick Cleaton <nick@cleaton.net>
Nick Duffek
@@ -836,7 +837,7 @@ Paul Rogers <Paul.Rogers@Central.Sun.COM>
Paul Saab <ps@yahoo-inc.com>
Paul Schinder <schinder@pobox.com>
Paul Szabo <psz@maths.usyd.edu.au>
-Pavel Kakovsk <kan@dcit.cz>
+Pavel Ka¿kovský <kan@dcit.cz>
Pavel Zakouril <Pavel.Zakouril@mff.cuni.cz>
Pedro Felipe Horrillo Guerra <pancho@pancho.name>
Per Einar Ellefsen <per.einar@skynet.be>
@@ -856,7 +857,7 @@ Peter O'Gorman <peter@pogma.com>
Peter Prymmer <PPrymmer@factset.com>
Peter Rabbitson <rabbit@rabbit.us>
Peter Scott <Peter@PSDT.com>
-Peter Valdemar Mrch <pm@capmon.dk>
+Peter Valdemar Mørch <pm@capmon.dk>
Peter van Heusden <pvh@junior.uwc.ac.za>
Peter Wolfe <wolfe@teloseng.com>
Peter E. Yee <yee@trident.arc.nasa.gov>
@@ -906,7 +907,7 @@ Richard Hitt <rbh00@utsglobal.com>
Richard Kandarian <richard.kandarian@lanl.gov>
Richard L. England <richard_england@mentorg.com>
Richard L. Maus, Jr. <rmaus@monmouth.com>
-Richard Mhn <richard.moehn@fu-berlin.de>
+Richard Möhn <richard.moehn@fu-berlin.de>
Richard Ohnemus <richard_ohnemus@dallas.csd.sterling.com>
Richard Soderberg <p5-authors@crystalflame.net>
Richard Yeh <rcyeh@cco.caltech.edu>
@@ -941,13 +942,13 @@ Russ Allbery <rra@stanford.edu>
Russell Fulton <russell@ccu1.auckland.ac.nz>
Russell Mosemann <mose@ccsn.edu>
Ryan Herbert <rherbert@sycamorehq.com>
-Salvador Fandio <sfandino@yahoo.com>
+Salvador Fandiño <sfandino@yahoo.com>
Salvador Ortiz Garcia <sog@msg.com.mx>
Sam Kimbrel <kimbrel@me.com>
Sam Tregar <sam@tregar.com>
Sam Vilain <sam@vilain.net>
Samuel Thibault <sthibault@debian.org>
-Samuli Krkkinen <skarkkai@woods.iki.fi>
+Samuli Kärkkäinen <skarkkai@woods.iki.fi>
Schuyler Erle <schuyler@oreilly.com>
Scott A Crosby <scrosby@cs.rice.edu>
Scott Bronson <bronson@rinspin.com>
@@ -963,11 +964,11 @@ Sean M. Burke <sburke@cpan.org>
Sean Robinson <robinson_s@sc.maricopa.edu>
Sean Sheedy <seans@ncube.com>
Sebastian Wittmeier <Sebastian.Wittmeier@ginko.de>
-Sbastien Aperghis-Tramoni <sebastien@aperghis.net>
+Sébastien Aperghis-Tramoni <sebastien@aperghis.net>
Sebastien Barre <Sebastien.Barre@utc.fr>
Sebastian Schmidt <yath@yath.de>
Sebastian Steinlechner <steinlechner@gmx.net>
-Srgio Durigan Jnior <sergiodj@linux.vnet.ibm.com>
+Sérgio Durigan Júnior <sergiodj@linux.vnet.ibm.com>
Shawn <svicalifornia@gmail.com>
Shawn M Moore <sartak@gmail.com>
Sherm Pendley <sherm@dot-app.org>
@@ -990,9 +991,9 @@ Spider Boardman <spider@orb.nashua.nh.us>
Spiros Denaxas <s.denaxas@gmail.com>
Sreeji K Das <sreeji_k@yahoo.com>
Stas Bekman <stas@stason.org>
-Steffen Mller <smueller@cpan.org>
+Steffen Müller <smueller@cpan.org>
Steffen Ullrich <coyote.frank@gmx.net>
-Stphane Payrard <stef@mongueurs.net>
+Stéphane Payrard <stef@mongueurs.net>
Stepan Kasal <skasal@redhat.com>
Stephane Payrard <properler@freesurf.fr>
Stephanie Beals <bealzy@us.ibm.com>
@@ -1031,10 +1032,10 @@ Tels <nospam-abuse@bloodgate.com>
Teun Burgers <burgers@ecn.nl>
Thad Floryan <thad@thadlabs.com>
Thomas Bowditch <bowditch@inmet.com>
-Thomas Cont <tom@fr.uu.net>
+Thomas Conté <tom@fr.uu.net>
Thomas Dorner <Thomas.Dorner@start.de>
Thomas Kofler
-Thomas Knig
+Thomas König
Thomas Pfau <pfau@nbpfaus.net>
Thomas Wegner <wegner_thomas@yahoo.com>
Thorsten Glaser
@@ -1071,7 +1072,7 @@ Tony Cook <tony@develop-help.com>
Tony Sanders <sanders@bsdi.com>
Tor Lillqvist <tml@hemuli.tte.vtt.fi>
Torsten Foertsch <torsten.foertsch@gmx.net>
-Torsten Schnfeld <kaffeetisch@gmx.de>
+Torsten Schönfeld <kaffeetisch@gmx.de>
Trevor Blackwell <tlb@viaweb.com>
Tuomas J. Lukka <tjl@lukka.student.harvard.edu>
Tsutomu IKEGAMI <t-ikegami@aist.go.jp>
@@ -1082,7 +1083,7 @@ Ulrich Pfeifer <pfeifer@wait.de>
Vadim Konovalov <vkonovalov@lucent.com>
Valeriy E. Ushakov <uwe@ptc.spbu.ru>
Vernon Lyon <vlyon@cpan.org>
-Ville Skytt <scop@cs132170.pp.htv.fi>
+Ville Skyttä <scop@cs132170.pp.htv.fi>
Vincent Pit <perl@profvince.com>
Vishal Bhatia <vishal@deja.com>
Vlad Harchev <hvv@hippo.ru>
@@ -1097,7 +1098,7 @@ Warren Jones <wjones@tc.fluke.com>
Wayne Berke <berke@panix.com>
Wayne Scott <wscott@ichips.intel.com>
Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
-Wilfredo Snchez <wsanchez@mit.edu>
+Wilfredo Sánchez <wsanchez@mit.edu>
William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
William Mann <wmann@avici.com>
William Middleton <wmiddlet@adobe.com>
@@ -1105,7 +1106,7 @@ William R Ward <hermit@BayView.COM>
William Setzer <William_Setzer@ncsu.edu>
William Williams <biwillia@cisco.com>
William Yardley <perlbug@veggiechinese.net>
-Winfried Knig <win@in.rhein-main.de>
+Winfried König <win@in.rhein-main.de>
Wolfgang Laun <Wolfgang.Laun@alcatel.at>
Wolfram Humann <w.c.humann@arcor.de>
Xavier Noria <fxn@hashref.com>
@@ -1120,6 +1121,6 @@ Yuval Kogman <nothingmuch@woobling.org>
Yves Orton <demerphq@gmail.com>
Zachary Miller <zcmiller@simon.er.usgs.gov>
Zefram <zefram@fysh.org>
-Zsbn Ambrus <ambrus@math.bme.hu>
+Zsbán Ambrus <ambrus@math.bme.hu>
Zbynek Vyskovsky <kvr@centrum.cz>
-var Arnfjr Bjarmason <avar@cpan.org>
+Ævar Arnfjörð Bjarmason <avar@cpan.org>
diff --git a/Configure b/Configure
index d9911f941b..74450a95e6 100755
--- a/Configure
+++ b/Configure
@@ -28,7 +28,7 @@
# See Porting/pumpkin.pod for more information on metaconfig.
#
-# Generated on Mon Feb 14 23:00:18 CET 2011 [metaconfig 3.5 PL0]
+# Generated on Sun Jul 31 12:11:29 CEST 2011 [metaconfig 3.5 PL0]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
@@ -1194,6 +1194,8 @@ shsharp=''
spitshell=''
src=''
ssizetype=''
+st_ino_sign=''
+st_ino_size=''
startperl=''
startsh=''
stdchar=''
@@ -4071,77 +4073,6 @@ $undef$define) . ./whoa; eval "$var=\$tu";;
*) eval "$var=$val";;
esac'
-: Check is we will use socks
-case "$usesocks" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Perl can be built to use the SOCKS proxy protocol library. To do so,
-Configure must be run with -Dusesocks. If you use SOCKS you also need
-to use the PerlIO abstraction layer, this will be implicitly selected.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Build Perl for SOCKS?'
-. ./myread
-case "$ans" in
-y|Y) val="$define" ;;
-*) val="$undef" ;;
-esac
-set usesocks
-eval $setvar
-
-case "$usesocks" in
-$define|true|[yY]*) useperlio="$define";;
-esac
-
-: Check if we want perlio
-case "$useperlio" in
-$define|true|[yY]*|'') dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Previous version of $package used the standard IO mechanisms as
-defined in <stdio.h>. Versions 5.003_02 and later of $package allow
-alternate IO mechanisms via the PerlIO abstraction layer, but the
-stdio mechanism is still available if needed. The abstraction layer
-can use AT&T's sfio (if you already have sfio installed) or regular stdio.
-Using PerlIO with sfio may cause problems with some extension modules.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Use the PerlIO abstraction layer?'
-. ./myread
-case "$ans" in
-y|Y)
- val="$define"
- ;;
-*)
- echo "Ok, doing things the stdio way."
- val="$undef"
- ;;
-esac
-set useperlio
-eval $setvar
-
-case "$usesocks" in
-$define|true|[yY]*)
- case "$useperlio" in
- $define|true|[yY]*) ;;
- *) cat >&4 <<EOM
-
-You are using the SOCKS proxy protocol library which means that you
-should also use the PerlIO layer. You may be headed for trouble.
-
-EOM
- ;;
- esac
- ;;
-esac
-
: get the patchlevel
echo " "
echo "Getting the current patchlevel..." >&4
@@ -4201,13 +4132,8 @@ $define|true|[yY]*) dflt='y';;
*) # Catch case where user specified ithreads or 5005threads but
# forgot -Dusethreads (A.D. 4/2002)
case "$useithreads$use5005threads" in
- *$define*)
- case "$useperlio" in
- "$define") dflt='y' ;;
- *) dflt='n' ;;
- esac
- ;;
- *) dflt='n';;
+ *$define*) dflt='y';;
+ *) dflt='n';;
esac
;;
esac
@@ -4309,16 +4235,6 @@ EOM
useithreads="$usethreads"
fi
-if test X"$usethreads" = "X$define" -a "X$useperlio" = "Xundef"; then
- cat >&4 <<EOF
-***
-*** To build with ithreads you must also use the PerlIO layer.
-*** Cannot continue, aborting.
-***
-EOF
- exit 1
-fi
-
case "$d_oldpthreads" in
'') : Configure tests would be welcome here. For now, assume undef.
val="$undef" ;;
@@ -4894,6 +4810,28 @@ case "$firstmakefile" in
'') firstmakefile='makefile';;
esac
+: Check is we will use socks
+case "$usesocks" in
+$define|true|[yY]*) dflt='y';;
+*) dflt='n';;
+esac
+cat <<EOM
+
+Perl can be built to use the SOCKS proxy protocol library. To do so,
+Configure must be run with -Dusesocks. If you use SOCKS you also need
+to use the PerlIO abstraction layer, this will be implicitly selected.
+
+If this doesn't make any sense to you, just accept the default '$dflt'.
+EOM
+rp='Build Perl for SOCKS?'
+. ./myread
+case "$ans" in
+y|Y) val="$define" ;;
+*) val="$undef" ;;
+esac
+set usesocks
+eval $setvar
+
: Check for uselongdouble support
case "$ccflags" in
*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
@@ -6135,21 +6073,6 @@ $define)
esac
;;
esac
-case "$useperlio" in
-$define)
- echo "Perlio selected." >&4
- ;;
-*)
- echo "Perlio not selected, using stdio." >&4
- case "$archname" in
- *-stdio*) echo "...and architecture name already has -stdio." >&4
- ;;
- *) archname="$archname-stdio"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
-esac
if $test -f archname.cbu; then
echo "Your platform has some specific hints for architecture name, using them..."
. ./archname.cbu
@@ -9410,6 +9333,9 @@ EOCP
;;
esac
+: Check if we want perlio
+useperlio="$define"
+
: Set the vendorbin variables
case "$vendorprefix" in
'') d_vendorbin="$undef"
@@ -17364,17 +17290,10 @@ $define)
*) dflt='n';;
esac
echo "$package can use the sfio library, but it is experimental."
- case "$useperlio" in
- "$undef")
- echo "For sfio also the PerlIO abstraction layer is needed."
- echo "Earlier you said you wouldn't want that."
- ;;
- esac
rp="You seem to have sfio available, do you want to try using it?"
. ./myread
case "$ans" in
- y|Y) echo "Ok, turning on both sfio and PerlIO, then."
- useperlio="$define"
+ y|Y) echo "Ok, turning on sfio then."
val="$define"
;;
*) echo "Ok, avoiding sfio this time. I'll use stdio instead."
@@ -21200,6 +21119,74 @@ EOM
fi
$rm_try
+: Check the size of st_ino
+$echo " "
+$echo "Checking the size of st_ino..." >&4
+$cat > try.c <<EOCP
+#include <sys/stat.h>
+#include <stdio.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main() {
+ struct stat st;
+ printf("%d\n", (int)sizeof(st.st_ino));
+ exit(0);
+}
+EOCP
+set try
+if eval $compile_ok; then
+ val=`$run ./try`
+ case "$val" in
+ '') st_ino_size=4
+ $echo "(I can't execute the test program--guessing $st_ino_size.)" >&4
+ ;;
+ *) st_ino_size=$val
+ $echo "Your st_ino is $st_ino_size bytes long."
+ ;;
+ esac
+else
+ st_ino_size=4
+ $echo "(I can't compile the test program--guessing $st_ino_size.)" >&4
+fi
+$rm_try
+
+: Check if st_ino is signed
+$echo " "
+$echo "Checking the sign of st_ino..." >&4
+$cat > try.c <<EOCP
+#include <sys/stat.h>
+#include <stdio.h>
+int main() {
+ struct stat foo;
+ foo.st_ino = -1;
+ if (foo.st_ino < 0)
+ printf("-1\n");
+ else
+ printf("1\n");
+}
+EOCP
+set try
+if eval $compile; then
+ val=`$run ./try`
+ case "$val" in
+ '') st_ino_sign=1
+ $echo "(I can't execute the test program--guessing unsigned.)" >&4
+ ;;
+ *) st_ino_sign=$val
+ case "$st_ino_sign" in
+ 1) $echo "Your st_ino is unsigned." ;;
+ -1) $echo "Your st_ino is signed." ;;
+ esac
+ ;;
+ esac
+else
+ st_ino_sign=1
+ $echo "(I can't compile the test program--guessing unsigned.)" >&4
+fi
+$rm_try
+
: see what type of char stdio uses.
echo " "
echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
@@ -23360,6 +23347,8 @@ srand48_r_proto='$srand48_r_proto'
srandom_r_proto='$srandom_r_proto'
src='$src'
ssizetype='$ssizetype'
+st_ino_sign='$st_ino_sign'
+st_ino_size='$st_ino_size'
startperl='$startperl'
startsh='$startsh'
static_ext='$static_ext'
@@ -23485,16 +23474,16 @@ if $test -f UU/config.sh; then
$sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \
config.sh config.sh UU/oldconfig.sh |\
$sort | $uniq -u >UU/oldsyms
- set X `cat UU/oldsyms`
+ set X `$cat UU/oldsyms`
shift
case $# in
0) ;;
*)
- cat <<EOM
+ $cat <<EOM
Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
EOM
echo ": Variables propagated from previous config.sh file." >>config.sh
- for sym in `cat UU/oldsyms`; do
+ for sym in `$cat UU/oldsyms`; do
echo " Propagating $hint variable "'$'"$sym..."
eval 'tmp="$'"${sym}"'"'
echo "$tmp" | \
diff --git a/Cross/config.sh-arm-linux b/Cross/config.sh-arm-linux
index 8e72449a02..04624202a7 100644
--- a/Cross/config.sh-arm-linux
+++ b/Cross/config.sh-arm-linux
@@ -977,6 +977,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
stdio_filbuf=''
stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/MANIFEST b/MANIFEST
index d3e5632e0a..8e999d7ca4 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -288,6 +288,7 @@ cpan/CPAN/lib/CPAN/Distrostatus.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/Exception/blocked_urllist.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/Exception/RecursiveDependency.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm helper package for CPAN.pm
+cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/FirstTime.pm Utility for creating CPAN config files
cpan/CPAN/lib/CPAN/FTP/netrc.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/FTP.pm helper package for CPAN.pm
@@ -1689,10 +1690,13 @@ cpan/Module-Load/t/to_load/Must/Be/Loaded.pm Module::Load tests
cpan/Module-Load/t/to_load/TestModule.pm Module::Load tests
cpan/Module-Load/t/to_load/ToBeLoaded Module::Load tests
cpan/Module-Metadata/lib/Module/Metadata.pm
+cpan/Module-Metadata/t/lib/0_1/Foo.pm
+cpan/Module-Metadata/t/lib/0_2/Foo.pm
cpan/Module-Metadata/t/lib/DistGen.pm
cpan/Module-Metadata/t/lib/MBTest.pm
cpan/Module-Metadata/t/lib/Tie/CPHash.pm
cpan/Module-Metadata/t/metadata.t
+cpan/Module-Metadata/t/version.t
cpan/Module-Pluggable/lib/Devel/InnerPackage.pm Find inner packages
cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm Module::Pluggable
cpan/Module-Pluggable/lib/Module/Pluggable.pm Module::Pluggable
@@ -4416,7 +4420,6 @@ pod/perlcall.pod Perl calling conventions from C
pod/perlcheat.pod Perl cheat sheet
pod/perlclib.pod Internal replacements for standard C library functions
pod/perlcommunity.pod Perl community information
-pod/perlcompile.pod Perl compiler suite intro
pod/perldata.pod Perl data structures
pod/perldbmfilter.pod Perl DBM filters
pod/perldebguts.pod Perl debugging guts and tips
@@ -4428,6 +4431,7 @@ pod/perldsc.pod Perl data structures intro
pod/perldtrace.pod Perl's support for DTrace
pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms
pod/perlembed.pod Perl ways to embed perl in your C or C++ application
+pod/perlexperiment.pod A listing of experimental features in Perl
pod/perlfilter.pod Perl source filters
pod/perlfork.pod Perl fork() information
pod/perlform.pod Perl formats
@@ -4524,6 +4528,7 @@ Porting/corelist.pl Generates data for Module::CoreList
Porting/curliff.pl Curliff or liff your curliffable files.
Porting/epigraphs.pod the release epigraphs used over the years
Porting/exec-bit.txt List of files that get +x in release tarball
+Porting/exercise_makedef.pl Brute force testing for makedef.pl
Porting/expand-macro.pl A tool to expand C macro definitions in the Perl source
Porting/findrfuncs Find reentrant variants of functions used in an executable
Porting/findvars Find occurrences of words
@@ -4912,6 +4917,7 @@ t/op/concat2.t Tests too complex for concat.t
t/op/concat.t See if string concatenation works
t/op/cond.t See if conditional expressions work
t/op/context.t See if context propagation works
+t/op/coreinline.t Test inlining of \&CORE::subs
t/op/cproto.t Check builtin prototypes
t/op/crypt.t See if crypt works
t/op/dbm.t See if dbmopen/dbmclose work
diff --git a/Makefile.SH b/Makefile.SH
index 714d78c202..b1045624d9 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -749,8 +749,11 @@ else
case "$dtrace_h" in
?*)
$spitshell >>$Makefile <<'!NO!SUBS!'
+# dtrace dicards const qualifiers from arguments, put them back
$(DTRACE_H): perldtrace.d
- $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H)
+ $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H).in
+ sed -e '/const/!s/char \*/const char */g' $(DTRACE_H).in >$(DTRACE_H)
+ $(RMS) $(DTRACE_H).in
mydtrace.h: $(DTRACE_H)
diff --git a/NetWare/config.wc b/NetWare/config.wc
index 2c2d1aafa4..e0cd3005d9 100644
--- a/NetWare/config.wc
+++ b/NetWare/config.wc
@@ -942,6 +942,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/NetWare/interface.c b/NetWare/interface.c
index 0788e3aab8..2cdadca2fa 100644
--- a/NetWare/interface.c
+++ b/NetWare/interface.c
@@ -126,10 +126,10 @@ int RunPerl(int argc, char **argv, char **env)
PerlInterpreter *new_perl = NULL; // defined in Perl.h
#ifdef PERL_GLOBAL_STRUCT
- #define PERLVAR(var,type)
- #define PERLVARA(var,type)
- #define PERLVARI(var,type,init) PL_Vars.var = init;
- #define PERLVARIC(var,type,init) PL_Vars.var = init;
+ #define PERLVAR(prefix,var,type)
+ #define PERLVARA(prefix,var,type)
+ #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
+ #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
#include "perlvars.h"
diff --git a/NetWare/interface.cpp b/NetWare/interface.cpp
index b0f3cb3328..47fef6709c 100644
--- a/NetWare/interface.cpp
+++ b/NetWare/interface.cpp
@@ -120,10 +120,10 @@ int RunPerl(int argc, char **argv, char **env)
//__asm{int 3};
#ifdef PERL_GLOBAL_STRUCT
- #define PERLVAR(var,type)
- #define PERLVARA(var,type)
- #define PERLVARI(var,type,init) PL_Vars.var = init;
- #define PERLVARIC(var,type,init) PL_Vars.var = init;
+ #define PERLVAR(prefix,var,type)
+ #define PERLVARA(prefix,var,type)
+ #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
+ #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
#include "perlvars.h"
diff --git a/Porting/Glossary b/Porting/Glossary
index 1826f818c6..9134dfa1b6 100644
--- a/Porting/Glossary
+++ b/Porting/Glossary
@@ -4750,6 +4750,13 @@ ssizetype (ssizetype.U):
of bytes or an error condition. It must be a signed type.
We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+st_ino_sign (st_ino_def.U):
+ This variable contains the signedness of struct stat's st_ino.
+ 1 for unsigned, -1 for signed.
+
+st_ino_size (st_ino_def.U):
+ This variable contains the size of struct stat's st_ino in bytes.
+
startperl (startperl.U):
This variable contains the string to put on the front of a perl
script to make sure (hopefully) that it runs with perl and not some
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index 5ef5521862..dcaa2bc562 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -334,7 +334,7 @@ use File::Glob qw(:case);
'bignum' =>
{
'MAINTAINER' => 'rafl',
- 'DISTRIBUTION' => 'FLORA/bignum-0.28.tar.gz',
+ 'DISTRIBUTION' => 'FLORA/bignum-0.29.tar.gz',
'FILES' => q[dist/bignum],
'EXCLUDED' => [ qr{^inc/Module/}, qw(t/pod.t t/pod_cov.t) ],
'UPSTREAM' => 'blead',
@@ -415,7 +415,7 @@ use File::Glob qw(:case);
'CPAN' =>
{
'MAINTAINER' => 'andk',
- 'DISTRIBUTION' => 'ANDK/CPAN-1.9600.tar.gz',
+ 'DISTRIBUTION' => 'ANDK/CPAN-1.9800.tar.gz',
'FILES' => q[cpan/CPAN],
'EXCLUDED' => [ qr{^distroprefs/},
qr{^inc/Test/},
@@ -493,7 +493,7 @@ use File::Glob qw(:case);
'CPAN::Meta' =>
{
'MAINTAINER' => 'dagolden',
- 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.110930.tar.gz',
+ 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.112150.tar.gz',
'FILES' => q[cpan/CPAN-Meta],
'EXCLUDED' => [
qr/^xt/,
@@ -524,7 +524,7 @@ use File::Glob qw(:case);
'DB_File' =>
{
'MAINTAINER' => 'pmqs',
- 'DISTRIBUTION' => 'PMQS/DB_File-1.822.tar.gz',
+ 'DISTRIBUTION' => 'PMQS/DB_File-1.824.tar.gz',
'FILES' => q[cpan/DB_File],
'EXCLUDED' => [ qr{^patches/},
qw{ t/pod.t
@@ -625,7 +625,7 @@ use File::Glob qw(:case);
'Encode' =>
{
'MAINTAINER' => 'dankogai',
- 'DISTRIBUTION' => 'DANKOGAI/Encode-2.43.tar.gz',
+ 'DISTRIBUTION' => 'DANKOGAI/Encode-2.44.tar.gz',
'FILES' => q[cpan/Encode],
'UPSTREAM' => 'cpan',
},
@@ -731,7 +731,7 @@ use File::Glob qw(:case);
'ExtUtils::MakeMaker' =>
{
'MAINTAINER' => 'mschwern',
- 'DISTRIBUTION' => 'MSCHWERN/ExtUtils-MakeMaker-6.58.tar.gz',
+ 'DISTRIBUTION' => 'MSTROUT/ExtUtils-MakeMaker-6.59.tar.gz',
'FILES' => q[cpan/ExtUtils-MakeMaker],
'EXCLUDED' => [ qr{^t/lib/Test/},
qr{^(bundled|my)/},
@@ -744,7 +744,7 @@ use File::Glob qw(:case);
'ExtUtils::Manifest' =>
{
'MAINTAINER' => 'p5p',
- 'DISTRIBUTION' => 'RKOBES/ExtUtils-Manifest-1.58.tar.gz',
+ 'DISTRIBUTION' => 'FLORA/ExtUtils-Manifest-1.59.tar.gz',
'FILES' => q[dist/ExtUtils-Manifest],
'UPSTREAM' => 'blead',
},
@@ -752,7 +752,7 @@ use File::Glob qw(:case);
'ExtUtils::ParseXS' =>
{
'MAINTAINER' => 'smueller',
- 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.00_05.tar.gz',
+ 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.03.tar.gz',
'FILES' => q[dist/ExtUtils-ParseXS],
'UPSTREAM' => 'blead',
},
@@ -1262,7 +1262,7 @@ use File::Glob qw(:case);
'Module::Load' =>
{
'MAINTAINER' => 'kane',
- 'DISTRIBUTION' => 'BINGOS/Module-Load-0.18.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Module-Load-0.20.tar.gz',
'FILES' => q[cpan/Module-Load],
'UPSTREAM' => 'cpan',
},
@@ -1286,9 +1286,9 @@ use File::Glob qw(:case);
'Module::Metadata' =>
{
'MAINTAINER' => 'dagolden',
- 'DISTRIBUTION' => 'DAGOLDEN/Module-Metadata-1.000004.tar.gz',
+ 'DISTRIBUTION' => 'DAGOLDEN/Module-Metadata-1.000005.tar.gz',
'FILES' => q[cpan/Module-Metadata],
- 'EXCLUDED' => [ ],
+ 'EXCLUDED' => [ qr{^maint}, qr{^xt} ],
'UPSTREAM' => 'cpan',
},
@@ -1372,7 +1372,7 @@ use File::Glob qw(:case);
'Params::Check' =>
{
'MAINTAINER' => 'kane',
- 'DISTRIBUTION' => 'BINGOS/Params-Check-0.30.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Params-Check-0.32.tar.gz',
'EXCLUDED' => [ qw( Params-Check-0.26.tar.gz ) ],
'FILES' => q[cpan/Params-Check],
'UPSTREAM' => 'cpan',
@@ -1666,7 +1666,7 @@ use File::Glob qw(:case);
'Storable' =>
{
'MAINTAINER' => 'ams',
- 'DISTRIBUTION' => 'AMS/Storable-2.29.tar.gz',
+ 'DISTRIBUTION' => 'AMS/Storable-2.30.tar.gz',
'FILES' => q[dist/Storable],
'EXCLUDED' => [ qr{^t/Test/} ],
'UPSTREAM' => 'blead',
@@ -2003,7 +2003,7 @@ use File::Glob qw(:case);
'version' =>
{
'MAINTAINER' => 'jpeacock',
- 'DISTRIBUTION' => 'JPEACOCK/version-0.88.tar.gz',
+ 'DISTRIBUTION' => 'JPEACOCK/version-0.93.tar.gz',
'FILES' => q[lib/version.pm lib/version.pod lib/version.t
lib/version],
'EXCLUDED' => [ qr{^t/.*\.t$}, qw{t/survey_locales}, qr{^vutil/},
diff --git a/Porting/bump-perl-version b/Porting/bump-perl-version
index 5b6e199590..a0b83110f3 100644
--- a/Porting/bump-perl-version
+++ b/Porting/bump-perl-version
@@ -183,7 +183,7 @@ my @maps = (
qr{\b ((?:lib)?) perl (\d\d\d) (s?) \b }x,
sub {$2, "$1perl$newx$newy$3" },
"$oldx$oldy",
- qr/makedef|win32|hints/, # makedef.pl, README.win32, win32/*, hints/*
+ qr/win32|hints/, # README.win32, win32/*, hints/*
],
# microperl locations should be bumped for major versions
diff --git a/Porting/checkAUTHORS.pl b/Porting/checkAUTHORS.pl
index 1dfa3622c6..d59e41aa3f 100755
--- a/Porting/checkAUTHORS.pl
+++ b/Porting/checkAUTHORS.pl
@@ -212,7 +212,7 @@ sub read_authors_files {
my (%count, %raw);
foreach my $filename (@authors) {
open FH, "<$filename" or die "Can't open $filename: $!";
- binmode FH, ':encoding(ISO-8859-1)';
+ binmode FH, ':encoding(UTF-8)';
while (<FH>) {
next if /^\#/;
next if /^-- /;
@@ -649,6 +649,7 @@ kane\100dwim.org kane\100xs4all.net
+ kane\100xs4all.nl
+ jos\100dwim.org
+ jib\100ripe.net
+keith.s.thompson\100gmail.com kst\100mib.org
ken\100mathforum.org kenahoo\100gmail.com
+ ken.williams\100thomsonreuters.com
kroepke\100dolphin-services.de kay\100dolphin-services.de
diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl
index 0ee7ddbf76..f0800851d9 100755
--- a/Porting/checkcfgvar.pl
+++ b/Porting/checkcfgvar.pl
@@ -1,6 +1,5 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
-#
# Check that the various config.sh-clones have (at least) all the
# same symbols as the top-level config_h.SH so that the (potentially)
# needed symbols are not lagging after how Configure thinks the world
@@ -11,12 +10,26 @@
#
use strict;
+use warnings;
+use autodie;
+
+sub usage
+{
+ my $err = shift and select STDERR;
+ print "usage: $0 [--list]\n";
+ exit $err;
+ } # usage
+
+use Getopt::Long;
+my $opt_l = 0;
+GetOptions (
+ "help|?" => sub { usage (0); },
+ "l|list!" => \$opt_l,
+ ) or usage (1);
my $MASTER_CFG = "config_h.SH";
-my %MASTER_CFG;
my @CFG = (
- # This list contains both 5.8.x and 5.9.x files,
# we check from MANIFEST whether they are expected to be present.
# We can't base our check on $], because that's the version of the
# perl that we are running, not the version of the source tree.
@@ -25,9 +38,8 @@ my @CFG = (
"NetWare/config.wc",
"symbian/config.sh",
"uconfig.sh",
+ "uconfig64.sh",
"plan9/config_sh.sample",
- "vos/config.alpha.def",
- "vos/config.ga.def",
"win32/config.bc",
"win32/config.gc",
"win32/config.gc64",
@@ -39,79 +51,74 @@ my @CFG = (
"Porting/config.sh",
);
-sub read_file {
- my ($fn, $sub) = @_;
- if (open(my $fh, $fn)) {
- local $_;
- while (<$fh>) {
- &$sub;
- }
- } else {
- die "$0: Failed to open '$fn' for reading: $!\n";
- }
-}
-
-sub config_h_SH_reader {
- my $cfg = shift;
- return sub {
+my @MASTER_CFG;
+{
+ my %seen;
+ open my $fh, '<', $MASTER_CFG;
+ while (<$fh>) {
while (/[^\\]\$([a-z]\w+)/g) {
my $v = $1;
next if $v =~ /^(CONFIG_H|CONFIG_SH)$/;
- $cfg->{$v}++;
+ $seen{$v}++;
}
}
+ close $fh;
+ @MASTER_CFG = sort keys %seen;
}
-read_file($MASTER_CFG,
- config_h_SH_reader(\%MASTER_CFG));
-
my %MANIFEST;
-read_file("MANIFEST",
- sub {
- $MANIFEST{$1}++ if /^(.+?)\t/;
- });
-
-my @MASTER_CFG = sort keys %MASTER_CFG;
-
-sub check_cfg {
- my ($fn, $cfg) = @_;
- for my $v (@MASTER_CFG) {
- print "$fn: missing '$v'\n" unless exists $cfg->{$v};
+{
+ open my $fh, '<', 'MANIFEST';
+ while (<$fh>) {
+ $MANIFEST{$1}++ if /^(.+?)\t/;
}
+ close $fh;
}
-for my $cfg (@CFG) {
+for my $cfg (sort @CFG) {
unless (exists $MANIFEST{$cfg}) {
print STDERR "[skipping not-expected '$cfg']\n";
next;
}
my %cfg;
- read_file($cfg,
- sub {
- return if /^\#/ || /^\s*$/ || /^\:/;
- if ($cfg eq 'configure.com') {
- s/(\s*!.*|\s*)$//; # remove trailing comments or whitespace
- return if ! /^\$\s+WC "(\w+)='(.*)'"$/;
- }
- # foo='bar'
- # foo=bar
- # $foo='bar' # VOS 5.8.x specialty
- # $foo=bar # VOS 5.8.x specialty
- if (/^\$?(\w+)='(.*)'$/) {
- $cfg{$1}++;
- }
- elsif (/^\$?(\w+)=(.*)$/) {
- $cfg{$1}++;
- }
- elsif (/^\$\s+WC "(\w+)='(.*)'"$/) {
- $cfg{$1}++;
- } else {
- warn "$cfg:$.:$_";
- }
- });
+
+ open my $fh, '<', $cfg;
+ while (<$fh>) {
+ next if /^\#/ || /^\s*$/ || /^\:/;
+ if ($cfg eq 'configure.com') {
+ s/(\s*!.*|\s*)$//; # remove trailing comments or whitespace
+ next if ! /^\$\s+WC "(\w+)='(.*)'"$/;
+ }
+ # foo='bar'
+ # foo=bar
+ if (/^(\w+)='(.*)'$/) {
+ $cfg{$1}++;
+ }
+ elsif (/^(\w+)=(.*)$/) {
+ $cfg{$1}++;
+ }
+ elsif (/^\$\s+WC "(\w+)='(.*)'"$/) {
+ $cfg{$1}++;
+ } else {
+ warn "$cfg:$.:$_";
+ }
+ }
+ close $fh;
+
if ($cfg eq 'configure.com') {
$cfg{startperl}++; # Cheat.
}
- check_cfg($cfg, \%cfg);
+
+ my $problems;
+ for my $v (@MASTER_CFG) {
+ exists $cfg{$v} and next;
+ if ($opt_l) {
+ # print the name once, for the first problem we encounter.
+ print "$cfg\n" unless $problems++;
+ }
+ else {
+ print "$cfg: missing '$v'\n";
+ }
+ }
}
diff --git a/Porting/config.sh b/Porting/config.sh
index 4e3c8d3b13..99a909722f 100644
--- a/Porting/config.sh
+++ b/Porting/config.sh
@@ -999,6 +999,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
stdio_filbuf=''
stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/Porting/exercise_makedef.pl b/Porting/exercise_makedef.pl
new file mode 100644
index 0000000000..35881920d5
--- /dev/null
+++ b/Porting/exercise_makedef.pl
@@ -0,0 +1,92 @@
+#!./miniperl -w
+use strict;
+use Config;
+use 5.012;
+die "Can't fork" unless $Config{d_fork};
+
+# Brute force testing for makedef.pl
+#
+# To use this...
+#
+# Before modifying makedef.pl, create your golden results:
+#
+# $ mkdir Gold
+# $ ./perl -Ilib Porting/exercise_makedef.pl Gold/
+# $ chmod -R -w Gold/
+# $ mkdr Test
+#
+# then modify makedef.pl
+#
+# then test
+#
+# $ ./perl -Ilib Porting/exercise_makedef.pl Test
+# $ diff -rpu Gold Test
+
+my $prefix = shift;
+die "$0 prefix" unless $prefix;
+die "No such directory $prefix" unless -d $prefix;
+
+my @unlink;
+sub END {
+ unlink @unlink;
+}
+
+$SIG{INT} = sub { die }; # Trigger END processing
+
+{
+ # needed for OS/2, so fake one up
+ my $mpm = 'miniperl.map';
+
+ die "$mpm exists" if -e $mpm;
+
+ open my $in, '<', 'av.c' or die "Can't open av.c: $!";
+ push @unlink, $mpm;
+ open my $out, '>', $mpm or die "Can't open $mpm: $!";
+ while (<$in>) {
+ print $out "f $1\n" if /^(Perl_[A-Za-z_0-9]+)\(pTHX/;
+ }
+ close $out or die "Can't close $mpm: $!";
+}
+
+my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 wince os2 netware vms)],
+ cflags => ['', 'CCFLAGS=-Dperl=rules -Dzzz'],
+ Deq => ['', '-Dbeer=foamy'],
+ D => ['', '-DPERL_IMPLICIT_SYS'],
+ cctype => ['', map {"CCTYPE=$_"} qw (MSVC60 GCC BORLAND)],
+ filetype => ['', 'FILETYPE=def', 'FILETYPE=imp'],
+ );
+
+sub expand {
+ my ($names, $args, $key, $vals, @rest) = @_;
+ if (defined $key) {
+ my $bad;
+ while (my ($i, $v) = each @$vals) {
+ $bad += expand([@$names, "$key=$i"], [@$args, $v], @rest);
+ }
+ return $bad;
+ }
+ # time to process something:
+ my $name = join ',', @$names;
+ my @args = grep {length} @$args;
+
+ $ENV{PERL5LIB} = join $Config{path_sep}, @INC;
+ my $pid = fork;
+ unless ($pid) {
+ open STDOUT, '>', "$prefix/$name.out"
+ or die "Can't open $prefix/$name.out: $!";
+ open STDERR, '>', "$prefix/$name.err"
+ or die "Can't open $prefix/$name.err: $!";
+ exec $^X, 'makedef.pl', @args;
+ die "Something went horribly wrong: $!";
+ }
+ die "Bad waitpid: $!" unless waitpid $pid, 0 == $pid;
+ if ($?) {
+ print STDERR "`$^X makedef.pl @args` failed with $?\n";
+ print STDERR "See output in $prefix/$name.err\n";
+ return 1;
+ }
+ return 0;
+}
+
+my $bad = expand([], [], @args);
+exit($bad > 255 ? 255 : $bad);
diff --git a/README.hpux b/README.hpux
index 4af901f0c2..7bd4b93299 100644
--- a/README.hpux
+++ b/README.hpux
@@ -634,6 +634,27 @@ bug seems to be to create add to the file F</etc/nsswitch.conf>
Whether you are using NIS does not matter. Amazingly enough,
the same bug also affects Solaris.
+=head1 error: pasting ")" and "l" does not give a valid preprocessing token
+
+There seems to be a broken system header file in HP-UX 11.00 that
+breaks perl building in 32bit mode with GNU gcc-4.x causing this
+error. The same file for HP-UX 11.11 (even though the file is older)
+does not show this failure, and has the correct definition, so the
+best fix is to patch the header to match:
+
+ --- /usr/include/inttypes.h 2001-04-20 18:42:14 +0200
+ +++ /usr/include/inttypes.h 2000-11-14 09:00:00 +0200
+ @@ -72,7 +72,7 @@
+ #define UINT32_C(__c) __CONCAT_U__(__c)
+ #else /* __LP64 */
+ #define INT32_C(__c) __CONCAT__(__c,l)
+ -#define UINT32_C(__c) __CONCAT__(__CONCAT_U__(__c),l)
+ +#define UINT32_C(__c) __CONCAT__(__c,ul)
+ #endif /* __LP64 */
+
+ #define INT64_C(__c) __CONCAT_L__(__c,l)
+
+
=head1 Miscellaneous
HP-UX 11 Y2K patch "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000
@@ -650,8 +671,4 @@ Jeff Okamoto <okamoto@corp.hp.com>
With much assistance regarding shared libraries from Marc Sabatella.
-=head1 DATE
-
-Version 0.8.3: 2008-06-24
-
=cut
diff --git a/XSUB.h b/XSUB.h
index 5b5e3c81d2..630fe7c4dd 100644
--- a/XSUB.h
+++ b/XSUB.h
@@ -50,6 +50,15 @@ Used to access elements on the XSUB's stack.
Macro to declare an XSUB and its C parameter list. This is handled by
C<xsubpp>.
+=for apidoc AmU||XS_INTERNAL
+Macro to declare an XSUB and its C parameter list without exporting the symbols.
+This is handled by C<xsubpp> and generally preferable over exporting the XSUB
+symbols unnecessarily. This is handled by C<xsubpp>.
+
+=for apidoc AmU||XS_EXTERNAL
+Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
+This is handled by C<xsubpp>.
+
=for apidoc Ams||dAX
Sets up the C<ax> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -107,27 +116,52 @@ is a lexical $_ in scope.
* Don't forget to change the __attribute__unused__ version of XS()
* below too if you change XSPROTO() here.
*/
-#define XSPROTO(name) void name(pTHX_ CV* cv)
+
+/* XSPROTO_INTERNAL and XS_INTERNAL are the static-linkage variants
+ * of the default XSPROTO/XS macros. They are enabled by
+ * a special XS verb that is still tbd.
+ *
+ * XSPROTO_EXTERNAL/XS_EXTERNAL are (for now) exactly the same as
+ * XSPROTO/XS, but if the default wrt. linkage changes in future, they
+ * will allow users to explicitly mark XSUBs for exporting their
+ * symbols.
+ */
+
+#define XSPROTO_EXTERNAL(name) void name(pTHX_ CV* cv)
+#define XSPROTO_INTERNAL(name) STATIC void name(pTHX_ CV* cv)
+#define XSPROTO(name) XSPROTO_EXTERNAL(name)
#undef XS
+#undef XS_EXTERNAL
+#undef XS_INTERNAL
#if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
-# define XS(name) __declspec(dllexport) XSPROTO(name)
+# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO_EXTERNAL(name)
+# define XS_INTERNAL(name) __declspec(dllexport) XSPROTO_INTERNAL(name)
#endif
#if defined(__SYMBIAN32__)
-# define XS(name) EXPORT_C XSPROTO(name)
+# define XS_EXTERNAL(name) EXPORT_C XSPROTO_EXTERNAL(name)
+# define XS_INTERNAL(name) EXPORT_C XSPROTO_INTERNAL(name)
#endif
-#ifndef XS
+#ifndef XS_EXTERNAL
# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
-# define XS(name) void name(pTHX_ CV* cv __attribute__unused__)
+# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
+# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
# else
# ifdef __cplusplus
-# define XS(name) extern "C" XSPROTO(name)
+# define XS_EXTERNAL(name) extern "C" XSPROTO_EXTERNAL(name)
+# define XS_INTERNAL(name) extern "C" XSPROTO_INTERNAL(name)
# else
-# define XS(name) XSPROTO(name)
+# define XS_EXTERNAL(name) XSPROTO_EXTERNAL(name)
+# define XS_INTERNAL(name) XSPROTO_INTERNAL(name)
# endif
# endif
#endif
+/* We currently default to exporting XSUB symbols */
+#define XS(name) XS_EXTERNAL(name)
+/* Apparently needed for SWIG: */
+#define XSPROTO(name) XSPROTO_EXTERNAL(name)
+
#define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1)
#define dAXMARK \
diff --git a/autodoc.pl b/autodoc.pl
index 89b36df9b5..186ebd2411 100644
--- a/autodoc.pl
+++ b/autodoc.pl
@@ -197,7 +197,7 @@ removed without notice.\n\n" if $flags =~ /x/;
print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n(";
my $long_args;
for (@args) {
- if ($indent_size + 2 + length > 80) {
+ if ($indent_size + 2 + length > 79) {
$long_args=1;
$indent_size -= length($n) - 3;
last;
@@ -213,7 +213,7 @@ removed without notice.\n\n" if $flags =~ /x/;
while () {
if (!@args or
length $args
- && $indent_size + 3 + length($args[0]) + length $args > 80
+ && $indent_size + 3 + length($args[0]) + length $args > 79
) {
print $fh
$first ? '' : (
diff --git a/config_h.SH b/config_h.SH
index 2f3e5bdcb3..2903587a8e 100755
--- a/config_h.SH
+++ b/config_h.SH
@@ -4387,6 +4387,16 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
*/
#define SELECT_MIN_BITS $selectminbits /**/
+/* ST_INO_SIZE:
+ * This variable contains the size of struct stat's st_ino in bytes.
+ */
+/* ST_INO_SIGN:
+ * This symbol holds the signedess of struct stat's st_ino.
+ * 1 for unsigned, -1 for signed.
+ */
+#define ST_INO_SIGN $st_ino_sign /* st_ino sign */
+#define ST_INO_SIZE $st_ino_size /* st_ino size */
+
/* STARTPERL:
* This variable contains the string to put in front of a perl
* script to make sure (one hopes) that it runs with perl and not
diff --git a/configure.com b/configure.com
index 642d0bbc8b..3078bf646b 100644
--- a/configure.com
+++ b/configure.com
@@ -928,7 +928,7 @@ $ config_symbols0 ="|archlib|archlibexp|bin|binexp|builddir|cf_email|config_sh
$ config_symbols1 ="|installprivlib|installscript|installsitearch|installsitelib|most|oldarchlib|oldarchlibexp|osname|pager|perl_symbol|perl_verb|"
$ config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|"
$ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|uselongdouble|usemultiplicity|usemymalloc|usedebugging_perl|"
-$ config_symbols4 ="|useperlio|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
+$ config_symbols4 ="|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
$ config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthreads|useshortenedsymbols"
$!
$ open/read CONFIG 'config_sh'
@@ -3133,37 +3133,6 @@ $ GOTO Clean_up
$ ENDIF
$ ENDIF
$!
-$! PerlIO abstraction
-$!
-$ bool_dflt = "y"
-$ IF F$TYPE(useperlio) .NES. ""
-$ then
-$ if .not. useperlio .or. useperlio .eqs. "undef" then bool_dflt = "n"
-$ endif
-$ IF .NOT. silent
-$ THEN
-$ echo "Previous versions of ''package' used the standard IO mechanisms as"
-$ TYPE SYS$INPUT:
-$ DECK
-defined in <stdio.h>. Versions 5.003_02 and later of perl allow
-alternate IO mechanisms via the PerlIO abstraction layer, but the
-stdio mechanism is still available if needed. The abstraction layer
-can use AT&T's sfio (if you already have sfio installed) or regular stdio.
-Using PerlIO with sfio may cause problems with some extension modules.
-
-$ EOD
-$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'."
-$ ENDIF
-$ rp = "Use the PerlIO abstraction layer? [''bool_dflt'] "
-$ GOSUB myread
-$ IF ans
-$ THEN
-$ useperlio = "define"
-$ ELSE
-$ echo "Ok, doing things the stdio way."
-$ useperlio = "undef"
-$ ENDIF
-$!
$ echo ""
$ echo4 "Checking the C run-time library."
$!
@@ -3281,13 +3250,19 @@ $ THEN
$ uselongdouble = "define"
$ alignbytes="16"
$ nveformat="""Le"""
+$ nvEUformat="""LE"""
$ nvfformat="""Lf"""
+$ nvFUformat="""LF"""
$ nvgformat="""Lg"""
+$ nvGUformat="""LG"""
$ ELSE
$ uselongdouble = "undef"
$ nveformat="""e"""
+$ nvEUformat="""E"""
$ nvfformat="""f"""
+$ nvFUformat="""F"""
$ nvgformat="""g"""
+$ nvGUformat="""G"""
$ ENDIF
$ IF use64bitall .OR. use64bitall .EQS. "define"
$ THEN
@@ -3372,6 +3347,7 @@ $!
$ IF F$ELEMENT(0, "-", archname) .NES. "VMS_VAX"
$ THEN
$ d_PRId64 = "define"
+$ d_PRIi64 = "define"
$ d_PRIu64 = "define"
$ d_PRIo64 = "define"
$ d_PRIx64 = "define"
@@ -3392,6 +3368,7 @@ $ d_modfl = "define"
$ d_modflproto = "define"
$ ELSE
$ d_PRId64 = "undef"
+$ d_PRIi64 = "undef"
$ d_PRIXU64 = "undef"
$ d_PRIu64 = "undef"
$ d_PRIo64 = "undef"
@@ -4523,18 +4500,12 @@ $! THEN dflt = "y"
$! ELSE dflt = "n"
$! ENDIF
$! echo "''package' can use the sfio library, but it is experimental."
-$! IF useperlio .EQS. "undef"
-$! THEN
-$! echo "For sfio also the PerlIO abstraction layer is needed."
-$! echo "Earlier you said you would not want that."
-$! ENDIF
$! rp="You seem to have sfio available, do you want to try using it? [''dflt'] "
$! GOSUB myread
$! IF ans .EQS. "" THEN ans = dflt
$! IF ans
$! THEN
-$! echo "Ok, turning on both sfio and PerlIO, then."
-$! useperlio="define"
+$! echo "Ok, turning on sfio then."
$! val="define"
$! ELSE
$! echo "Ok, avoiding sfio this time. I'll use stdio instead."
@@ -5150,6 +5121,33 @@ $ echo4 "I'm disabling large file support."
$ uselargefiles = "undef"
$ ENDIF
$!
+$! Check for st_ino size.
+$!
+$ st_ino_size = 4
+$ OS
+$ WS "#include <sys/stat.h>"
+$ WS "#include <stdio.h>"
+$ WS "#if defined(__DECC) || defined(__DECCXX)"
+$ WS "#include <stdlib.h>
+$ WS "#endif"
+$ WS "int main() {
+$ WS "#''uselargefiles' _LARGEFILE"
+$ WS "#ifdef _LARGEFILE"
+$ WS " printf(""%d\n"", sizeof(__ino64_t));"
+$ WS "#else"
+$ WS " printf(""%d\n"", sizeof(unsigned short)*3);"
+$ WS "#endif"
+$ WS " exit(0);"
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF link_status .EQ. good_link
+$ THEN
+$ GOSUB just_mcr_it
+$ st_ino_size = tmp
+$ ENDIF
+$ echo "Your st_ino size is ''st_ino_size' bytes."
+$!
$! Tests for hard link, symbolic links, and 7.3 + CRTL features
$!
$ d_lchown = "undef"
@@ -5992,6 +5990,10 @@ $ WC "_exe='" + exe_ext + "'"
$ WC "_o='" + obj_ext + "'"
$ WC "alignbytes='" + alignbytes + "'"
$ WC "aphostname='write sys$output f$edit(f$getsyi(\""SCSNODE\""),\""TRIM,LOWERCASE\"")'"
+$ WC "api_revision='" + api_revision + "'"
+$ WC "api_subversion='" + api_subversion + "'"
+$ WC "api_version='" + api_version + "'"
+$ WC "api_versionstring='" + version + "'"
$ WC "ar='" + "'"
$ WC "archlib='" + archlib + "'"
$ WC "archlibexp='" + archlibexp + "'"
@@ -6043,14 +6045,15 @@ $ WC "d_Gconvert='sprintf((b),""%.*" + (nvgformat-"""") + ",(n),(x))'"
$ ELSE
$ WC "d_Gconvert='my_gconvert(x,n,t,b)'"
$ ENDIF
-$ WC "d_PRIEldbl='" + d_PRIEUldbl + "'"
-$ WC "d_PRIFldbl='" + d_PRIFUldbl + "'"
-$ WC "d_PRIGldbl='" + d_PRIGUldbl + "'"
+$ WC "d_PRIEUldbl='" + d_PRIEUldbl + "'"
+$ WC "d_PRIFUldbl='" + d_PRIFUldbl + "'"
+$ WC "d_PRIGUldbl='" + d_PRIGUldbl + "'"
$ WC "d_PRIXU64='" + d_PRIXU64 + "'"
$ WC "d_PRId64='" + d_PRId64 + "'"
$ WC "d_PRIeldbl='" + d_PRIeldbl + "'"
$ WC "d_PRIfldbl='" + d_PRIfldbl + "'"
$ WC "d_PRIgldbl='" + d_PRIgldbl + "'"
+$ WC "d_PRIi64='" + d_PRIi64 + "'"
$ WC "d_PRIo64='" + d_PRIo64 + "'"
$ WC "d_PRIu64='" + d_PRIu64 + "'"
$ WC "d_PRIx64='" + d_PRIx64 + "'"
@@ -6639,8 +6642,11 @@ $ WC "netdb_name_type='" + netdb_name_type + "'"
$ WC "netdb_net_type='" + netdb_net_type + "'"
$ WC/symbol "nonxs_ext='", nonxs_ext, " ", nonxs_ext2, "'"
$ WC "nveformat='" + nveformat + "'"
+$ WC "nvEUformat='" + nvEUformat + "'"
$ WC "nvfformat='" + nvfformat + "'"
+$ WC "nvFUformat='" + nvFUformat + "'"
$ WC "nvgformat='" + nvgformat + "'"
+$ WC "nvGUformat='" + nvGUformat + "'"
$ WC "nvsize='" + nvsize + "'"
$ WC "nvtype='" + nvtype + "'"
$ WC "o_nonblock=' '"
@@ -6685,14 +6691,14 @@ $ WC "sGMTIME_min='0'"
$ WC "sLOCALTIME_max='4294967295'"
$ WC "sLOCALTIME_min='0'"
$ WC "sPRId64='" + sPRId64 + "'"
-$ WC "sPRIEldbl='" + sPRIEUldbl + "'"
-$ WC "sPRIFldbl='" + sPRIFUldbl + "'"
-$ WC "sPRIGldbl='" + sPRIGUldbl + "'"
-$ WC "sPRIX64='" + sPRIXU64 + "'"
+$ WC "sPRIEUldbl='" + sPRIEUldbl + "'"
+$ WC "sPRIFUldbl='" + sPRIFUldbl + "'"
+$ WC "sPRIGUldbl='" + sPRIGUldbl + "'"
+$ WC "sPRIXU64='" + sPRIXU64 + "'"
$ WC "sPRIeldbl='" + sPRIeldbl + "'"
$ WC "sPRIfldbl='" + sPRIfldbl + "'"
$ WC "sPRIgldbl='" + sPRIgldbl + "'"
-$! WC "sPRIi64='" + sPRIi64 + "'"
+$ WC "sPRIi64='" + sPRIi64 + "'"
$ WC "sPRIo64='" + sPRIo64 + "'"
$ WC "sPRIu64='" + sPRIu64 + "'"
$ WC "sPRIx64='" + sPRIx64 + "'"
@@ -6746,6 +6752,8 @@ $ WC "src='" + src + "'"
$ WC "ssizetype='int'"
$ WC "startperl=" + startperl ! This one's special--no enclosing single quotes
$ WC "static_ext='" + static_ext + "'"
+$ WC "st_ino_size='" + st_ino_size + "'"
+$ WC "st_ino_sign='1'"
$ WC "stdchar='" + stdchar + "'"
$ WC "stdio_base='((*fp)->_base)'"
$ WC "stdio_bufsiz='((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)'"
@@ -6787,7 +6795,7 @@ $ WC "uselongdouble='" + uselongdouble + "'"
$ WC "usemorebits='" + usemorebits + "'"
$ WC "usemultiplicity='" + usemultiplicity + "'"
$ WC "usemymalloc='" + usemymalloc + "'"
-$ WC "useperlio='" + useperlio + "'"
+$ WC "useperlio='define'"
$ WC "useposix='false'"
$ WC "usereentrant='undef'"
$ WC "userelocatableinc='undef'"
diff --git a/cpan/CPAN-Meta/Changes b/cpan/CPAN-Meta/Changes
index e155cc391a..f91f71daae 100644
--- a/cpan/CPAN-Meta/Changes
+++ b/cpan/CPAN-Meta/Changes
@@ -1,5 +1,24 @@
Revision history for CPAN-Meta
+2.112150 2011-08-02 22:25:41 America/New_York
+
+ [BUGFIX]
+
+ - Stringify any objects encountered during conversion. (RT #67295)
+
+ - Fixed some broken URLs in documentation and for LGPL in legacy
+ conversion (RT #68738)
+
+ - Fixed invalid private Pod in CPAN::Meta::Validator (RT #65925)
+
+ [SPEC]
+
+ - Clarified that file paths in the 'provides' section must be in
+ Unix-style (i.e. forward slashes) (RT #69045)
+
+ - Replaced examples using Module::Build::ModuleInfo with Module::Metadata
+ (RT #66135)
+
2.110930 2011-04-02 23:31:24 America/New_York
[BUGFIX]
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta.pm b/cpan/CPAN-Meta/lib/CPAN/Meta.pm
index 5d53514992..36f26d80a7 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta.pm
@@ -2,10 +2,7 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta;
-BEGIN {
- $CPAN::Meta::VERSION = eval '2.110930_001';
-}
-# ABSTRACT: the distribution metadata for a CPAN dist
+our $VERSION = '2.112150'; # VERSION
use Carp qw(carp croak);
@@ -15,9 +12,7 @@ use CPAN::Meta::Converter;
use CPAN::Meta::Validator;
use Parse::CPAN::Meta 1.4400 ();
-sub _dclone {
- CPAN::Meta::Converter::_dclone(@_);
-}
+BEGIN { *_dclone = \&CPAN::Meta::Converter::_dclone }
BEGIN {
@@ -339,6 +334,8 @@ sub TO_JSON {
1;
+# ABSTRACT: the distribution metadata for a CPAN dist
+
=pod
@@ -349,7 +346,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 SYNOPSIS
@@ -644,6 +641,10 @@ particular keys may be retrieved with the C<custom> method.
If a custom key refers to a data structure, a deep clone is returned.
+=for Pod::Coverage TO_JSON abstract author authors custom custom_keys description dynamic_config
+generated_by keywords license licenses meta_spec name no_index
+optional_features prereqs provides release_status resources version
+
=head1 BUGS
Please report any bugs or feature using the CPAN Request Tracker.
@@ -667,6 +668,25 @@ L<CPAN::Meta::Validator>
=back
+=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders
+
+=head1 SUPPORT
+
+=head2 Bugs / Feature Requests
+
+Please report any bugs or feature requests by email to C<bug-cpan-meta at rt.cpan.org>, or through
+the web interface at L<http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta>. You will be automatically notified of any
+progress on the request by the system.
+
+=head2 Source Code
+
+This is open source software. The code repository is available for
+public review and contribution under the terms of the license.
+
+L<http://github.com/dagolden/cpan-meta>
+
+ git clone git://github.com/dagolden/cpan-meta.git
+
=head1 AUTHORS
=over 4
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
index 2ea3456426..9fedacba31 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
@@ -2,39 +2,29 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Converter;
-BEGIN {
- $CPAN::Meta::Converter::VERSION = eval '2.110930_001';
-}
-# ABSTRACT: Convert CPAN distribution metadata structures
+our $VERSION = '2.112150'; # VERSION
use CPAN::Meta::Validator;
use version 0.82 ();
use Parse::CPAN::Meta 1.4400 ();
-use Carp qw(croak);
sub _dclone {
my $ref = shift;
- # Work around JSON::PP's lack of a convert_blessed_universally
- local *UNIVERSAL::TO_JSON = sub {
- my $obj = shift;
-
- # Special case: stringify version objects
- # Everything else: serialize
- return $obj->isa("version") ? "$obj" :
- $obj->isa("HASH") ? { %$obj } :
- $obj->isa("ARRAY") ? { @$obj } :
- croak "Don't know how to serialize $obj";
- };
+ # if an object is in the data structure and doesn't specify how to
+ # turn itself into JSON, we just stringify the object. That does the
+ # right thing for typical things that might be there, like version objects,
+ # Path::Class objects, etc.
+ no warnings 'once';
+ local *UNIVERSAL::TO_JSON = sub { return "$_[0]" };
my $backend = Parse::CPAN::Meta->json_backend();
return $backend->new->decode(
- $backend->new->convert_blessed->allow_blessed->encode($ref)
+ $backend->new->allow_blessed->convert_blessed->encode($ref)
);
}
-
my %known_specs = (
'2' => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
'1.4' => 'http://module-build.sourceforge.net/META-spec-v1.4.html',
@@ -1258,6 +1248,8 @@ sub convert {
1;
+# ABSTRACT: Convert CPAN distribution metadata structures
+
=pod
@@ -1268,7 +1260,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 SYNOPSIS
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm
index d8258dcf58..fdec692cfe 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm
@@ -2,10 +2,7 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Feature;
-BEGIN {
- $CPAN::Meta::Feature::VERSION = '2.110930';
-}
-# ABSTRACT: an optional feature provided by a CPAN distribution
+our $VERSION = '2.112150'; # VERSION
use CPAN::Meta::Prereqs;
@@ -33,6 +30,8 @@ sub prereqs { $_[0]{prereqs} }
1;
+# ABSTRACT: an optional feature provided by a CPAN distribution
+
=pod
@@ -43,7 +42,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 DESCRIPTION
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm
index 9ccbfd4403..49a614b82d 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm
@@ -3,12 +3,12 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::History;
-BEGIN {
- $CPAN::Meta::History::VERSION = '2.110930';
-}
-# ABSTRACT: history of CPAN Meta Spec changes
+our $VERSION = '2.112150'; # VERSION
+
1;
+# ABSTRACT: history of CPAN Meta Spec changes
+
__END__
@@ -20,7 +20,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 DESCRIPTION
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm
index 29a2e5a2d5..5d1d1f0600 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm
@@ -2,10 +2,7 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Prereqs;
-BEGIN {
- $CPAN::Meta::Prereqs::VERSION = '2.110930';
-}
-# ABSTRACT: a set of distribution prerequisites by phase and type
+our $VERSION = '2.112150'; # VERSION
use Carp qw(confess);
@@ -140,6 +137,8 @@ sub clone {
1;
+# ABSTRACT: a set of distribution prerequisites by phase and type
+
=pod
@@ -150,7 +149,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 DESCRIPTION
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm
index b32fdac08a..c5f8213aee 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm
@@ -3,12 +3,12 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Spec;
-BEGIN {
- $CPAN::Meta::Spec::VERSION = '2.110930';
-}
-# ABSTRACT: specification for CPAN distribution metadata
+our $VERSION = '2.112150'; # VERSION
+
1;
+# ABSTRACT: specification for CPAN distribution metadata
+
__END__
@@ -20,7 +20,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 SYNOPSIS
@@ -664,8 +664,9 @@ the distribution. The values are Maps with the following valid subkeys:
=item file
-This field is required. The value must contain a relative file path
-from the root of the distribution to the module containing the package.
+This field is required. The value must contain a Unix-style relative
+file path from the root of the distribution to the module containing the
+package.
=item version
@@ -681,12 +682,12 @@ Example:
license => [ 'http://dev.perl.org/licenses/' ],
homepage => 'http://sourceforge.net/projects/module-build',
bugtracker => {
- web => 'http://github.com/dagolden/cpan-meta-spec/issues',
+ web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta',
mailto => 'meta-bugs@example.com',
},
repository => {
- url => 'git://github.com/dagolden/cpan-meta-spec.git',
- web => 'http://github.com/dagolden/cpan-meta-spec',
+ url => 'git://github.com/dagolden/cpan-meta.git',
+ web => 'http://github.com/dagolden/cpan-meta',
type => 'git',
},
x_twitter => 'http://twitter.com/cpan_linked/',
@@ -1028,10 +1029,10 @@ if both are found.
=head2 Extracting Version Numbers from Perl Modules
To get the version number from a Perl module, consumers should use the
-C<< MM->parse_version($file) >> method provided by L<ExtUtils::MakeMaker> or
-the L<Module::Build::ModuleInfo> module provided with L<Module::Build>. For
-example, for the module given by C<$mod>, the version may be retrieved in one
-of the following ways:
+C<< MM->parse_version($file) >> method provided by
+L<ExtUtils::MakeMaker> or L<Module::Metadata>. For example, for the
+module given by C<$mod>, the version may be retrieved in one of the
+following ways:
# via ExtUtils::MakeMaker
my $file = MM->_installed_file_for_module($mod);
@@ -1040,14 +1041,14 @@ of the following ways:
The private C<_installed_file_for_module> method may be replaced with
other methods for locating a module in C<@INC>.
- # via Module::Build
- my $info = Module::Build::ModuleInfo->new_from_module($mod);
+ # via Module::Metadata
+ my $info = Module::Metadata->new_from_module($mod);
my $version = $info->version;
If only a filename is available, the following approach may be used:
# via Module::Build
- my $info = Module::Build::ModuleInfo->new_from_file($file);
+ my $info = Module::Metadata->new_from_file($file);
my $version = $info->version;
=head2 Comparing Version Numbers
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm
index 819011cb09..b9f9868b65 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm
@@ -2,10 +2,7 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Validator;
-BEGIN {
- $CPAN::Meta::Validator::VERSION = '2.110930';
-}
-# ABSTRACT: validate CPAN distribution metadata structures
+our $VERSION = '2.112150'; # VERSION
#--------------------------------------------------------------------------#
@@ -692,7 +689,7 @@ my %v1_licenses = (
'apache' => 'http://apache.org/licenses/LICENSE-2.0',
'artistic' => 'http://opensource.org/licenses/artistic-license.php',
'artistic_2' => 'http://opensource.org/licenses/artistic-license-2.0.php',
- 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.phpt',
+ 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.php',
'bsd' => 'http://www.opensource.org/licenses/bsd-license.php',
'gpl' => 'http://www.opensource.org/licenses/gpl-license.php',
'mit' => 'http://opensource.org/licenses/mit-license.php',
@@ -829,6 +826,8 @@ sub _error {
1;
+# ABSTRACT: validate CPAN distribution metadata structures
+
=pod
@@ -839,7 +838,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures
=head1 VERSION
-version 2.110930
+version 2.112150
=head1 SYNOPSIS
@@ -881,87 +880,143 @@ is valid.
Returns a list of errors seen during validation.
-=begin internals
+=begin :internals
=head2 Check Methods
=over
-=item * check_map($spec,$data)
+=item *
+
+check_map($spec,$data)
Checks whether a map (or hash) part of the data structure conforms to the
appropriate specification definition.
-=item * check_list($spec,$data)
+
+=item *
+
+check_list($spec,$data)
Checks whether a list (or array) part of the data structure conforms to
the appropriate specification definition.
-=item * check_lazylist($spec,$data)
+
+=item *
+
+check_lazylist($spec,$data)
Checks whether a list conforms, but converts strings to a single-element list
+
=back
=head2 Validator Methods
=over
-=item * header($self,$key,$value)
+=item *
+
+header($self,$key,$value)
Validates that the header is valid.
-Note: No longer used as we now read the data structure, not the file.=item * url($self,$key,$value)
+Note: No longer used as we now read the data structure, not the file.
+
+=item *
+
+url($self,$key,$value)
Validates that a given value is in an acceptable URL format
-=item * urlspec($self,$key,$value)
+
+=item *
+
+urlspec($self,$key,$value)
Validates that the URL to a META specification is a known one.
-=item * string_or_undef($self,$key,$value)
+
+=item *
+
+string_or_undef($self,$key,$value)
Validates that the value is either a string or an undef value. Bit of a
catchall function for parts of the data structure that are completely user
defined.
-=item * string($self,$key,$value)
+
+=item *
+
+string($self,$key,$value)
Validates that a string exists for the given key.
-=item * file($self,$key,$value)
+
+=item *
+
+file($self,$key,$value)
Validate that a file is passed for the given key. This may be made more
thorough in the future. For now it acts like \&string.
-=item * exversion($self,$key,$value)
+
+=item *
+
+exversion($self,$key,$value)
Validates a list of versions, e.g. '<= 5, >=2, ==3, !=4, >1, <6, 0'.
-=item * version($self,$key,$value)
+
+=item *
+
+version($self,$key,$value)
Validates a single version string. Versions of the type '5.8.8' and '0.00_00'
are both valid. A leading 'v' like 'v1.2.3' is also valid.
-=item * boolean($self,$key,$value)
+
+=item *
+
+boolean($self,$key,$value)
Validates for a boolean value. Currently these values are '1', '0', 'true',
'false', however the latter 2 may be removed.
-=item * license($self,$key,$value)
+
+=item *
+
+license($self,$key,$value)
Validates that a value is given for the license. Returns 1 if an known license
type, or 2 if a value is given but the license type is not a recommended one.
-=item * custom_1($self,$key,$value)
+
+=item *
+
+custom_1($self,$key,$value)
Validates that the given key is in CamelCase, to indicate a user defined
keyword and only has characters in the class [-_a-zA-Z]. In version 1.X
of the spec, this was only explicitly stated for 'resources'.
-=item * custom_2($self,$key,$value)
+
+=item *
+
+custom_2($self,$key,$value)
Validates that the given key begins with 'x_' or 'X_', to indicate a user
defined keyword and only has characters in the class [-_a-zA-Z]
-=item * identifier($self,$key,$value)
+
+=item *
+
+identifier($self,$key,$value)
Validates that key is in an acceptable format for the META specification,
for an identifier, i.e. any that matches the regular expression
qr/[a-z][a-z_]/i.
-=item * module($self,$key,$value)
+
+=item *
+
+module($self,$key,$value)
Validates that a given key is in an acceptable module name format, e.g.
'Test::CPAN::Meta::Version'.
+
=back
-=end internals
+=end :internals
+
+=for Pod::Coverage anything boolean check_lazylist check_list custom_1 custom_2 exversion file
+identifier license module phase relation release_status string string_or_undef
+url urlspec version header check_map
=head1 BUGS
diff --git a/cpan/CPAN-Meta/t/converter.t b/cpan/CPAN-Meta/t/converter.t
index 5cd3e44e70..4bab817303 100644
--- a/cpan/CPAN-Meta/t/converter.t
+++ b/cpan/CPAN-Meta/t/converter.t
@@ -8,6 +8,20 @@ use CPAN::Meta::Converter;
use File::Spec;
use IO::Dir;
use Parse::CPAN::Meta 1.4400;
+use version;
+
+# mock file object
+package
+ File::StringObject;
+
+use overload q{""} => sub { ${$_[0]} }, fallback => 1;
+
+sub new {
+ my ($class, $file) = @_;
+ bless \$file, $class;
+}
+
+package main;
my $data_dir = IO::Dir->new( 't/data' );
my @files = sort grep { /^\w/ } $data_dir->read;
@@ -148,5 +162,16 @@ for my $f ( reverse sort @files ) {
);
}
-done_testing;
+# specific test for object conversion
+{
+ my $path = File::Spec->catfile('t','data','resources.yml');
+ my $original = Parse::CPAN::Meta->load_file( $path );
+ ok( $original, "loaded resources.yml" );
+ $original->{version} = version->new("1.64");
+ $original->{no_index}{file} = File::StringObject->new(".gitignore");
+ pass( "replaced some data fields with objects" );
+ my $cmc = CPAN::Meta::Converter->new( $original );
+ ok( my $converted = $cmc->convert( version => 2 ), "conversion successful" );
+}
+done_testing;
diff --git a/cpan/CPAN/Changes b/cpan/CPAN/Changes
index 0c1776a4e6..7c4e56ed90 100644
--- a/cpan/CPAN/Changes
+++ b/cpan/CPAN/Changes
@@ -1,3 +1,23 @@
+2011-08-07 Andreas J. Koenig <andk@cpan.org>
+
+ * release 1.9800
+
+ * RT #69463: fix memory leak in CacheMgr (Serguei Trouchelle)
+
+2011-06-27 Andreas J. Koenig <andk@cpan.org>
+
+ * release 1.97_51
+
+ * address #68835: Changed read_meta to ignore dynamic_config (David Golden)
+
+ * bugfix: refuse to store_persistent if the own build_dir is not
+ available (Andreas Koenig)
+
+ * cosmetics: remove "Going to" from the beginning of user-visible
+ strings (Jesse Vincent)
+
+ * flock adjustments for Win32 from activestate (Christian Walde)
+
2011-03-12 Andreas J. Koenig <andk@cpan.org>
* release 1.9600
diff --git a/cpan/CPAN/lib/App/Cpan.pm b/cpan/CPAN/lib/App/Cpan.pm
index cfc12908e5..0fce3d3ec1 100644
--- a/cpan/CPAN/lib/App/Cpan.pm
+++ b/cpan/CPAN/lib/App/Cpan.pm
@@ -19,11 +19,11 @@ App::Cpan - easily interact with CPAN from the command line
# use local::lib
cpan -l module_name [ module_name ... ]
-
+
# with just the dot, install from the distribution in the
# current directory
cpan .
-
+
# without arguments, starts CPAN.pm shell
cpan
@@ -73,7 +73,7 @@ to install a module even if its tests fail. When you use this option,
=item -F
-Turn off CPAN.pm's attempts to lock anything. You should be careful with
+Turn off CPAN.pm's attempts to lock anything. You should be careful with
this since you might end up with multiple scripts trying to muck in the
same directory. This isn't so much of a concern if you're loading a special
config with C<-j>, and that config sets up its own work directories.
@@ -105,7 +105,7 @@ Install the specified modules.
=item -j Config.pm
Load the file that has the CPAN configuration data. This should have the
-same format as the standard F<CPAN/Config.pm> file, which defines
+same format as the standard F<CPAN/Config.pm> file, which defines
C<$CPAN::Config> as an anonymous hash.
=item -J
@@ -188,27 +188,27 @@ use File::Basename;
use Getopt::Std;
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Internal constants
use constant TRUE => 1;
use constant FALSE => 0;
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# The return values
-use constant HEY_IT_WORKED => 0;
+use constant HEY_IT_WORKED => 0;
use constant I_DONT_KNOW_WHAT_HAPPENED => 1; # 0b0000_0001
use constant ITS_NOT_MY_FAULT => 2;
use constant THE_PROGRAMMERS_AN_IDIOT => 4;
use constant A_MODULE_FAILED_TO_INSTALL => 8;
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# set up the order of options that we layer over CPAN::Shell
BEGIN { # most of this should be in methods
use vars qw( @META_OPTIONS $Default %CPAN_METHODS @CPAN_OPTIONS @option_order
%Method_table %Method_table_index );
-
+
@META_OPTIONS = qw( h v g G C A D O l L a r j: J );
$Default = 'default';
@@ -227,7 +227,7 @@ $Default = 'default';
@option_order = ( @META_OPTIONS, @CPAN_OPTIONS );
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# map switches to the subroutines in this script, along with other information.
# use this stuff instead of hard-coded indices and values
sub NO_ARGS () { 0 }
@@ -249,7 +249,7 @@ sub GOOD_EXIT () { 0 }
# options that do their one thing
g => [ \&_download, NO_ARGS, GOOD_EXIT, 'Download the latest distro' ],
G => [ \&_gitify, NO_ARGS, GOOD_EXIT, 'Down and gitify the latest distro' ],
-
+
C => [ \&_show_Changes, ARGS, GOOD_EXIT, 'Showing Changes file' ],
A => [ \&_show_Author, ARGS, GOOD_EXIT, 'Showing Author' ],
D => [ \&_show_Details, ARGS, GOOD_EXIT, 'Showing Details' ],
@@ -278,7 +278,7 @@ sub GOOD_EXIT () { 0 }
);
}
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# finally, do some argument processing
sub _stupid_interface_hack_for_non_rtfmers
@@ -286,17 +286,17 @@ sub _stupid_interface_hack_for_non_rtfmers
no warnings 'uninitialized';
shift @ARGV if( $ARGV[0] eq 'install' and @ARGV > 1 )
}
-
+
sub _process_options
{
my %options;
-
+
# if no arguments, just drop into the shell
if( 0 == @ARGV ) { CPAN::shell(); exit 0 }
else
{
Getopt::Std::getopts(
- join( '', @option_order ), \%options );
+ join( '', @option_order ), \%options );
\%options;
}
}
@@ -304,7 +304,7 @@ sub _process_options
sub _process_setup_options
{
my( $class, $options ) = @_;
-
+
if( $options->{j} )
{
$Method_table{j}[ $Method_table_index{code} ]->( $options->{j} );
@@ -318,7 +318,7 @@ sub _process_setup_options
write_file => 0,
);
}
-
+
if( $options->{F} )
{
$Method_table{F}[ $Method_table_index{code} ]->( $options->{F} );
@@ -328,7 +328,7 @@ sub _process_setup_options
my $option_count = grep { $options->{$_} } @option_order;
no warnings 'uninitialized';
$option_count -= $options->{'f'}; # don't count force
-
+
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# if there are no options, set -i (this line fixes RT ticket 16915)
$options->{i}++ unless $option_count;
@@ -339,7 +339,7 @@ sub _process_setup_options
Just do it.
-The C<run> method returns 0 on success and a postive number on
+The C<run> method returns 0 on success and a postive number on
failure. See the section on EXIT CODES for details on the values.
=cut
@@ -367,10 +367,10 @@ sub run
$class->_process_setup_options( $options );
OPTION: foreach my $option ( @option_order )
- {
+ {
next unless $options->{$option};
- my( $sub, $takes_args, $description ) =
+ my( $sub, $takes_args, $description ) =
map { $Method_table{$option}[ $Method_table_index{$_} ] }
qw( code takes_args );
@@ -382,7 +382,7 @@ sub run
$logger->info( "$description -- ignoring other arguments" )
if( @ARGV && ! $takes_args );
-
+
$return_value = $sub->( \ @ARGV, $options );
last;
@@ -402,33 +402,33 @@ sub DESTROY { 1 }
sub _init_logger
{
my $log4perl_loaded = eval "require Log::Log4perl; 1";
-
+
unless( $log4perl_loaded )
{
$logger = Local::Null::Logger->new;
return $logger;
}
-
+
my $LEVEL = $ENV{CPANSCRIPT_LOGLEVEL} || 'INFO';
-
+
Log::Log4perl::init( \ <<"HERE" );
log4perl.rootLogger=$LEVEL, A1
log4perl.appender.A1=Log::Log4perl::Appender::Screen
log4perl.appender.A1.layout=PatternLayout
log4perl.appender.A1.layout.ConversionPattern=%m%n
HERE
-
+
$logger = Log::Log4perl->get_logger( 'App::Cpan' );
}
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
sub _default
{
my( $args, $options ) = @_;
-
+
my $switch = '';
# choose the option that we're going to use
@@ -458,12 +458,12 @@ sub _default
if( $options->{f} ) { sub { CPAN::Shell->force( $method, @_ ) } }
else { sub { CPAN::Shell->$method( @_ ) } }
};
-
+
# How do I handle exit codes for multiple arguments?
my $errors = 0;
-
- foreach my $arg ( @$args )
- {
+
+ foreach my $arg ( @$args )
+ {
_clear_cpanpm_output();
$action->( $arg );
@@ -473,7 +473,7 @@ sub _default
$errors ? I_DONT_KNOW_WHAT_HAPPENED : HEY_IT_WORKED;
}
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
=for comment
@@ -488,7 +488,7 @@ my $scalar = '';
sub _hook_into_CPANpm_report
{
no warnings 'redefine';
-
+
*CPAN::Shell::myprint = sub {
my($self,$what) = @_;
$scalar .= $what if defined $what;
@@ -500,15 +500,15 @@ sub _hook_into_CPANpm_report
*CPAN::Shell::mywarn = sub {
my($self,$what) = @_;
$scalar .= $what if defined $what;
- $self->print_ornamented($what,
+ $self->print_ornamented($what,
$CPAN::Config->{colorize_warn}||'bold red on_white'
);
};
}
-
+
sub _clear_cpanpm_output { $scalar = '' }
-
+
sub _get_cpanpm_output { $scalar }
BEGIN {
@@ -522,9 +522,9 @@ my @skip_lines = (
sub _get_cpanpm_last_line
{
open my($fh), "<", \ $scalar;
-
+
my @lines = <$fh>;
-
+
# This is a bit ugly. Once we examine a line, we have to
# examine the line before it and go through all of the same
# regexes. I could do something fancy, but this works.
@@ -538,9 +538,9 @@ sub _get_cpanpm_last_line
}
}
}
-
+
$logger->debug( "Last interesting line of CPAN.pm output is:\n\t$lines[-1]" );
-
+
$lines[-1];
}
}
@@ -548,28 +548,28 @@ sub _get_cpanpm_last_line
BEGIN {
my $epic_fail_words = join '|',
qw( Error stop(?:ping)? problems force not unsupported fail(?:ed)? );
-
+
sub _cpanpm_output_indicates_failure
{
my $last_line = _get_cpanpm_last_line();
-
+
my $result = $last_line =~ /\b(?:$epic_fail_words)\b/i;
$result || ();
}
}
-
+
sub _cpanpm_output_indicates_success
{
my $last_line = _get_cpanpm_last_line();
-
+
my $result = $last_line =~ /\b(?:\s+-- OK|PASS)\b/;
$result || ();
}
-
+
sub _cpanpm_output_is_vague
{
- return FALSE if
- _cpanpm_output_indicates_failure() ||
+ return FALSE if
+ _cpanpm_output_indicates_failure() ||
_cpanpm_output_indicates_success();
return TRUE;
@@ -577,24 +577,24 @@ sub _cpanpm_output_is_vague
}
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
sub _print_help
{
$logger->info( "Use perldoc to read the documentation" );
exec "perldoc $0";
}
-
+
sub _print_version
{
- $logger->info(
+ $logger->info(
"$0 script version $VERSION, CPAN.pm version " . CPAN->VERSION );
return HEY_IT_WORKED;
}
-
+
sub _create_autobundle
{
- $logger->info(
+ $logger->info(
"Creating autobundle in $CPAN::Config->{cpan_home}/Bundle" );
CPAN::Shell->autobundle;
@@ -621,24 +621,24 @@ sub _upgrade
}
sub _load_config # -j
- {
+ {
my $file = shift || '';
-
+
# should I clear out any existing config here?
$CPAN::Config = {};
delete $INC{'CPAN/Config.pm'};
croak( "Config file [$file] does not exist!\n" ) unless -e $file;
-
+
my $rc = eval "require '$file'";
# CPAN::HandleConfig::require_myconfig_or_config looks for this
$INC{'CPAN/MyConfig.pm'} = 'fake out!';
-
+
# CPAN::HandleConfig::load looks for this
$CPAN::Config_loaded = 'fake out';
-
+
croak( "Could not load [$file]: $@\n") unless $rc;
-
+
return HEY_IT_WORKED;
}
@@ -646,60 +646,60 @@ sub _dump_config
{
my $args = shift;
require Data::Dumper;
-
+
my $fh = $args->[0] || \*STDOUT;
-
- my $dd = Data::Dumper->new(
- [$CPAN::Config],
- ['$CPAN::Config']
+
+ my $dd = Data::Dumper->new(
+ [$CPAN::Config],
+ ['$CPAN::Config']
);
-
+
print $fh $dd->Dump, "\n1;\n__END__\n";
-
+
return HEY_IT_WORKED;
}
sub _lock_lobotomy
{
no warnings 'redefine';
-
+
*CPAN::_flock = sub { 1 };
*CPAN::checklock = sub { 1 };
return HEY_IT_WORKED;
}
-
+
sub _download
- {
+ {
my $args = shift;
-
+
local $CPAN::DEBUG = 1;
-
+
my %paths;
-
+
foreach my $module ( @$args )
{
$logger->info( "Checking $module" );
my $path = CPAN::Shell->expand( "Module", $module )->cpan_file;
-
+
$logger->debug( "Inst file would be $path\n" );
-
+
$paths{$module} = _get_file( _make_path( $path ) );
}
-
+
return \%paths;
}
sub _make_path { join "/", qw(authors id), $_[0] }
-
+
sub _get_file
{
my $path = shift;
-
+
my $loaded = eval "require LWP::Simple; 1;";
croak "You need LWP::Simple to use features that fetch files from CPAN\n"
unless $loaded;
-
+
my $file = substr $path, rindex( $path, '/' ) + 1;
my $store_path = catfile( cwd(), $file );
$logger->debug( "Store path is $store_path" );
@@ -717,13 +717,13 @@ sub _get_file
sub _gitify
{
my $args = shift;
-
+
my $loaded = eval "require Archive::Extract; 1;";
croak "You need Archive::Extract to use features that gitify distributions\n"
unless $loaded;
-
+
my $starting_dir = cwd();
-
+
foreach my $module ( @$args )
{
$logger->info( "Checking $module" );
@@ -731,23 +731,23 @@ sub _gitify
my $store_paths = _download( [ $module ] );
$logger->debug( "gitify Store path is $store_paths->{$module}" );
- my $dirname = dirname( $store_paths->{$module} );
-
+ my $dirname = dirname( $store_paths->{$module} );
+
my $ae = Archive::Extract->new( archive => $store_paths->{$module} );
$ae->extract( to => $dirname );
-
+
chdir $ae->extract_path;
-
+
my $git = $ENV{GIT_COMMAND} || '/usr/local/bin/git';
croak "Could not find $git" unless -e $git;
croak "$git is not executable" unless -x $git;
-
+
# can we do this in Pure Perl?
system( $git, 'init' );
system( $git, qw( add . ) );
system( $git, qw( commit -a -m ), 'initial import' );
}
-
+
chdir $starting_dir;
return HEY_IT_WORKED;
@@ -756,42 +756,42 @@ sub _gitify
sub _show_Changes
{
my $args = shift;
-
+
foreach my $arg ( @$args )
{
$logger->info( "Checking $arg\n" );
-
+
my $module = eval { CPAN::Shell->expand( "Module", $arg ) };
my $out = _get_cpanpm_output();
-
+
next unless eval { $module->inst_file };
#next if $module->uptodate;
-
+
( my $id = $module->id() ) =~ s/::/\-/;
-
+
my $url = "http://search.cpan.org/~" . lc( $module->userid ) . "/" .
$id . "-" . $module->cpan_version() . "/";
-
+
#print "URL: $url\n";
_get_changes_file($url);
}
return HEY_IT_WORKED;
- }
-
+ }
+
sub _get_changes_file
{
croak "Reading Changes files requires LWP::Simple and URI\n"
unless eval "require LWP::Simple; require URI; 1";
-
+
my $url = shift;
my $content = LWP::Simple::get( $url );
$logger->info( "Got $url ..." ) if defined $content;
#print $content;
-
+
my( $change_link ) = $content =~ m|<a href="(.*?)">Changes</a>|gi;
-
+
my $changes_url = URI->new_abs( $change_link, $url );
$logger->debug( "Change link is: $changes_url" );
@@ -801,11 +801,11 @@ sub _get_changes_file
return HEY_IT_WORKED;
}
-
+
sub _show_Author
- {
+ {
my $args = shift;
-
+
foreach my $arg ( @$args )
{
my $module = CPAN::Shell->expand( "Module", $arg );
@@ -814,29 +814,29 @@ sub _show_Author
$logger->info( "Didn't find a $arg module, so no author!" );
next;
}
-
+
my $author = CPAN::Shell->expand( "Author", $module->userid );
-
+
next unless $module->userid;
-
- printf "%-25s %-8s %-25s %s\n",
+
+ printf "%-25s %-8s %-25s %s\n",
$arg, $module->userid, $author->email, $author->fullname;
}
return HEY_IT_WORKED;
- }
+ }
sub _show_Details
{
my $args = shift;
-
+
foreach my $arg ( @$args )
{
my $module = CPAN::Shell->expand( "Module", $arg );
my $author = CPAN::Shell->expand( "Author", $module->userid );
-
+
next unless $module->userid;
-
+
print "$arg\n", "-" x 73, "\n\t";
print join "\n\t",
$module->description ? $module->description : "(no description)",
@@ -848,26 +848,26 @@ sub _show_Details
$author->fullname . " (" . $module->userid . ")",
$author->email;
print "\n\n";
-
+
}
-
+
return HEY_IT_WORKED;
- }
+ }
sub _show_out_of_date
{
my @modules = CPAN::Shell->expand( "Module", "/./" );
-
+
printf "%-40s %6s %6s\n", "Module Name", "Local", "CPAN";
print "-" x 73, "\n";
-
+
foreach my $module ( @modules )
{
next unless $module->inst_file;
next if $module->uptodate;
printf "%-40s %.4f %.4f\n",
- $module->id,
- $module->inst_version ? $module->inst_version : '',
+ $module->id,
+ $module->inst_version ? $module->inst_version : '',
$module->cpan_version;
}
@@ -879,71 +879,71 @@ sub _show_author_mods
my $args = shift;
my %hash = map { lc $_, 1 } @$args;
-
+
my @modules = CPAN::Shell->expand( "Module", "/./" );
-
+
foreach my $module ( @modules )
{
next unless exists $hash{ lc $module->userid };
print $module->id, "\n";
}
-
+
return HEY_IT_WORKED;
}
-
+
sub _list_all_mods
{
require File::Find;
-
+
my $args = shift;
-
-
+
+
my $fh = \*STDOUT;
-
+
INC: foreach my $inc ( @INC )
- {
+ {
my( $wanted, $reporter ) = _generator();
File::Find::find( { wanted => $wanted }, $inc );
-
+
my $count = 0;
FILE: foreach my $file ( @{ $reporter->() } )
{
my $version = _parse_version_safely( $file );
-
+
my $module_name = _path_to_module( $inc, $file );
next FILE unless defined $module_name;
-
+
print $fh "$module_name\t$version\n";
-
+
#last if $count++ > 5;
}
}
return HEY_IT_WORKED;
}
-
+
sub _generator
- {
+ {
my @files = ();
-
- sub { push @files,
- File::Spec->canonpath( $File::Find::name )
+
+ sub { push @files,
+ File::Spec->canonpath( $File::Find::name )
if m/\A\w+\.pm\z/ },
sub { \@files },
}
-
+
sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored
{
my( $file ) = @_;
-
+
local $/ = "\n";
local $_; # don't mess with the $_ in the map calling this
-
+
return unless open FILE, "<$file";
my $in_pod = 0;
my $version;
- while( <FILE> )
+ while( <FILE> )
{
chomp;
$in_pod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $in_pod;
@@ -951,22 +951,22 @@ sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored
next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/;
my( $sigil, $var ) = ( $1, $2 );
-
+
$version = _eval_version( $_, $sigil, $var );
last;
}
close FILE;
return 'undef' unless defined $version;
-
+
return $version;
}
sub _eval_version
{
my( $line, $sigil, $var ) = @_;
-
- my $eval = qq{
+
+ my $eval = qq{
package ExtUtils::MakeMaker::_version;
local $sigil$var;
@@ -974,7 +974,7 @@ sub _eval_version
$line
}; \$$var
};
-
+
my $version = do {
local $^W = 0;
no strict;
@@ -988,16 +988,16 @@ sub _path_to_module
{
my( $inc, $path ) = @_;
return if length $path< length $inc;
-
+
my $module_path = substr( $path, length $inc );
$module_path =~ s/\.pm\z//;
-
+
# XXX: this is cheating and doesn't handle everything right
my @dirs = grep { ! /\W/ } File::Spec->splitdir( $module_path );
shift @dirs;
-
+
my $module_name = join "::", @dirs;
-
+
return $module_name;
}
@@ -1007,7 +1007,7 @@ sub _path_to_module
=head1 EXIT VALUES
-The script exits with zero if it thinks that everything worked, or a
+The script exits with zero if it thinks that everything worked, or a
positive number if it thinks that something failed. Note, however, that
in some cases it has to divine a failure by the output of things it does
not control. For now, the exit codes are vague:
diff --git a/cpan/CPAN/lib/CPAN.pm b/cpan/CPAN/lib/CPAN.pm
index e36cf09e31..4e1f2a3018 100644
--- a/cpan/CPAN/lib/CPAN.pm
+++ b/cpan/CPAN/lib/CPAN.pm
@@ -2,7 +2,7 @@
# vim: ts=4 sts=4 sw=4:
use strict;
package CPAN;
-$CPAN::VERSION = '1.9600';
+$CPAN::VERSION = '1.9800';
$CPAN::VERSION =~ s/_//;
# we need to run chdir all over and we would get at wrong libraries
@@ -37,6 +37,7 @@ use CPAN::Shell;
use CPAN::LWP::UserAgent;
use CPAN::Exception::RecursiveDependency;
use CPAN::Exception::yaml_not_installed;
+use CPAN::Exception::yaml_process_error;
use Carp ();
use Config ();
@@ -1069,7 +1070,7 @@ sub has_usable {
# don't die, because we may need
# Archive::Tar to upgrade
}
-
+
}
},
],
@@ -1469,14 +1470,14 @@ mentioned four. Each of the four entities is implemented as a class
with slightly differing methods for displaying an object.
Arguments to these commands are either strings exactly matching
-the identification string of an object, or regular expressions
+the identification string of an object, or regular expressions
matched case-insensitively against various attributes of the
objects. The parser only recognizes a regular expression when you
enclose it with slashes.
The principle is that the number of objects found influences how an
item is displayed. If the search finds one item, the result is
-displayed with the rather verbose method C<as_string>, but if
+displayed with the rather verbose method C<as_string>, but if
more than one is found, each object is displayed with the terse method
C<as_glimpse>.
@@ -1588,7 +1589,7 @@ being executed within the distribution file's working directory.
C<readme> displays the README file of the associated distribution.
C<Look> gets and untars (if not yet done) the distribution file,
changes to the appropriate directory and opens a subshell process in
-that directory. C<perldoc> displays the module's pod documentation
+that directory. C<perldoc> displays the module's pod documentation
in html or plain text format.
=item C<ls> author
@@ -1699,8 +1700,11 @@ literal backslash.
C<autobundle> writes a bundle file into the
C<$CPAN::Config-E<gt>{cpan_home}/Bundle> directory. The file contains
a list of all modules that are both available from CPAN and currently
-installed within @INC. The name of the bundle file is based on the
-current date and a counter.
+installed within @INC. Duplicates of each distribution are suppressed.
+The name of the bundle file is based on the current date and a
+counter.
+
+Return value: path to the written file.
=head2 hosts
@@ -1718,10 +1722,35 @@ mkmyconfig() writes your own CPAN::MyConfig file into your C<~/.cpan/>
directory so that you can save your own preferences instead of the
system-wide ones.
+=head2 r [Module|/Regexp/]...
+
+scans current perl installation for modules that have a newer version
+available on CPAN and provides a list of them. If called without
+argument, all potential upgrades are listed; if called with arguments
+the list is filtered to the modules and regexps given as arguments.
+
+The listing looks something like this:
+
+ Package namespace installed latest in CPAN file
+ CPAN 1.94_64 1.9600 ANDK/CPAN-1.9600.tar.gz
+ CPAN::Reporter 1.1801 1.1902 DAGOLDEN/CPAN-Reporter-1.1902.tar.gz
+ YAML 0.70 0.73 INGY/YAML-0.73.tar.gz
+ YAML::Syck 1.14 1.17 AVAR/YAML-Syck-1.17.tar.gz
+ YAML::Tiny 1.44 1.50 ADAMK/YAML-Tiny-1.50.tar.gz
+ CGI 3.43 3.55 MARKSTOS/CGI.pm-3.55.tar.gz
+ Module::Build::YAML 1.40 1.41 DAGOLDEN/Module-Build-0.3800.tar.gz
+ TAP::Parser::Result::YAML 3.22 3.23 ANDYA/Test-Harness-3.23.tar.gz
+ YAML::XS 0.34 0.35 INGY/YAML-LibYAML-0.35.tar.gz
+
+It suppresses duplicates in the column C<in CPAN file> such that
+distributions with many upgradeable modules are listed only once.
+
+Note that the list is not sorted.
+
=head2 recent ***EXPERIMENTAL COMMAND***
The C<recent> command downloads a list of recent uploads to CPAN and
-displays them I<slowly>. While the command is running, a $SIG{INT}
+displays them I<slowly>. While the command is running, a $SIG{INT}
exits the loop after displaying the current item.
B<Note>: This command requires XML::LibXML installed.
@@ -1776,7 +1805,7 @@ approach will likely remain.
B<Note>: See also L<recent>
-=head2 upgrade [Module|/Regex/]...
+=head2 upgrade [Module|/Regexp/]...
The C<upgrade> command first runs an C<r> command with the given
arguments and then installs the newest versions of all modules that
@@ -1895,7 +1924,7 @@ Example:
o conf shell
If KEY starts and ends with a slash, the string in between is
-treated as a regular expression and only keys matching this regex
+treated as a regular expression and only keys matching this regexp
are displayed
Example:
@@ -1998,7 +2027,7 @@ currently defined:
inactivity_timeout breaks interactive Makefile.PLs or Build.PLs
after this many seconds inactivity. Set to 0 to
disable timeouts.
- index_expire refetch index files after this many days
+ index_expire refetch index files after this many days
inhibit_startup_message
if true, suppress the startup message
keep_source_where directory in which to keep the source (if we do)
@@ -2192,7 +2221,7 @@ randomness into the URL selection.
Since CPAN.pm version 1.88_51 modules declared as C<build_requires> by
a distribution are treated differently depending on the config
variable C<build_requires_install_policy>. By setting
-C<build_requires_install_policy> to C<no>, such a module is not
+C<build_requires_install_policy> to C<no>, such a module is not
installed. It is only built and tested, and then kept in the list of
tested but uninstalled modules. As such, it is available during the
build of the dependent module by integrating the path to the
@@ -2246,7 +2275,7 @@ temporarily override assorted C<CPAN.pm> configuration variables
=item
-specify dependencies the original maintainer forgot
+specify dependencies the original maintainer forgot
=item
@@ -2583,7 +2612,7 @@ needs. You have been warned:-)
=head1 PROGRAMMER'S INTERFACE
-If you do not enter the shell, shell commands are
+If you do not enter the shell, shell commands are
available both as methods (C<CPAN::Shell-E<gt>install(...)>) and as
functions in the calling package (C<install(...)>). Before calling low-level
commands, it makes sense to initialize components of CPAN you need, e.g.:
@@ -2596,9 +2625,20 @@ High-level commands do such initializations automatically.
There's currently only one class that has a stable interface -
CPAN::Shell. All commands that are available in the CPAN shell are
-methods of the class CPAN::Shell. Each of the commands that produce
-listings of modules (C<r>, C<autobundle>, C<u>) also return a list of
-the IDs of all modules within the list.
+methods of the class CPAN::Shell. The arguments on the commandline are
+passed as arguments to the method.
+
+So if you take for example the shell command
+
+ notest install A B C
+
+the actually executed command is
+
+ CPAN::Shell->notest("install","A","B","C");
+
+Each of the commands that produce listings of modules (C<r>,
+C<autobundle>, C<u>) also return a list of the IDs of all modules
+within the list.
=over 2
@@ -2650,7 +2690,7 @@ all modules that need updating. First a quick and dirty way:
If you don't want any output should all modules be
up to date, parse the output of above command for the regular
expression C</modules are up to date/> and decide to mail the output
-only if it doesn't match.
+only if it doesn't match.
If you prefer to do it more in a programmerish style in one single
process, something like this may better suit you:
@@ -2837,7 +2877,7 @@ cancellation can be avoided by letting C<force> run the C<install> for
you.
This install method only has the power to install the distribution if
-there are no dependencies in the way. To install an object along with all
+there are no dependencies in the way. To install an object along with all
its dependencies, use CPAN::Shell->install.
Note that install() gives no meaningful return value. See uptodate().
@@ -3231,7 +3271,7 @@ the software producing the indices on CPAN, the mirroring process on CPAN,
packaging, configuration, synchronicity, and even (gasp!) due to bugs
within the CPAN.pm module itself.
-For debugging the code of CPAN.pm itself in interactive mode, some
+For debugging the code of CPAN.pm itself in interactive mode, some
debugging aid can be turned on for most packages within
CPAN.pm with one of
@@ -3387,7 +3427,7 @@ Maintaining a bundle definition file means keeping track of two
things: dependencies and interactivity. CPAN.pm sometimes fails on
calculating dependencies because not all modules define all MakeMaker
attributes correctly, so a bundle definition file should specify
-prerequisites as early as possible. On the other hand, it's
+prerequisites as early as possible. On the other hand, it's
annoying that so many distributions need some interactive configuring. So
what you can try to accomplish in your private bundle file is to have the
packages that need to be configured early in the file and the gentle
@@ -3432,7 +3472,7 @@ need Net::FTP.
=item One-way visibility
-One-way visibility means these firewalls try to make themselves
+One-way visibility means these firewalls try to make themselves
invisible to users inside the firewall. An FTP data connection is
normally created by sending your IP address to the remote server and then
listening for the return connection. But the remote server will not be able to
diff --git a/cpan/CPAN/lib/CPAN/CacheMgr.pm b/cpan/CPAN/lib/CPAN/CacheMgr.pm
index b9b4eeb32b..23e756e75b 100644
--- a/cpan/CPAN/lib/CPAN/CacheMgr.pm
+++ b/cpan/CPAN/lib/CPAN/CacheMgr.pm
@@ -49,6 +49,7 @@ sub tidyup {
$self->_clean_cache($toremove);
return if $CPAN::Signal;
}
+ $self->{FIFO} = [];
}
#-> sub CPAN::CacheMgr::dir ;
diff --git a/cpan/CPAN/lib/CPAN/Distribution.pm b/cpan/CPAN/lib/CPAN/Distribution.pm
index b39e723fd2..32648ecc1f 100644
--- a/cpan/CPAN/lib/CPAN/Distribution.pm
+++ b/cpan/CPAN/lib/CPAN/Distribution.pm
@@ -158,7 +158,7 @@ sub tested_ok_but_not_installed {
||
$self->{install}->failed
)
- );
+ );
}
@@ -584,7 +584,8 @@ EOF
#-> sub CPAN::Distribution::pick_meta_file ;
sub pick_meta_file {
- my($self, $yaml) = @_;
+ my($self, $filter) = @_;
+ $filter = '.' unless defined $filter;
my $build_dir;
unless ($build_dir = $self->{build_dir}) {
@@ -602,7 +603,7 @@ sub pick_meta_file {
push @choices, 'META.json' if $has_cm;
push @choices, 'META.yml' if $has_cm || $has_pcm;
- for my $file ( @choices ) {
+ for my $file ( grep { /$filter/ } @choices ) {
my $path = File::Spec->catdir( $build_dir, $file );
return $path if -f $path
}
@@ -740,7 +741,7 @@ sub choose_MM_or_MB {
$prefer_installer = CPAN::HandleConfig->prefs_lookup(
$self, q{prefer_installer}
);
- # M::B <= 0.35 left a DATA handle open that
+ # M::B <= 0.35 left a DATA handle open that
# causes problems upgrading M::B on Windows
close *Module::Build::Version::DATA
if fileno *Module::Build::Version::DATA;
@@ -776,6 +777,12 @@ sub choose_MM_or_MB {
sub store_persistent_state {
my($self) = @_;
my $dir = $self->{build_dir};
+ unless (defined $dir && length $dir) {
+ my $id = $self->id;
+ $CPAN::Frontend->mywarnonce("build_dir of $id is not known, ".
+ "will not store persistent state\n");
+ return;
+ }
unless (File::Spec->canonpath(File::Basename::dirname($dir))
eq File::Spec->canonpath($CPAN::Config->{build_dir})) {
$CPAN::Frontend->mywarnonce("Directory '$dir' not below $CPAN::Config->{build_dir}, ".
@@ -858,7 +865,7 @@ sub try_download {
}
}
my $countedpatches = @$patches == 1 ? "1 patch" : (scalar @$patches . " patches");
- $CPAN::Frontend->myprint("Going to apply $countedpatches:\n");
+ $CPAN::Frontend->myprint("Applying $countedpatches:\n");
my $patches_dir = $CPAN::Config->{patches_dir};
for my $patch (@$patches) {
if ($patches_dir && !File::Spec->file_name_is_absolute($patch)) {
@@ -1844,7 +1851,7 @@ is part of the perl-%s distribution. To install that, you need to run
delete $self->{force_update};
return;
}
- $CPAN::Frontend->myprint("\n CPAN.pm: Going to build ".$self->id."\n\n");
+ $CPAN::Frontend->myprint("\n CPAN.pm: Building ".$self->id."\n\n");
$self->debug("Changed directory to $builddir") if $CPAN::DEBUG;
if ($^O eq 'MacOS') {
@@ -2843,8 +2850,7 @@ sub _fulfills_all_version_rqs {
}
#-> sub CPAN::Distribution::read_meta
-# read any sort of meta files, return CPAN::Meta object if no errors and
-# dynamic_config = 0
+# read any sort of meta files, return CPAN::Meta object if no errors
sub read_meta {
my($self) = @_;
my $meta_file = $self->pick_meta_file
@@ -2862,9 +2868,6 @@ sub read_meta {
return if $eummv < 6.2501;
}
- # META/MYMETA is only authoritative if dynamic_config is false
- return if $meta->dynamic_config;
-
return $meta;
}
@@ -2889,8 +2892,8 @@ sub read_yaml {
if $CPAN::DEBUG;
$self->debug($yaml) if $CPAN::DEBUG && $yaml;
# MYMETA.yml is static and authoritative by definition
- if ( $meta_file =~ /MYMETA\.yml/ ) {
- return $yaml;
+ if ( $meta_file =~ /MYMETA\.yml/ ) {
+ return $yaml;
}
# META.yml is authoritative only if dynamic_config is defined and false
if ( defined $yaml->{dynamic_config} && ! $yaml->{dynamic_config} ) {
@@ -2903,7 +2906,7 @@ sub read_yaml {
#-> sub CPAN::Distribution::configure_requires ;
sub configure_requires {
my($self) = @_;
- return unless my $meta_file = $self->pick_meta_file;
+ return unless my $meta_file = $self->pick_meta_file('^META');
if (my $meta_obj = $self->read_meta) {
my $prereqs = $meta_obj->effective_prereqs;
my $cr = $prereqs->requirements_for(qw/configure requires/);
@@ -2929,7 +2932,9 @@ sub prereq_pm {
$self->{modulebuild}||"",
) if $CPAN::DEBUG;
my($req,$breq);
- if (my $meta_obj = $self->read_meta) {
+ my $meta_obj = $self->read_meta;
+ # META/MYMETA is only authoritative if dynamic_config is false
+ if ($meta_obj && ! $meta_obj->dynamic_config) {
my $prereqs = $meta_obj->effective_prereqs;
my $requires = $prereqs->requirements_for(qw/runtime requires/);
my $build_requires = $prereqs->requirements_for(qw/build requires/);
@@ -3168,7 +3173,7 @@ sub test {
# bypass actual tests if "trust_test_report_history" and have a report
my $have_tested_fcn;
if ( $CPAN::Config->{trust_test_report_history}
- && $CPAN::META->has_inst("CPAN::Reporter::History")
+ && $CPAN::META->has_inst("CPAN::Reporter::History")
&& ( $have_tested_fcn = CPAN::Reporter::History->can("have_tested" ))) {
if ( my @reports = $have_tested_fcn->( dist => $self->base_id ) ) {
# Do nothing if grade was DISCARD
@@ -3288,43 +3293,43 @@ sub test {
sub _make_test_illuminate_prereqs {
my($self) = @_;
- my @prereq;
-
- # local $CPAN::DEBUG = 16; # Distribution
- for my $m (keys %{$self->{sponsored_mods}}) {
- next unless $self->{sponsored_mods}{$m} > 0;
- my $m_obj = CPAN::Shell->expand("Module",$m) or next;
- # XXX we need available_version which reflects
- # $ENV{PERL5LIB} so that already tested but not yet
- # installed modules are counted.
- my $available_version = $m_obj->available_version;
- my $available_file = $m_obj->available_file;
- if ($available_version &&
- !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m})
- ) {
- CPAN->debug("m[$m] good enough available_version[$available_version]")
- if $CPAN::DEBUG;
- } elsif ($available_file
- && (
- !$self->{prereq_pm}{$m}
- ||
- $self->{prereq_pm}{$m} == 0
- )
- ) {
- # lex Class::Accessor::Chained::Fast which has no $VERSION
- CPAN->debug("m[$m] have available_file[$available_file]")
- if $CPAN::DEBUG;
- } else {
- push @prereq, $m;
- }
- }
+ my @prereq;
+
+ # local $CPAN::DEBUG = 16; # Distribution
+ for my $m (keys %{$self->{sponsored_mods}}) {
+ next unless $self->{sponsored_mods}{$m} > 0;
+ my $m_obj = CPAN::Shell->expand("Module",$m) or next;
+ # XXX we need available_version which reflects
+ # $ENV{PERL5LIB} so that already tested but not yet
+ # installed modules are counted.
+ my $available_version = $m_obj->available_version;
+ my $available_file = $m_obj->available_file;
+ if ($available_version &&
+ !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m})
+ ) {
+ CPAN->debug("m[$m] good enough available_version[$available_version]")
+ if $CPAN::DEBUG;
+ } elsif ($available_file
+ && (
+ !$self->{prereq_pm}{$m}
+ ||
+ $self->{prereq_pm}{$m} == 0
+ )
+ ) {
+ # lex Class::Accessor::Chained::Fast which has no $VERSION
+ CPAN->debug("m[$m] have available_file[$available_file]")
+ if $CPAN::DEBUG;
+ } else {
+ push @prereq, $m;
+ }
+ }
my $but;
- if (@prereq) {
- my $cnt = @prereq;
- my $which = join ",", @prereq;
+ if (@prereq) {
+ my $cnt = @prereq;
+ my $which = join ",", @prereq;
$but = $cnt == 1 ? "one dependency not OK ($which)" :
- "$cnt dependencies missing ($which)";
- }
+ "$cnt dependencies missing ($which)";
+ }
$but;
}
@@ -3670,7 +3675,7 @@ sub perldoc {
$CPAN::Frontend->myprint(qq{
Function system("@args")
returned status $estatus (wstat $wstatus)
- });
+ });
}
}
else {
diff --git a/cpan/CPAN/lib/CPAN/Distroprefs.pm b/cpan/CPAN/lib/CPAN/Distroprefs.pm
index e1be9cdf74..61c389ed2d 100644
--- a/cpan/CPAN/lib/CPAN/Distroprefs.pm
+++ b/cpan/CPAN/lib/CPAN/Distroprefs.pm
@@ -169,7 +169,7 @@ sub find {
file => $_, ext => $ext, dir => $dir
});
# copied from CPAN.pm; is this ever actually possible?
- redo unless -f $result->abs;
+ redo unless -f $result->abs;
my $load_method = $self->_load_method($loader, $result);
my @prefs = eval { $self->$load_method($loader, $result) };
@@ -314,7 +314,7 @@ __END__
CPAN::Distroprefs -- read and match distroprefs
-=head1 SYNOPSIS
+=head1 SYNOPSIS
use CPAN::Distroprefs;
@@ -381,7 +381,7 @@ All results share some common attributes:
C<success>, C<warning>, or C<fatal>
-=head3 file
+=head3 file
the file from which these prefs were read, or to which this error refers (relative filename)
@@ -413,7 +413,7 @@ Success results contain:
an arrayref of CPAN::Distroprefs::Pref objects
-=head1 PREFS
+=head1 PREFS
CPAN::Distroprefs::Pref objects represent individual distroprefs documents.
They are constructed automatically as part of C<success> results from C<find()>.
diff --git a/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm b/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm
index e1259e5397..1e7fa83a53 100644
--- a/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm
+++ b/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm
@@ -20,54 +20,4 @@ sub as_string {
"'$self->{module}' not installed, cannot $self->{during} '$self->{file}'\n";
}
-package CPAN::Exception::yaml_process_error;
-use strict;
-use overload '""' => "as_string";
-
-use vars qw(
- $VERSION
-);
-$VERSION = "5.5";
-
-
-sub new {
- my($class,$module,$file,$during,$error) = @_;
- # my $at = Carp::longmess(""); # XXX find something more beautiful
- bless { module => $module,
- file => $file,
- during => $during,
- error => $error,
- # at => $at,
- }, $class;
-}
-
-sub as_string {
- my($self) = shift;
- if ($self->{during}) {
- if ($self->{file}) {
- if ($self->{module}) {
- if ($self->{error}) {
- return "Alert: While trying to '$self->{during}' YAML file\n".
- " '$self->{file}'\n".
- "with '$self->{module}' the following error was encountered:\n".
- " $self->{error}\n";
- } else {
- return "Alert: While trying to '$self->{during}' YAML file\n".
- " '$self->{file}'\n".
- "with '$self->{module}' some unknown error was encountered\n";
- }
- } else {
- return "Alert: While trying to '$self->{during}' YAML file\n".
- " '$self->{file}'\n".
- "some unknown error was encountered\n";
- }
- } else {
- return "Alert: While trying to '$self->{during}' some YAML file\n".
- "some unknown error was encountered\n";
- }
- } else {
- return "Alert: unknown error encountered\n";
- }
-}
-
1;
diff --git a/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm b/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm
new file mode 100644
index 0000000000..ae8c14ebeb
--- /dev/null
+++ b/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm
@@ -0,0 +1,53 @@
+# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
+# vim: ts=4 sts=4 sw=4:
+package CPAN::Exception::yaml_process_error;
+use strict;
+use overload '""' => "as_string";
+
+use vars qw(
+ $VERSION
+);
+$VERSION = "5.5";
+
+
+sub new {
+ my($class,$module,$file,$during,$error) = @_;
+ # my $at = Carp::longmess(""); # XXX find something more beautiful
+ bless { module => $module,
+ file => $file,
+ during => $during,
+ error => $error,
+ # at => $at,
+ }, $class;
+}
+
+sub as_string {
+ my($self) = shift;
+ if ($self->{during}) {
+ if ($self->{file}) {
+ if ($self->{module}) {
+ if ($self->{error}) {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "with '$self->{module}' the following error was encountered:\n".
+ " $self->{error}\n";
+ } else {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "with '$self->{module}' some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: While trying to '$self->{during}' some YAML file\n".
+ "some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: unknown error encountered\n";
+ }
+}
+
+1;
diff --git a/cpan/CPAN/lib/CPAN/FTP.pm b/cpan/CPAN/lib/CPAN/FTP.pm
index 4f233814e5..997e141be5 100644
--- a/cpan/CPAN/lib/CPAN/FTP.pm
+++ b/cpan/CPAN/lib/CPAN/FTP.pm
@@ -21,6 +21,11 @@ $VERSION = "5.5005";
sub _ftp_statistics {
my($self,$fh) = @_;
my $locktype = $fh ? LOCK_EX : LOCK_SH;
+ # XXX On Windows flock() implements mandatory locking, so we can
+ # XXX only use shared locking to still allow _yaml_load_file() to
+ # XXX read from the file using a different filehandle.
+ $locktype = LOCK_SH if $^O eq "MSWin32";
+
$fh ||= FileHandle->new;
my $file = File::Spec->catfile($CPAN::Config->{cpan_home},"FTPstats.yml");
mkpath dirname $file;
@@ -56,6 +61,7 @@ sub _ftp_statistics {
$CPAN::Frontend->mydie($@);
}
}
+ CPAN::_flock($fh, LOCK_UN);
return $stats->[0];
}
@@ -567,7 +573,7 @@ sub hostdleasy { #called from hostdlxxx
$ThesiteURL = $ro_url;
return $l;
}
- # If request is for a compressed file and we can find the
+ # If request is for a compressed file and we can find the
# uncompressed file also, return the path of the uncompressed file
# otherwise, decompress it and return the resulting path
if ($l =~ /(.+)\.gz$/) {
@@ -975,7 +981,7 @@ ftp config variable with
Trying with external ftp to get
'$url'
$netrc_explain
- Going to send the dialog
+ Sending the dialog
$dialog
}
);
@@ -1014,7 +1020,7 @@ $dialog
$CPAN::Frontend->myprint(qq{
Trying with external ftp to get
$url
- Going to send the dialog
+ Sending the dialog
$dialog
}
);
diff --git a/cpan/CPAN/lib/CPAN/FirstTime.pm b/cpan/CPAN/lib/CPAN/FirstTime.pm
index 667bdca2f9..5030ef9b83 100644
--- a/cpan/CPAN/lib/CPAN/FirstTime.pm
+++ b/cpan/CPAN/lib/CPAN/FirstTime.pm
@@ -202,8 +202,8 @@ Preferred method for determining the current working directory?
=item halt_on_failure
Normally, CPAN.pm continues processing the full list of targets and
-dependencies, even if one of them fails. However, you can specify
-that CPAN should halt after the first failure.
+dependencies, even if one of them fails. However, you can specify
+that CPAN should halt after the first failure.
Do you want to halt on failure (yes/no)?
@@ -339,7 +339,7 @@ Your choice:
Parameters for the './Build install' command? Typical frequently used
setting:
- --uninst 1 # uninstall conflicting files
+ --uninst 1 # uninstall conflicting files
# (but do NOT use with local::lib or INSTALL_BASE)
Your choice:
@@ -781,8 +781,8 @@ sub init {
if ( $args{autoconfig} ) {
$auto_config = 1;
} elsif ($matcher) {
- $auto_config = 0;
- } else {
+ $auto_config = 0;
+ } else {
my $_conf = prompt($prompts{auto_config}, "yes");
$auto_config = ($_conf and $_conf =~ /^y/i) ? 1 : 0;
}
@@ -795,7 +795,7 @@ sub init {
my $i_am_mad = 0;
# silent prompting -- just quietly use default
*_real_prompt = sub { return $_[1] };
- }
+ }
#
# bootstrap local::lib or sudo
@@ -993,8 +993,8 @@ sub init {
my_dflt_prompt(makepl_arg => "", $matcher);
my_dflt_prompt(make_arg => "", $matcher);
if ( $CPAN::Config->{makepl_arg} =~ /LIBS=|INC=/ ) {
- $CPAN::Frontend->mywarn(
- "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" .
+ $CPAN::Frontend->mywarn(
+ "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" .
"that specify their own LIBS or INC options in Makefile.PL.\n"
);
}
@@ -1224,9 +1224,9 @@ sub init {
);
}
else {
- $CPAN::Frontend->myprint(
- "Autoconfigured everything but 'urllist'.\n"
- );
+ $CPAN::Frontend->myprint(
+ "Autoconfigured everything but 'urllist'.\n"
+ );
_do_pick_mirrors();
}
}
@@ -1247,8 +1247,8 @@ sub init {
$CPAN::Frontend->myprint(
"Skipping local::lib bootstrap because 'urllist' is not configured.\n"
);
- }
- else {
+ }
+ else {
$CPAN::Frontend->myprint("\nAttempting to bootstrap local::lib...\n");
$CPAN::Frontend->myprint("\nWriting $configpm for bootstrap...\n");
delete $CPAN::Config->{install_help}; # temporary only
@@ -1268,11 +1268,11 @@ sub init {
$CPAN::Frontend->myprint("From the CPAN Shell, you might try 'look local::lib' and \n"
. "run 'perl Makefile --bootstrap' and see if that is successful. Then\n"
. "restart your CPAN client\n"
- );
+ );
}
else {
_local_lib_config();
- }
+ }
}
}
@@ -1515,7 +1515,7 @@ ALERT: 'make' is an essential tool for building perl Modules.
Please make sure you have 'make' (or some equivalent) working.
HERE
- if ($^O eq "MSWin32") {
+ if ($^O eq "MSWin32") {
$CPAN::Frontend->mywarn(<<"HERE");
Windows users may want to follow this procedure when back in the CPAN shell:
@@ -1528,7 +1528,7 @@ substitute. You can then revisit this dialog with
o conf init make
HERE
- }
+ }
}
sub init_cpan_home {
@@ -1657,7 +1657,7 @@ sub my_prompt_loop {
# (2) We don't have a copy at all
# (2a) If we are allowed to connect, we try to get a new copy. If it succeeds,
# we use it, otherwise, we warn about failure
-# (2b) If we aren't allowed to connect,
+# (2b) If we aren't allowed to connect,
sub conf_sites {
my %args = @_;
@@ -1732,7 +1732,7 @@ HERE
}
else {
$CPAN::Frontend->mywarn(<<'HERE');
-You will need to provide CPAN mirror URLs yourself or set
+You will need to provide CPAN mirror URLs yourself or set
'o conf connect_to_internet_ok 1' and try again.
HERE
}
@@ -1851,7 +1851,9 @@ sub auto_mirrored_by {
my $local = shift or return;
local $|=1;
$CPAN::Frontend->myprint("Looking for CPAN mirrors near you (please be patient)\n");
- my $mirrors = CPAN::Mirrors->new($local);
+ my $mirrors = CPAN::Mirrors->new;
+ $mirrors->parse_mirrored_by($local);
+
my $cnt = 0;
my @best = $mirrors->best_mirrors(
how_many => 3,
@@ -1860,9 +1862,11 @@ sub auto_mirrored_by {
if ($cnt++>60) { $cnt=0; $CPAN::Frontend->myprint("\n"); }
},
);
+
my $urllist = [ map { $_->http } @best ];
push @$urllist, grep { /^file:/ } @{$CPAN::Config->{urllist}};
$CPAN::Frontend->myprint(" done!\n\n");
+
return $urllist
}
@@ -1998,8 +2002,8 @@ later if you\'re sure it\'s right.\n},
sub _print_urllist {
my ($which) = @_;
$CPAN::Frontend->myprint("$which urllist\n");
- for ( @{$CPAN::Config->{urllist} || []} ) {
- $CPAN::Frontend->myprint(" $_\n")
+ for ( @{$CPAN::Config->{urllist} || []} ) {
+ $CPAN::Frontend->myprint(" $_\n")
};
}
diff --git a/cpan/CPAN/lib/CPAN/HTTP/Client.pm b/cpan/CPAN/lib/CPAN/HTTP/Client.pm
index 52de7fe237..c5eb0f6a43 100644
--- a/cpan/CPAN/lib/CPAN/HTTP/Client.pm
+++ b/cpan/CPAN/lib/CPAN/HTTP/Client.pm
@@ -31,8 +31,8 @@ sub mirror {
my($self, $uri, $path) = @_;
my $want_proxy = $self->_want_proxy($uri);
- my $http = HTTP::Tiny->new(
- $want_proxy ? (proxy => $self->{proxy}) : ()
+ my $http = HTTP::Tiny->new(
+ $want_proxy ? (proxy => $self->{proxy}) : ()
);
my ($response, %headers);
@@ -112,7 +112,7 @@ sub _get_challenge {
my $auth_list = $response->{headers}(lc $auth_header);
return unless defined $auth_list;
$auth_list = [$auth_list] unless ref $auth_list;
-
+
for my $challenge (@$auth_list) {
$challenge =~ tr/,/;/; # "," is used to separate auth-params!!
($challenge) = $self->split_header_words($challenge);
diff --git a/cpan/CPAN/lib/CPAN/HandleConfig.pm b/cpan/CPAN/lib/CPAN/HandleConfig.pm
index 58ccbe50e5..09c42efee0 100644
--- a/cpan/CPAN/lib/CPAN/HandleConfig.pm
+++ b/cpan/CPAN/lib/CPAN/HandleConfig.pm
@@ -265,11 +265,11 @@ sub commit {
my($self,@args) = @_;
CPAN->debug("args[@args]") if $CPAN::DEBUG;
if ($CPAN::RUN_DEGRADED) {
- $CPAN::Frontend->mydie(
- "'o conf commit' disabled in ".
- "degraded mode. Maybe try\n".
- " !undef \$CPAN::RUN_DEGRADED\n"
- );
+ $CPAN::Frontend->mydie(
+ "'o conf commit' disabled in ".
+ "degraded mode. Maybe try\n".
+ " !undef \$CPAN::RUN_DEGRADED\n"
+ );
}
my ($configpm, $must_reload);
@@ -474,13 +474,13 @@ sub init {
sub require_myconfig_or_config () {
if ( $INC{"CPAN/MyConfig.pm"} || _try_loading("CPAN::MyConfig", cpan_home())) {
return $INC{"CPAN/MyConfig.pm"};
- }
+ }
elsif ( $INC{"CPAN/Config.pm"} || _try_loading("CPAN::Config") ) {
return $INC{"CPAN/Config.pm"};
- }
+ }
else {
return q{};
- }
+ }
}
# Load a module, but ignore "can't locate..." errors
@@ -495,8 +495,8 @@ sub _try_loading {
if ( -f File::Spec->catfile($dir, $file) ) {
unshift @INC, $dir;
last;
+ }
}
- }
eval { require $file };
my $err_myconfig = $@;
@@ -515,7 +515,7 @@ sub cpan_home_dir_candidates {
if ($^O ne 'darwin') {
push @dirs, File::HomeDir->my_data;
# my_data is ~/Library/Application Support on darwin,
- # which causes issues in the toolchain.
+ # which causes issues in the toolchain.
}
push @dirs, File::HomeDir->my_home;
}
@@ -592,7 +592,7 @@ sub make_new_config {
Old configuration file $configpm
moved to $configpm_bak
END
- }
+ }
}
my $fh = FileHandle->new;
if ($fh->open(">$configpm")) {
diff --git a/cpan/CPAN/lib/CPAN/Index.pm b/cpan/CPAN/lib/CPAN/Index.pm
index 4fcde8c390..af98d7bf15 100644
--- a/cpan/CPAN/lib/CPAN/Index.pm
+++ b/cpan/CPAN/lib/CPAN/Index.pm
@@ -132,7 +132,7 @@ sub reanimate_build_dir {
return;
}
$CPAN::Frontend->myprint
- (sprintf("Going to read %d yaml file%s from %s/\n",
+ (sprintf("Reading %d yaml file%s from %s/\n",
scalar @candidates,
@candidates==1 ? "" : "s",
$CPAN::Config->{build_dir}
@@ -231,7 +231,7 @@ sub rd_authindex {
return unless defined $index_target;
return if CPAN::_sqlite_running();
my @lines;
- $CPAN::Frontend->myprint("Going to read '$index_target'\n");
+ $CPAN::Frontend->myprint("Reading '$index_target'\n");
local(*FH);
tie *FH, 'CPAN::Tarzip', $index_target;
local($/) = "\n";
@@ -271,7 +271,7 @@ sub rd_modpacks {
my($self, $index_target) = @_;
return unless defined $index_target;
return if CPAN::_sqlite_running();
- $CPAN::Frontend->myprint("Going to read '$index_target'\n");
+ $CPAN::Frontend->myprint("Reading '$index_target'\n");
my $fh = CPAN::Tarzip->TIEHANDLE($index_target);
local $_;
CPAN->debug(sprintf "start[%d]", time) if $CPAN::DEBUG;
@@ -494,7 +494,7 @@ sub rd_modlist {
my($cl,$index_target) = @_;
return unless defined $index_target;
return if CPAN::_sqlite_running();
- $CPAN::Frontend->myprint("Going to read '$index_target'\n");
+ $CPAN::Frontend->myprint("Reading '$index_target'\n");
my $fh = CPAN::Tarzip->TIEHANDLE($index_target);
local $_;
my $slurp = "";
@@ -556,7 +556,7 @@ sub write_metadata_cache {
$cache->{last_time} = $LAST_TIME;
$cache->{DATE_OF_02} = $DATE_OF_02;
$cache->{PROTOCOL} = PROTOCOL;
- $CPAN::Frontend->myprint("Going to write $metadata_file\n");
+ $CPAN::Frontend->myprint("Writing $metadata_file\n");
eval { Storable::nstore($cache, $metadata_file) };
$CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ??
}
@@ -569,7 +569,7 @@ sub read_metadata_cache {
return unless $CPAN::META->has_usable("Storable");
my $metadata_file = File::Spec->catfile($CPAN::Config->{cpan_home},"Metadata");
return unless -r $metadata_file and -f $metadata_file;
- $CPAN::Frontend->myprint("Going to read '$metadata_file'\n");
+ $CPAN::Frontend->myprint("Reading '$metadata_file'\n");
my $cache;
eval { $cache = Storable::retrieve($metadata_file) };
$CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ??
diff --git a/cpan/CPAN/lib/CPAN/Mirrors.pm b/cpan/CPAN/lib/CPAN/Mirrors.pm
index 3582b0acb4..daafc1dbaf 100644
--- a/cpan/CPAN/lib/CPAN/Mirrors.pm
+++ b/cpan/CPAN/lib/CPAN/Mirrors.pm
@@ -1,5 +1,37 @@
# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
# vim: ts=4 sts=4 sw=4:
+=head1 NAME
+
+CPAN::Mirrors - Get CPAN miror information and select a fast one
+
+=head1 SYNOPSIS
+
+ use CPAN::Mirrors;
+
+ my $mirrors = CPAN::Mirrors->new;
+ $mirrors->parse_from_file( $mirrored_by_file );
+
+ my $seen = {};
+
+ my $best_continent = $mirrors->find_best_continents( { seen => $seen } );
+ my @mirrors = $mirrors->get_mirrors_by_continents( $best_continent );
+
+ my $callback = sub {
+ my( $m ) = @_;
+ printf "%s = %s\n", $m->hostname, $m->rtt
+ };
+ $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback );
+
+ @mirrors = sort { $a->rtt <=> $b->rtt } @mirrors;
+
+ print "Best mirrors are ", map( { $_->rtt } @mirrors[0..3] ), "\n";
+
+=head1 DESCRIPTION
+
+=over
+
+=cut
+
package CPAN::Mirrors;
use strict;
use vars qw($VERSION $urllist $silent);
@@ -10,31 +42,55 @@ use FileHandle;
use Fcntl ":flock";
use Net::Ping ();
+=item new( LOCAL_FILE_NAME )
+
+=cut
+
sub new {
my ($class, $file) = @_;
- my $self = bless {
- mirrors => [],
- geography => {},
+ my $self = bless {
+ mirrors => [],
+ geography => {},
}, $class;
+ if( defined $file ) {
+ $self->parse_mirrored_by( $file );
+ }
+
+ return $self
+}
+
+sub parse_mirrored_by {
+ my ($self, $file) = @_;
my $handle = FileHandle->new;
- $handle->open($file)
+ $handle->open($file)
or croak "Couldn't open $file: $!";
flock $handle, LOCK_SH;
$self->_parse($file,$handle);
flock $handle, LOCK_UN;
$handle->close;
+}
- # populate continents & countries
+=item continents()
- return $self
-}
+Return a list of continents based on those defined in F<MIRRORED.BY>.
+
+=cut
sub continents {
my ($self) = @_;
return keys %{$self->{geography}};
}
+=item countries( [CONTINENTS] )
+
+Return a list of countries based on those defined in F<MIRRORED.BY>.
+It only returns countries for the continents you specify (as defined
+in C<continents>). If you don't specify any continents, it returns all
+of the countries listed in F<MIRRORED.BY>.
+
+=cut
+
sub countries {
my ($self, @continents) = @_;
@continents = $self->continents unless @continents;
@@ -45,6 +101,15 @@ sub countries {
return @countries;
}
+=item mirrors( [COUNTRIES] )
+
+Return a list of mirrors based on those defined in F<MIRRORED.BY>.
+It only returns mirrors for the countries you specify (as defined
+in C<countries>). If you don't specify any countries, it returns all
+of the mirrors listed in F<MIRRORED.BY>.
+
+=cut
+
sub mirrors {
my ($self, @countries) = @_;
return @{$self->{mirrors}} unless @countries;
@@ -56,118 +121,300 @@ sub mirrors {
return @found;
}
+=item get_mirrors_by_countries( [COUNTRIES] )
+
+A more sensible synonym for mirrors.
+
+=cut
+
+sub get_mirrors_by_countries { &mirrors }
+
+=item get_mirrors_by_continents( [CONTINENTS] )
+
+Return a list of mirrors for all of continents you specify. If you don't
+specify any continents, it returns all of the mirrors.
+
+=cut
+
+sub get_mirrors_by_continents {
+ my ($self, $continents ) = @_;
+
+ $self->mirrors( $self->get_countries_by_continents( @$continents ) );
+ }
+
+=item get_countries_by_continents( [CONTINENTS] )
+
+A more sensible synonym for countries.
+
+=cut
+sub get_countries_by_continents { &countries }
+
+=item best_mirrors
+
+C<best_mirrors> checks for the best mirrors based on the list of
+continents you pass, or, without that, all continents, as defined
+by C<CPAN::Mirrored::By>. It pings each mirror, up to the value of
+C<how_many>. In list context, it returns up to C<how_many> mirror.
+In scalar context, it returns the single best mirror.
+
+Arguments
+
+ how_many - the number of mirrors to return. Default: 1
+ callback - a callback for find_best_continents
+ verbose - true or false on all the whining and moaning. Default: false
+ continents - an array ref of the continents to check
+
+If you don't specify the continents, C<best_mirrors> calls
+C<find_best_continents> to get the list of continents to check.
+
+=cut
+
sub best_mirrors {
my ($self, %args) = @_;
- my $how_many = $args{how_many} || 1;
- my $callback = $args{callback};
- my $verbose = $args{verbose};
- my $conts = $args{continents} || [];
- $conts = [$conts] unless ref $conts;
+ my $how_many = $args{how_many} || 1;
+ my $callback = $args{callback};
+ my $verbose = defined $args{verbose} ? $args{verbose} : 0;
+ my $continents = $args{continents} || [];
+ $continents = [$continents] unless ref $continents;
# Old Net::Ping did not do timings at all
return "http://www.cpan.org/" unless Net::Ping->VERSION gt '2.13';
my $seen = {};
- if ( ! @$conts ) {
+ if ( ! @$continents ) {
print "Searching for the best continent ...\n" if $verbose;
- my @best = $self->_find_best_continent($seen, $verbose, $callback);
+ my @best_continents = $self->find_best_continents(
+ seen => $seen,
+ verbose => $verbose,
+ callback => $callback,
+ );
# Only add enough continents to find enough mirrors
my $count = 0;
- for my $c ( @best ) {
- push @$conts, $c;
- $count += $self->mirrors( $self->countries($c) );
+ for my $continent ( @best_continents ) {
+ push @$continents, $continent;
+ $count += $self->mirrors( $self->countries($continent) );
last if $count >= $how_many;
}
}
- print "Scanning " . join(", ", @$conts) . " ...\n" if $verbose;
+ print "Scanning " . join(", ", @$continents) . " ...\n" if $verbose;
+
+ my $trial_mirrors = $self->get_n_random_mirrors_by_continents( 3 * $how_many, $continents->[0] );
+
+ my $timings = $self->get_mirrors_timings( $trial_mirrors, $seen, $callback );
+ return [] unless @$timings;
+
+ $how_many = @$timings if $how_many > @$timings;
+
+ return wantarray ? @{$timings}[0 .. $how_many-1] : $timings->[0];
+}
+
+=item get_n_random_mirrors_by_continents( N, [CONTINENTS]
+
+Returns up to N random mirrors for the specified continents. Specify the
+continents as an array reference.
+
+=cut
+
+sub get_n_random_mirrors_by_continents {
+ my( $self, $n, $continents ) = @_;
+ $n ||= 3;
+ $continents = [ $continents ] unless ref $continents;
- my @timings;
- my @long_list = $self->mirrors($self->countries(@$conts));
- my $long_list_size = ( $how_many > 10 ? $how_many : 10 );
- if ( @long_list > $long_list_size ) {
- @long_list = map {$_->[0]}
- sort {$a->[1] <=> $b->[1]}
- map {[$_, rand]} @long_list;
- splice @long_list, $long_list_size; # truncate
+ if ( $n <= 0 ) {
+ return wantarray ? () : [];
}
- for my $m ( @long_list ) {
- next unless $m->http;
- my $hostname = $m->hostname;
- if ( $seen->{$hostname} ) {
- push @timings, $seen->{$hostname}
- if defined $seen->{$hostname}[1];
+ my @long_list = $self->get_mirrors_by_continents( $continents );
+
+ if ( $n eq '*' or $n > @long_list ) {
+ return wantarray ? @long_list : \@long_list;
+ }
+
+ @long_list = map {$_->[0]}
+ sort {$a->[1] <=> $b->[1]}
+ map {[$_, rand]} @long_list;
+
+ splice @long_list, $n; # truncate
+
+ \@long_list;
+}
+
+=item get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK );
+
+Pings the listed mirrors and returns a list of mirrors sorted
+in ascending ping times.
+
+=cut
+
+sub get_mirrors_timings {
+ my( $self, $mirror_list, $seen, $callback ) = @_;
+
+ $seen = {} unless defined $seen;
+ croak "The mirror list argument must be an array reference"
+ unless ref $mirror_list eq ref [];
+ croak "The seen argument must be a hash reference"
+ unless ref $seen eq ref {};
+ croak "callback must be a subroutine"
+ if( defined $callback and ref $callback ne ref sub {} );
+
+ my $timings = [];
+ for my $m ( @$mirror_list ) {
+ $seen->{$m->hostname} = $m;
+ next unless eval{ $m->http };
+
+ if( $self->_try_a_ping( $seen, $m, ) ) {
+ my $ping = $m->ping;
+ next unless defined $ping;
+ push @$timings, $m;
+ $callback->( $m ) if $callback;
}
else {
- my $ping = $m->ping;
- next unless defined $ping;
- push @timings, [$m, $ping];
- $callback->($m,$ping) if $callback;
+ push @$timings, $seen->{$m->hostname}
+ if defined $seen->{$m->hostname}->rtt;
}
}
- return unless @timings;
-
- $how_many = @timings if $how_many > @timings;
- my @best =
- map { $_->[0] }
- sort { $a->[1] <=> $b->[1] } @timings;
- return wantarray ? @best[0 .. $how_many-1] : $best[0];
+ my @best = sort {
+ if( defined $a->rtt and defined $b->rtt ) {
+ $a->rtt <=> $b->rtt
+ }
+ elsif( defined $a->rtt and ! defined $b->rtt ) {
+ return -1;
+ }
+ elsif( ! defined $a->rtt and defined $b->rtt ) {
+ return 1;
+ }
+ elsif( ! defined $a->rtt and ! defined $b->rtt ) {
+ return 0;
+ }
+
+ } @$timings;
+
+ return wantarray ? @best : \@best;
}
-sub _find_best_continent {
- my ($self, $seen, $verbose, $callback) = @_;
+=item find_best_continents( HASH_REF );
+
+C<find_best_continents> goes through each continent and pings C<N> random
+mirrors on that continent. It then orders the continents by ascending
+median ping time. In list context, it returns the ordered list of
+continent. In scalar context, it returns the same list as an anonymous
+array.
+
+Arguments:
+
+ n - the number of hosts to ping for each continent. Default: 3
+ seen - a hashref of cached hostname ping times
+ verbose - true or false for noisy or quiet. Default: false
+ callback - a subroutine to run after each ping.
+ ping_cache_limit - how long, in seconds, to reuse previous ping times.
+ Default: 1 day
+
+The C<seen> hash has hostnames as keys and anonymous arrays as values. The
+anonymous array is a triplet of a C<CPAN::Mirrored::By> object, a ping
+time, and the epoch time for the measurement.
+
+The callback subroutine gets the C<CPAN::Mirrored::By> object, the ping
+time, and measurement time (the same things in the C<seen> hashref) as arguments.
+C<find_best_continents> doesn't care what the callback does and ignores the return
+value.
- my %median;
+=cut
+
+sub find_best_continents {
+ my ($self, %args) = @_;
+
+ $args{n} ||= 3;
+ $args{verbose} = 0 unless defined $args{verbose};
+ $args{seen} = {} unless defined $args{seen};
+ croak "The seen argument must be a hash reference"
+ unless ref $args{seen} eq ref {};
+ $args{ping_cache_limit} = 24 * 60 * 60
+ unless defined $args{ping_cache_time};
+ croak "callback must be a subroutine"
+ if( defined $args{callback} and ref $args{callback} ne ref sub {} );
+
+ my %medians;
CONT: for my $c ( $self->continents ) {
+ print "Testing $c\n" if $args{verbose};
my @mirrors = $self->mirrors( $self->countries($c) );
+
next CONT unless @mirrors;
- my $sample = 3;
- my $n = (@mirrors < $sample) ? @mirrors : $sample;
+ my $n = (@mirrors < $args{n}) ? @mirrors : $args{n};
+
my @tests;
- RANDOM: while ( @mirrors && @tests < $n ) {
+ my $tries = 0;
+ RANDOM: while ( @mirrors && @tests < $n && $tries++ < 15 ) {
my $m = splice( @mirrors, int(rand(@mirrors)), 1 );
- my $ping = $m->ping;
- $callback->($m,$ping) if $callback;
- # record undef so we don't try again
- $seen->{$m->hostname} = [$m, $ping];
- next RANDOM unless defined $ping;
- push @tests, $ping;
- }
- next CONT unless @tests;
- @tests = sort { $a <=> $b } @tests;
- if ( @tests == 1 ) {
- $median{$c} = $tests[0];
- }
- elsif ( @tests % 2 ) {
- $median{$c} = $tests[ int(@tests / 2) ];
- }
- else {
- my $mid_high = int(@tests/2);
- $median{$c} = ($tests[$mid_high-1] + $tests[$mid_high])/2;
+ if( $self->_try_a_ping( $args{seen}, $m, $args{ping_cache_limit} ) ) {
+ $self->get_mirrors_timings( [ $m ], @args{qw(seen callback)} );
+ next RANDOM unless defined $args{seen}{$m->hostname}->rtt;
+ }
+ printf "\t%s -> %0.2f ms\n",
+ $m->hostname,
+ join ' ', 1000 * $args{seen}{$m->hostname}->rtt
+ if $args{verbose};
+
+ push @tests, $args{seen}{$m->hostname}->rtt;
}
+
+ my $median = $self->_get_median_ping_time( \@tests, $args{verbose} );
+ $medians{$c} = $median if defined $median;
}
- my @best_cont = sort { $median{$a} <=> $median{$b} } keys %median ;
+ my @best_cont = sort { $medians{$a} <=> $medians{$b} } keys %medians;
- if ( $verbose ) {
+ if ( $args{verbose} ) {
print "Median result by continent:\n";
for my $c ( @best_cont ) {
- printf( " %d ms %s\n", int($median{$c}*1000+.5), $c );
+ printf( " %4d ms %s\n", int($medians{$c}*1000+.5), $c );
}
}
return wantarray ? @best_cont : $best_cont[0];
}
+# retry if
+sub _try_a_ping {
+ my ($self, $seen, $mirror, $ping_cache_limit ) = @_;
+
+ ( ! exists $seen->{$mirror->hostname} )
+ or
+ (
+ ! defined $seen->{$mirror->hostname}->rtt
+ or
+ time - $seen->{$mirror->hostname}->rtt > $ping_cache_limit
+ )
+}
+
+sub _get_median_ping_time {
+ my ($self, $tests, $verbose ) = @_;
+
+ my @sorted = sort { $a <=> $b } @$tests;
+
+ my $median = do {
+ if ( @sorted == 0 ) { undef }
+ elsif ( @sorted == 1 ) { $sorted[0] }
+ elsif ( @sorted % 2 ) { $sorted[ int(@sorted / 2) ] }
+ else {
+ my $mid_high = int(@sorted/2);
+ ($sorted[$mid_high-1] + $sorted[$mid_high])/2;
+ }
+ };
+
+ printf "\t-->median time: %0.2f ms\n", $median * 1000 if $verbose;
+
+ return $median;
+}
+
# Adapted from Parse::CPAN::MirroredBy by Adam Kennedy
sub _parse {
my ($self, $file, $handle) = @_;
my $output = $self->{mirrors};
- my $geo = $self->{geography};
+ my $geo = $self->{geography};
local $/ = "\012";
my $line = 0;
@@ -193,7 +440,7 @@ sub _parse {
$mirror ||= {};
if ( $prop eq 'dst_location' ) {
my (@location,$continent,$country);
- @location = (split /\s*,\s*/, $value)
+ @location = (split /\s*,\s*/, $value)
and ($continent, $country) = @location[-1,-2];
$continent =~ s/\s\(.*//;
$continent =~ s/\W+$//; # if Jarkko doesn't know latitude/longitude
@@ -244,35 +491,61 @@ sub new {
$arg ||= {};
bless $arg, $self;
}
-sub hostname { shift->{hostname} }
-sub continent { shift->{continent} }
-sub country { shift->{country} }
-sub http { shift->{http} || '' }
-sub ftp { shift->{ftp} || '' }
-sub rsync { shift->{rsync} || '' }
-
-sub url {
+sub hostname { shift->{hostname} }
+sub continent { shift->{continent} }
+sub country { shift->{country} }
+sub http { shift->{http} || '' }
+sub ftp { shift->{ftp} || '' }
+sub rsync { shift->{rsync} || '' }
+sub rtt { shift->{rtt} }
+sub ping_time { shift->{ping_time} }
+
+sub url {
my $self = shift;
return $self->{http} || $self->{ftp};
}
sub ping {
my $self = shift;
+
my $ping = Net::Ping->new("tcp",1);
my ($proto) = $self->url =~ m{^([^:]+)};
my $port = $proto eq 'http' ? 80 : 21;
return unless $port;
- if ( $ping->can('port_number') ) {
- $ping->port_number($port);
+
+ if ( $ping->can('port_number') ) {
+ $ping->port_number($port);
}
else {
$ping->{'port_num'} = $port;
}
+
$ping->hires(1) if $ping->can('hires');
my ($alive,$rtt) = $ping->ping($self->hostname);
- return $alive ? $rtt : undef;
+
+ $self->{rtt} = $alive ? $rtt : undef;
+ $self->{ping_time} = time;
+
+ $self->rtt;
}
1;
+=back
+
+=head1 AUTHOR
+
+Andreas Koenig C<< <andk@cpan.org> >>, David Golden C<< <dagolden@cpan.org> >>,
+brian d foy C<< <bdfoy@cpan.org> >>
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+
+
+=cut
diff --git a/cpan/CPAN/lib/CPAN/Shell.pm b/cpan/CPAN/lib/CPAN/Shell.pm
index 9effb0d2e7..21441df653 100644
--- a/cpan/CPAN/lib/CPAN/Shell.pm
+++ b/cpan/CPAN/lib/CPAN/Shell.pm
@@ -653,7 +653,7 @@ sub mkmyconfig {
"CPAN::MyConfig already exists as $configpm.\n" .
"Running configuration again...\n"
);
- require CPAN::FirstTime;
+ require CPAN::FirstTime;
CPAN::FirstTime::init($configpm);
}
else {
@@ -1221,6 +1221,7 @@ sub autobundle {
$fh->close;
$CPAN::Frontend->myprint("\nWrote bundle file
$to\n\n");
+ return $to;
}
#-> sub CPAN::Shell::expandany ;
@@ -1684,7 +1685,7 @@ sub rematein {
if ($meth =~ /^($needs_recursion_protection)$/) {
# it would be silly to check for recursion for look or dump
# (we are in CPAN::Shell::rematein)
- CPAN->debug("Going to test against recursion") if $CPAN::DEBUG;
+ CPAN->debug("Testing against recursion") if $CPAN::DEBUG;
eval { $obj->color_cmd_tmps(0,1); };
if ($@) {
if (ref $@
@@ -1847,7 +1848,7 @@ sub recent {
my($self) = @_;
if ($CPAN::META->has_inst("XML::LibXML")) {
my $url = $CPAN::Defaultrecent;
- $CPAN::Frontend->myprint("Going to fetch '$url'\n");
+ $CPAN::Frontend->myprint("Fetching '$url'\n");
unless ($CPAN::META->has_usable("LWP")) {
$CPAN::Frontend->mydie("LWP not installed; cannot continue");
}
@@ -1935,7 +1936,7 @@ sub smoke {
my $distros = $self->recent;
DISTRO: for my $distro (@$distros) {
next if $distro =~ m|/Bundle-|; # XXX crude heuristic to skip bundles
- $CPAN::Frontend->myprint(sprintf "Going to download and test '$distro'\n");
+ $CPAN::Frontend->myprint(sprintf "Downloading and testing '$distro'\n");
{
my $skip = 0;
local $SIG{INT} = sub { $skip = 1 };
diff --git a/cpan/DB_File/Changes b/cpan/DB_File/Changes
index 79da038eed..f527911f5a 100644
--- a/cpan/DB_File/Changes
+++ b/cpan/DB_File/Changes
@@ -1,4 +1,17 @@
+1.824 6 Aug 2011
+ * Amendments to tests to work in blead
+ [RT #70108]
+
+1.823 6 Aug 2011
+
+ * croak if attempt to freeze/thaw DB_File object
+ [RT #69985]
+
+1.822 12 March 2011
+
+ * Link rot
+ [rt.cpan.org #69739]
1.822 12 March 2011
diff --git a/cpan/DB_File/DB_File.pm b/cpan/DB_File/DB_File.pm
index 7b8755bd54..d7fba44ebc 100644
--- a/cpan/DB_File/DB_File.pm
+++ b/cpan/DB_File/DB_File.pm
@@ -165,7 +165,7 @@ our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array,
use Carp;
-$VERSION = "1.822" ;
+$VERSION = "1.824" ;
$VERSION = eval $VERSION; # needed for dev releases
{
@@ -578,6 +578,20 @@ sub get_dup
}
+sub STORABLE_freeze
+{
+ my $type = ref shift;
+ croak "Cannot freeze $type object\n";
+}
+
+sub STORABLE_thaw
+{
+ my $type = ref shift;
+ croak "Cannot thaw $type object\n";
+}
+
+
+
1;
__END__
@@ -2263,10 +2277,6 @@ All versions of Berkeley DB are available there.
Alternatively, Berkeley DB version 1 is available at your nearest CPAN
archive in F<src/misc/db.1.85.tar.gz>.
-If you are running IRIX, then get Berkeley DB version 1 from
-F<http://reality.sgi.com/ariel>. It has the patches necessary to
-compile properly on IRIX 5.3.
-
=head1 COPYRIGHT
Copyright (c) 1995-2007 Paul Marquess. All rights reserved. This program
diff --git a/cpan/DB_File/t/db-recno.t b/cpan/DB_File/t/db-recno.t
index 404a060fa7..bd198dcf2f 100644
--- a/cpan/DB_File/t/db-recno.t
+++ b/cpan/DB_File/t/db-recno.t
@@ -1,6 +1,5 @@
#!./perl -w
-use warnings;
use strict;
use Config;
diff --git a/cpan/Devel-PPPort/parts/inc/variables b/cpan/Devel-PPPort/parts/inc/variables
index 77b088ef58..3fbb566a98 100644
--- a/cpan/Devel-PPPort/parts/inc/variables
+++ b/cpan/Devel-PPPort/parts/inc/variables
@@ -383,7 +383,7 @@ other_variables()
ppp_TESTVAR(PL_debstash);
ppp_TESTVAR(PL_defgv);
ppp_TESTVAR(PL_diehook);
-#if defined(PL_phase) || defined(PL_Iphase)
+#if PERL_VERSION >= 14
ppp_PARSERVAR_dummy;
#else
ppp_TESTVAR(PL_dirty);
diff --git a/cpan/Encode/Changes b/cpan/Encode/Changes
index 7df93305c1..54234214ca 100644
--- a/cpan/Encode/Changes
+++ b/cpan/Encode/Changes
@@ -1,8 +1,20 @@
# Revision history for Perl extension Encode.
#
-# $Id: Changes,v 2.43 2011/05/21 23:14:43 dankogai Exp dankogai $
+# $Id: Changes,v 2.44 2011/08/09 07:49:44 dankogai Exp dankogai $
#
-$Revision: 2.43 $ $Date: 2011/05/21 23:14:43 $
+$Revision: 2.44 $ $Date: 2011/08/09 07:49:44 $
+! Unicode/Unicode.xs
+ Addressed the following:
+ Date: Fri, 22 Jul 2011 13:58:43 +0200
+ From: Robert Zacek <zacek@avast.com>
+ To: perl5-security-report@perl.org
+ Subject: Unicode.xs!decode_xs n-byte heap-overflow
+! Encode.pm encoding.pm
+! lib/Encode/Alias.pm lib/Encode/Encoder.pm lib/Encode/Guess.pm
+ Applied: RT#69735: patch for use constant DEBUG =>
+ https://rt.cpan.org/Ticket/Update.html?id=69735
+
+2.43 2011/05/21 23:14:43
! lib/Encode/Alias.pm
Addressed RT#68361: Encode::Bytes x-mac-... aliases missing
https://rt.cpan.org/Ticket/Display.html?id=68361
diff --git a/cpan/Encode/Encode.pm b/cpan/Encode/Encode.pm
index b6bace911e..171b2da056 100644
--- a/cpan/Encode/Encode.pm
+++ b/cpan/Encode/Encode.pm
@@ -1,11 +1,11 @@
#
-# $Id: Encode.pm,v 2.43 2011/05/21 23:14:43 dankogai Exp dankogai $
+# $Id: Encode.pm,v 2.44 2011/08/09 07:49:44 dankogai Exp dankogai $
#
package Encode;
use strict;
use warnings;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.43 $ =~ /(\d+)/g;
-sub DEBUG () { 0 }
+our $VERSION = sprintf "%d.%02d", q$Revision: 2.44 $ =~ /(\d+)/g;
+use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
use XSLoader ();
XSLoader::load( __PACKAGE__, $VERSION );
diff --git a/cpan/Encode/META.yml b/cpan/Encode/META.yml
index 33861c70d9..d73458f7bd 100644
--- a/cpan/Encode/META.yml
+++ b/cpan/Encode/META.yml
@@ -1,6 +1,6 @@
--- #YAML:1.0
name: Encode
-version: 2.43
+version: 2.44
abstract: ~
author: []
license: unknown
@@ -14,7 +14,7 @@ no_index:
directory:
- t
- inc
-generated_by: ExtUtils::MakeMaker version 6.56
+generated_by: ExtUtils::MakeMaker version 6.57_05
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: 1.4
diff --git a/cpan/Encode/Unicode/Unicode.xs b/cpan/Encode/Unicode/Unicode.xs
index 16f4cd1ff2..039f1559a3 100644
--- a/cpan/Encode/Unicode/Unicode.xs
+++ b/cpan/Encode/Unicode/Unicode.xs
@@ -1,5 +1,5 @@
/*
- $Id: Unicode.xs,v 2.7 2010/12/31 22:48:48 dankogai Exp $
+ $Id: Unicode.xs,v 2.8 2011/08/09 07:49:44 dankogai Exp dankogai $
*/
#define PERL_NO_GET_CONTEXT
@@ -256,7 +256,10 @@ CODE:
This prevents allocating too much in the rogue case of a large
input consisting initially of long sequence uft8-byte unicode
chars followed by single utf8-byte chars. */
- STRLEN remaining = (e - s)/usize;
+ /* +1
+ fixes Unicode.xs!decode_xs n-byte heap-overflow
+ */
+ STRLEN remaining = (e - s)/usize + 1; /* +1 to avoid the leak */
STRLEN max_alloc = remaining + (8*1024*1024);
STRLEN est_alloc = remaining * UTF8_MAXLEN;
STRLEN newlen = SvLEN(result) + /* min(max_alloc, est_alloc) */
diff --git a/cpan/Encode/encoding.pm b/cpan/Encode/encoding.pm
index be20a49448..24d6e5b66c 100644
--- a/cpan/Encode/encoding.pm
+++ b/cpan/Encode/encoding.pm
@@ -1,4 +1,4 @@
-# $Id: encoding.pm,v 2.8 2009/02/15 17:44:13 dankogai Exp $
+# $Id: encoding.pm,v 2.9 2011/08/09 07:49:44 dankogai Exp dankogai $
package encoding;
our $VERSION = '2.6_01';
@@ -6,7 +6,7 @@ use Encode;
use strict;
use warnings;
-sub DEBUG () { 0 }
+use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
BEGIN {
if ( ord("A") == 193 ) {
diff --git a/cpan/Encode/lib/Encode/Alias.pm b/cpan/Encode/lib/Encode/Alias.pm
index 604d39e41d..d744cc5e93 100644
--- a/cpan/Encode/lib/Encode/Alias.pm
+++ b/cpan/Encode/lib/Encode/Alias.pm
@@ -2,8 +2,8 @@ package Encode::Alias;
use strict;
use warnings;
no warnings 'redefine';
-our $VERSION = do { my @r = ( q$Revision: 2.14 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-sub DEBUG () { 0 }
+our $VERSION = do { my @r = ( q$Revision: 2.15 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
+use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
use base qw(Exporter);
diff --git a/cpan/Encode/lib/Encode/Encoder.pm b/cpan/Encode/lib/Encode/Encoder.pm
index f7194f81ac..9a46d36743 100644
--- a/cpan/Encode/lib/Encode/Encoder.pm
+++ b/cpan/Encode/lib/Encode/Encoder.pm
@@ -1,17 +1,17 @@
#
-# $Id: Encoder.pm,v 2.1 2006/05/03 18:24:10 dankogai Exp $
+# $Id: Encoder.pm,v 2.2 2011/08/09 07:49:44 dankogai Exp dankogai $
#
package Encode::Encoder;
use strict;
use warnings;
-our $VERSION = do { my @r = ( q$Revision: 2.1 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
+our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw ( encoder );
our $AUTOLOAD;
-sub DEBUG () { 0 }
+use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
use Encode qw(encode decode find_encoding from_to);
use Carp;
diff --git a/cpan/Encode/lib/Encode/Guess.pm b/cpan/Encode/lib/Encode/Guess.pm
index 9636a8ad8a..31ec58f4fc 100644
--- a/cpan/Encode/lib/Encode/Guess.pm
+++ b/cpan/Encode/lib/Encode/Guess.pm
@@ -2,10 +2,10 @@ package Encode::Guess;
use strict;
use warnings;
use Encode qw(:fallbacks find_encoding);
-our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
+our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
my $Canon = 'Guess';
-sub DEBUG () { 0 }
+use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8);
$Encode::Encoding{$Canon} = bless {
Name => $Canon,
diff --git a/cpan/ExtUtils-MakeMaker/Changes b/cpan/ExtUtils-MakeMaker/Changes
index e549e9c8f0..393891089a 100644
--- a/cpan/ExtUtils-MakeMaker/Changes
+++ b/cpan/ExtUtils-MakeMaker/Changes
@@ -1,3 +1,18 @@
+6.59 Fri Aug 5 12:09:00 BST
+ No changes since 6.58_01
+
+6.58_01 Wed Aug 3 21:12:00 BST
+ Doc Fixes
+ * Corrected the repository location [chorny]
+
+ Bug Fixes
+ * Removed the %INC check from _has_cpan_meta and updated the CPAN::Meta
+ bundled with EUMM to one that doesn't set $VERSION in a begin block
+ so it can't appear to be loaded, thus causing us to mistakenly try
+ and call methods on CPAN::Meta modules - this is due to older versions
+ in site_perl shadowing our installation of other bundled modules.
+ [rt.cpan.org 69465] [rt.cpan.org 69900] [MSTROUT]
+
6.58 Wed Jul 6 14:17:06 PDT 2011
No changes since 6.57_11
diff --git a/cpan/ExtUtils-MakeMaker/MANIFEST b/cpan/ExtUtils-MakeMaker/MANIFEST
index 0f31fec0eb..ef9ec12dd1 100644
--- a/cpan/ExtUtils-MakeMaker/MANIFEST
+++ b/cpan/ExtUtils-MakeMaker/MANIFEST
@@ -164,4 +164,3 @@ t/xs.t
TODO
META.yml Module YAML meta-data (added by MakeMaker)
META.json Module JSON meta-data (added by MakeMaker)
-SIGNATURE Public-key signature (added by MakeMaker)
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
index 5a33bff6a3..269514f9be 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
@@ -10,7 +10,7 @@ our @ISA = qw(Exporter);
our @EXPORT = qw(test_harness pod2man perllocal_install uninstall
warn_if_old_packlist);
-our $VERSION = '6.58';
+our $VERSION = '6.59';
my $Is_VMS = $^O eq 'VMS';
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
index a4e26666e4..23b199ac82 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
@@ -2,7 +2,7 @@ package ExtUtils::Liblist;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
use File::Spec;
require ExtUtils::Liblist::Kid;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
index a0e2f24302..125d2be2e8 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
@@ -11,7 +11,7 @@ use 5.006;
use strict;
use warnings;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
use ExtUtils::MakeMaker::Config;
use Cwd 'cwd';
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
index ce3e0738ad..dd43cc7609 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
@@ -3,7 +3,7 @@ package ExtUtils::MM;
use strict;
use ExtUtils::MakeMaker::Config;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::Liblist;
require ExtUtils::MakeMaker;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
index 3d33e7fdad..0d356e3ead 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_AIX;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
index 6a50c012df..ee3e6bf93d 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_Any;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
use Carp;
use File::Spec;
@@ -730,8 +730,8 @@ CMD
sub _has_cpan_meta {
return eval {
- $INC{'CPAN/Meta.pm'} or require CPAN::Meta;
- CPAN::Meta->VERSION(2.110350);
+ require CPAN::Meta;
+ CPAN::Meta->VERSION(2.112150);
1;
};
}
@@ -816,6 +816,11 @@ on, no guarantee is made though.
sub _fix_metadata_before_conversion {
my ( $metadata ) = @_;
+ # we should never be called unless this already passed but
+ # prefer to be defensive in case somebody else calls this
+
+ return unless _has_cpan_meta;
+
my $bad_version = $metadata->{version} &&
!CPAN::Meta::Validator->new->version( 'version', $metadata->{version} );
@@ -1291,7 +1296,7 @@ sub realclean {
# Special exception for the perl core where INST_* is not in blib.
# This cleans up the files built from the ext/ directory (all XS).
if( $self->{PERL_CORE} ) {
- push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR));
+ push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR));
push @files, values %{$self->{PM}};
}
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
index 15918c9e0a..368d370b5b 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
@@ -26,7 +26,7 @@ require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '6.58';
+our $VERSION = '6.59';
=item os_flavor
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
index 7417b436e9..5f10d1e523 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
@@ -9,7 +9,7 @@ require ExtUtils::MM_Unix;
require ExtUtils::MM_Win32;
our @ISA = qw( ExtUtils::MM_Unix );
-our $VERSION = '6.58';
+our $VERSION = '6.59';
=head1 NAME
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
index 915fc33cf4..a8643c6026 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
@@ -2,7 +2,7 @@ package ExtUtils::MM_DOS;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
index ca120a346c..05cbd923b2 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
@@ -7,7 +7,7 @@ BEGIN {
our @ISA = qw( ExtUtils::MM_Unix );
}
-our $VERSION = '6.58';
+our $VERSION = '6.59';
=head1 NAME
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
index 33e5036e28..4582a6d23a 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
@@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
sub new {
die <<'UNSUPPORTED';
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
index 3e4ca58e52..a1ef5310da 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
@@ -22,7 +22,7 @@ use strict;
use ExtUtils::MakeMaker::Config;
use File::Basename;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Win32;
our @ISA = qw(ExtUtils::MM_Win32);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
index 4d10020408..9af648cba8 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
@@ -5,7 +5,7 @@ use strict;
use ExtUtils::MakeMaker qw(neatvalue);
use File::Spec;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
index f81c1c30b7..402e72cdf7 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_QNX;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
index 6b9b6a6b02..17afb3b2e1 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_UWIN;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
index b8548876c2..324885ec5c 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
@@ -15,7 +15,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue);
# If we make $VERSION an our variable parse_version() breaks
use vars qw($VERSION);
-$VERSION = '6.58';
+$VERSION = '6.59';
$VERSION = eval $VERSION;
require ExtUtils::MM_Any;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
index 3d52b87e23..9e640f39c3 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
@@ -15,7 +15,7 @@ BEGIN {
use File::Basename;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
index 9a427c6c31..b0fd476587 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_VOS;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
index 5a1fd32234..05a19764a2 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
@@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw( neatvalue );
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '6.58';
+our $VERSION = '6.59';
$ENV{EMXSHELL} = 'sh'; # to run `commands`
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
index 71115a86e5..b0158282e5 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
@@ -2,7 +2,7 @@ package ExtUtils::MM_Win95;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require ExtUtils::MM_Win32;
our @ISA = qw(ExtUtils::MM_Win32);
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
index 5591d4741d..1e8eb4d1d3 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
@@ -3,7 +3,7 @@ package ExtUtils::MY;
use strict;
require ExtUtils::MM;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
our @ISA = qw(ExtUtils::MM);
{
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
index 6173b6be09..c8c3c2366b 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
@@ -18,7 +18,7 @@ our @Overridable;
my @Prepend_parent;
my %Recognized_Att_Keys;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
$VERSION = eval $VERSION;
# Emulate something resembling CVS $Revision$
@@ -2869,7 +2869,7 @@ generated Makefile along with your report.
For more up-to-date information, see L<http://www.makemaker.org>.
-Repository available at L<http://github.com/schwern/extutils-makemaker>.
+Repository available at L<https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker>.
=head1 LICENSE
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
index 70ee092c78..58bbdd6f3e 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
@@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Config;
use strict;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
use Config ();
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
index bc3bd34f92..bf855b957d 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
@@ -3,7 +3,7 @@ package ExtUtils::Mkbootstrap;
# There's just too much Dynaloader incest here to turn on strict vars.
use strict 'refs';
-our $VERSION = '6.58';
+our $VERSION = '6.59';
require Exporter;
our @ISA = ('Exporter');
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
index e7ff00ceb6..9609f648ba 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
@@ -10,7 +10,7 @@ use Config;
our @ISA = qw(Exporter);
our @EXPORT = qw(&Mksymlists);
-our $VERSION = '6.58';
+our $VERSION = '6.59';
sub Mksymlists {
my(%spec) = @_;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
index 623e01090c..2d235acc46 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
@@ -3,7 +3,7 @@ package ExtUtils::testlib;
use strict;
use warnings;
-our $VERSION = '6.58';
+our $VERSION = '6.59';
use Cwd;
use File::Spec;
diff --git a/cpan/Module-Load/lib/Module/Load.pm b/cpan/Module-Load/lib/Module/Load.pm
index d1269da72c..7087b5e8bf 100644
--- a/cpan/Module-Load/lib/Module/Load.pm
+++ b/cpan/Module-Load/lib/Module/Load.pm
@@ -1,6 +1,6 @@
package Module::Load;
-$VERSION = '0.18';
+$VERSION = '0.20';
use strict;
use File::Spec ();
@@ -30,8 +30,8 @@ sub load (*;@) {
die $err if $err;
}
}
-
- ### This addresses #41883: Module::Load cannot import
+
+ ### This addresses #41883: Module::Load cannot import
### non-Exporter module. ->import() routines weren't
### properly called when load() was used.
{ no strict 'refs';
@@ -47,7 +47,8 @@ sub _to_file{
local $_ = shift;
my $pm = shift || '';
- my @parts = split /::/;
+ ## trailing blanks ignored by default. [rt #69886]
+ my @parts = split /::/, $_, -1;
### because of [perl #19213], see caveats ###
my $file = $^O eq 'MSWin32'
@@ -55,7 +56,7 @@ sub _to_file{
: File::Spec->catfile( @parts );
$file .= '.pm' if $pm;
-
+
### on perl's before 5.10 (5.9.5@31746) if you require
### a file in VMS format, it's stored in %INC in VMS
### format. Therefor, better unixify it first
@@ -95,15 +96,15 @@ Module::Load - runtime require of both modules and files
load Data::Dumper; # loads that module
load 'Data::Dumper'; # ditto
load $module # tritto
-
+
my $script = 'some/script.pl'
load $script;
load 'some/script.pl'; # use quotes because of punctuations
-
+
load thing; # try 'thing' first, then 'thing.pm'
load CGI, ':standard' # like 'use CGI qw[:standard]'
-
+
=head1 DESCRIPTION
@@ -174,8 +175,8 @@ This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
=head1 COPYRIGHT
-This library is free software; you may redistribute and/or modify it
+This library is free software; you may redistribute and/or modify it
under the same terms as Perl itself.
-=cut
+=cut
diff --git a/cpan/Module-Metadata/lib/Module/Metadata.pm b/cpan/Module-Metadata/lib/Module/Metadata.pm
index 9d602261d5..41d8214ef5 100644
--- a/cpan/Module-Metadata/lib/Module/Metadata.pm
+++ b/cpan/Module-Metadata/lib/Module/Metadata.pm
@@ -11,7 +11,7 @@ package Module::Metadata;
use strict;
use vars qw($VERSION);
-$VERSION = '1.000004';
+$VERSION = '1.000005_01';
$VERSION = eval $VERSION;
use File::Spec;
@@ -69,6 +69,18 @@ sub new_from_file {
return $class->_init(undef, $filename, @_);
}
+sub new_from_handle {
+ my $class = shift;
+ my $handle = shift;
+ my $filename = shift;
+ return undef unless defined($handle) && defined($filename);
+ $filename = File::Spec->rel2abs( $filename );
+
+ return $class->_init(undef, $filename, @_, handle => $handle);
+
+}
+
+
sub new_from_module {
my $class = shift;
my $module = shift;
@@ -183,7 +195,6 @@ sub new_from_module {
if ( $package eq $prime_package ) {
if ( exists( $prime{$package} ) ) {
- # M::B::ModuleInfo will handle this conflict
die "Unexpected conflict in '$package'; multiple versions found.\n";
} else {
$prime{$package}{file} = $mapped_filename;
@@ -282,6 +293,7 @@ sub _init {
my $filename = shift;
my %props = @_;
+ my $handle = delete $props{handle};
my( %valid_props, @valid_props );
@valid_props = qw( collect_pod inc );
@valid_props{@valid_props} = delete( @props{@valid_props} );
@@ -302,7 +314,12 @@ sub _init {
my $self = bless(\%data, $class);
- $self->_parse_file();
+ if ( $handle ) {
+ $self->_parse_fh($handle);
+ }
+ else {
+ $self->_parse_file();
+ }
unless($self->{module} and length($self->{module})) {
my ($v, $d, $f) = File::Spec->splitpath($self->{filename});
@@ -517,9 +534,9 @@ sub _evaluate_version_line {
use version;
no strict;
- local $sigil$var;
- \$$var=undef;
\$vsub = sub {
+ local $sigil$var;
+ \$$var=undef;
$line;
\$$var
};
@@ -648,60 +665,54 @@ sub pod {
Module::Metadata - Gather package and POD information from perl module files
-=head1 DESCRIPTION
-
-=over 4
+=head1 SYNOPSIS
-=item new_from_file($filename, collect_pod => 1)
+ use Module::Metadata;
-Construct a C<ModuleInfo> object given the path to a file. Takes an optional
-argument C<collect_pod> which is a boolean that determines whether
-POD data is collected and stored for reference. POD data is not
-collected by default. POD headings are always collected.
+ # information about a .pm file
+ my $info = Module::Metadata->new_from_file( $file );
+ my $version = $info->version;
-=item new_from_module($module, collect_pod => 1, inc => \@dirs)
+ # information about a directory full of .pm files
+ my $provides =
+ Module::Metadata->package_versions_from_directory('lib');
-Construct a C<ModuleInfo> object given a module or package name. In addition
-to accepting the C<collect_pod> argument as described above, this
-method accepts a C<inc> argument which is a reference to an array of
-of directories to search for the module. If none are given, the
-default is @INC.
-
-=item name()
-
-Returns the name of the package represented by this module. If there
-are more than one packages, it makes a best guess based on the
-filename. If it's a script (i.e. not a *.pm) the package name is
-'main'.
-
-=item version($package)
-
-Returns the version as defined by the $VERSION variable for the
-package as returned by the C<name> method if no arguments are
-given. If given the name of a package it will attempt to return the
-version of that package if it is specified in the file.
+=head1 DESCRIPTION
-=item filename()
+This module provides a standard way to gather metadata about a .pm file
+without executing unsafe code.
-Returns the absolute path to the file.
+=head1 USAGE
-=item packages_inside()
+=head2 Class methods
-Returns a list of packages.
+=over 4
-=item pod_inside()
+=item C<< new_from_file($filename, collect_pod => 1) >>
-Returns a list of POD sections.
+Construct a C<Module::Metadata> object given the path to a file. Takes an
+optional argument C<collect_pod> which is a boolean that determines whether POD
+data is collected and stored for reference. POD data is not collected by
+default. POD headings are always collected. Returns undef if the filename
+does not exist.
-=item contains_pod()
+=item C<< new_from_handle($handle, $filename, collect_pod => 1) >>
-Returns true if there is any POD in the file.
+This works just like C<new_from_file>, except that a handle can be provided
+as the first argument. Note that there is no validation to confirm that the
+handle is a handle or something that can act like one. Passing something that
+isn't a handle will cause a exception when trying to read from it. The
+C<filename> argument is mandatory or undef will be returned.
-=item pod($section)
+=item C<< new_from_module($module, collect_pod => 1, inc => \@dirs) >>
-Returns the POD data in the given section.
+Construct a C<Module::Metadata> object given a module or package name. In addition
+to accepting the C<collect_pod> argument as described above, this
+method accepts a C<inc> argument which is a reference to an array of
+of directories to search for the module. If none are given, the
+default is @INC. Returns undef if the module cannot be found.
-=item find_module_by_name($module, \@dirs)
+=item C<< find_module_by_name($module, \@dirs) >>
Returns the path to a module given the module or package name. A list
of directories can be passed in as an optional parameter, otherwise
@@ -709,7 +720,7 @@ of directories can be passed in as an optional parameter, otherwise
Can be called as either an object or a class method.
-=item find_module_dir_by_name($module, \@dirs)
+=item C<< find_module_dir_by_name($module, \@dirs) >>
Returns the entry in C<@dirs> (or C<@INC> by default) that contains
the module C<$module>. A list of directories can be passed in as an
@@ -717,7 +728,7 @@ optional parameter, otherwise @INC is searched.
Can be called as either an object or a class method.
-=item package_versions_from_directory($dir, \@files?)
+=item C<< package_versions_from_directory($dir, \@files?) >>
Scans C<$dir> for .pm files (unless C<@files> is given, in which case looks
for those files in C<$dir> - and reads each file for packages and versions,
@@ -731,23 +742,66 @@ returning a hashref of the form:
'OtherPackage::Name' => ...
}
-=item log_info (internal)
+=item C<< log_info (internal) >>
Used internally to perform logging; imported from Log::Contextual if
Log::Contextual has already been loaded, otherwise simply calls warn.
=back
+=head2 Object methods
+
+=over 4
+
+=item C<< name() >>
+
+Returns the name of the package represented by this module. If there
+are more than one packages, it makes a best guess based on the
+filename. If it's a script (i.e. not a *.pm) the package name is
+'main'.
+
+=item C<< version($package) >>
+
+Returns the version as defined by the $VERSION variable for the
+package as returned by the C<name> method if no arguments are
+given. If given the name of a package it will attempt to return the
+version of that package if it is specified in the file.
+
+=item C<< filename() >>
+
+Returns the absolute path to the file.
+
+=item C<< packages_inside() >>
+
+Returns a list of packages.
+
+=item C<< pod_inside() >>
+
+Returns a list of POD sections.
+
+=item C<< contains_pod() >>
+
+Returns true if there is any POD in the file.
+
+=item C<< pod($section) >>
+
+Returns the POD data in the given section.
+
+=back
+
=head1 AUTHOR
-Ken Williams <kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>
+Original code from Module::Build::ModuleInfo by Ken Williams
+<kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>
Released as Module::Metadata by Matt S Trout (mst) <mst@shadowcat.co.uk> with
-assistance from David Golden (xdg) <dagolden@cpan.org>
+assistance from David Golden (xdg) <dagolden@cpan.org>.
=head1 COPYRIGHT
-Copyright (c) 2001-2011 Ken Williams. All rights reserved.
+Original code Copyright (c) 2001-2011 Ken Williams.
+Additional code Copyright (c) 2010-2011 Matt Trout and David Golden.
+All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
diff --git a/cpan/Module-Metadata/t/lib/0_1/Foo.pm b/cpan/Module-Metadata/t/lib/0_1/Foo.pm
new file mode 100644
index 0000000000..f1ecacac37
--- /dev/null
+++ b/cpan/Module-Metadata/t/lib/0_1/Foo.pm
@@ -0,0 +1,3 @@
+package Foo;
+$Foo::VERSION = '0.1';
+1;
diff --git a/cpan/Module-Metadata/t/lib/0_2/Foo.pm b/cpan/Module-Metadata/t/lib/0_2/Foo.pm
new file mode 100644
index 0000000000..8f8ef06532
--- /dev/null
+++ b/cpan/Module-Metadata/t/lib/0_2/Foo.pm
@@ -0,0 +1,3 @@
+package Foo;
+$Foo::VERSION = '0.2';
+1;
diff --git a/cpan/Module-Metadata/t/metadata.t b/cpan/Module-Metadata/t/metadata.t
index f3d08aaae7..60cb31651d 100644
--- a/cpan/Module-Metadata/t/metadata.t
+++ b/cpan/Module-Metadata/t/metadata.t
@@ -4,6 +4,7 @@
use strict;
use lib 't/lib';
+use IO::File;
use MBTest;
# parse various module $VERSION lines
@@ -173,7 +174,7 @@ our $VERSION = '1.23_00_00';
);
my %modules = reverse @modules;
-plan tests => 37 + 2 * keys( %modules );
+plan tests => 39 + 2 * keys( %modules );
require_ok('Module::Metadata');
@@ -210,6 +211,14 @@ $file = File::Spec->catfile( 'lib', split( /::/, $dist->name ) ) . '.pm';
$pm_info = Module::Metadata->new_from_file( $file );
ok( defined( $pm_info ), 'new_from_file() succeeds' );
+# construct from filehandle
+my $handle = IO::File->new($file);
+$pm_info = Module::Metadata->new_from_handle( $handle, $file );
+ok( defined( $pm_info ), 'new_from_handle() succeeds' );
+$pm_info = Module::Metadata->new_from_handle( $handle );
+is( $pm_info, undef, "new_from_handle() without filename returns undef" );
+
+
# construct from module name, using custom include path
$pm_info = Module::Metadata->new_from_module(
$dist->name, inc => [ 'lib', @INC ] );
diff --git a/cpan/Module-Metadata/t/version.t b/cpan/Module-Metadata/t/version.t
new file mode 100644
index 0000000000..061a063177
--- /dev/null
+++ b/cpan/Module-Metadata/t/version.t
@@ -0,0 +1,22 @@
+use strict;
+use Test::More;
+use Module::Metadata;
+use lib "t/lib/0_2";
+
+plan tests => 4;
+
+require Foo;
+is $Foo::VERSION, 0.2;
+
+my $meta = Module::Metadata->new_from_module("Foo", inc => [ "t/lib/0_1" ] );
+is $meta->version, 0.1;
+
+is $Foo::VERSION, 0.2;
+
+ok eval "use Foo 0.2; 1";
+
+
+
+
+
+
diff --git a/cpan/Params-Check/lib/Params/Check.pm b/cpan/Params-Check/lib/Params/Check.pm
index a86256d2c6..c1365a9abe 100644
--- a/cpan/Params-Check/lib/Params/Check.pm
+++ b/cpan/Params-Check/lib/Params/Check.pm
@@ -5,8 +5,6 @@ use strict;
use Carp qw[carp croak];
use Locale::Maketext::Simple Style => 'gettext';
-use Data::Dumper;
-
BEGIN {
use Exporter ();
use vars qw[ @ISA $VERSION @EXPORT_OK $VERBOSE $ALLOW_UNKNOWN
@@ -18,7 +16,7 @@ BEGIN {
@ISA = qw[ Exporter ];
@EXPORT_OK = qw[check allow last_error];
- $VERSION = '0.30';
+ $VERSION = '0.32';
$VERBOSE = $^W ? 1 : 0;
$NO_DUPLICATES = 0;
$STRIP_LEADING_DASHES = 0;
diff --git a/dist/Attribute-Handlers/lib/Attribute/Handlers.pm b/dist/Attribute-Handlers/lib/Attribute/Handlers.pm
index 4333155a80..60b61ac1d3 100644
--- a/dist/Attribute-Handlers/lib/Attribute/Handlers.pm
+++ b/dist/Attribute-Handlers/lib/Attribute/Handlers.pm
@@ -4,7 +4,7 @@ use Carp;
use warnings;
use strict;
use vars qw($VERSION $AUTOLOAD);
-$VERSION = '0.91'; # remember to update version in POD!
+$VERSION = '0.92'; # remember to update version in POD!
# $DB::single=1;
my %symcache;
@@ -266,68 +266,68 @@ Attribute::Handlers - Simpler definition of attribute handlers
=head1 VERSION
-This document describes version 0.91 of Attribute::Handlers,
-released May 20, 2011.
+This document describes version 0.92 of Attribute::Handlers,
+released August 20, 2011.
=head1 SYNOPSIS
- package MyClass;
- require 5.006;
- use Attribute::Handlers;
- no warnings 'redefine';
+ package MyClass;
+ require 5.006;
+ use Attribute::Handlers;
+ no warnings 'redefine';
- sub Good : ATTR(SCALAR) {
- my ($package, $symbol, $referent, $attr, $data) = @_;
+ sub Good : ATTR(SCALAR) {
+ my ($package, $symbol, $referent, $attr, $data) = @_;
- # Invoked for any scalar variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
+ # Invoked for any scalar variable with a :Good attribute,
+ # provided the variable was declared in MyClass (or
+ # a derived class) or typed to MyClass.
- # Do whatever to $referent here (executed in CHECK phase).
- ...
- }
+ # Do whatever to $referent here (executed in CHECK phase).
+ ...
+ }
- sub Bad : ATTR(SCALAR) {
- # Invoked for any scalar variable with a :Bad attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- ...
- }
+ sub Bad : ATTR(SCALAR) {
+ # Invoked for any scalar variable with a :Bad attribute,
+ # provided the variable was declared in MyClass (or
+ # a derived class) or typed to MyClass.
+ ...
+ }
- sub Good : ATTR(ARRAY) {
- # Invoked for any array variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- ...
- }
+ sub Good : ATTR(ARRAY) {
+ # Invoked for any array variable with a :Good attribute,
+ # provided the variable was declared in MyClass (or
+ # a derived class) or typed to MyClass.
+ ...
+ }
- sub Good : ATTR(HASH) {
- # Invoked for any hash variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- ...
- }
+ sub Good : ATTR(HASH) {
+ # Invoked for any hash variable with a :Good attribute,
+ # provided the variable was declared in MyClass (or
+ # a derived class) or typed to MyClass.
+ ...
+ }
- sub Ugly : ATTR(CODE) {
- # Invoked for any subroutine declared in MyClass (or a
- # derived class) with an :Ugly attribute.
- ...
- }
+ sub Ugly : ATTR(CODE) {
+ # Invoked for any subroutine declared in MyClass (or a
+ # derived class) with an :Ugly attribute.
+ ...
+ }
- sub Omni : ATTR {
- # Invoked for any scalar, array, hash, or subroutine
- # with an :Omni attribute, provided the variable or
- # subroutine was declared in MyClass (or a derived class)
- # or the variable was typed to MyClass.
- # Use ref($_[2]) to determine what kind of referent it was.
- ...
- }
+ sub Omni : ATTR {
+ # Invoked for any scalar, array, hash, or subroutine
+ # with an :Omni attribute, provided the variable or
+ # subroutine was declared in MyClass (or a derived class)
+ # or the variable was typed to MyClass.
+ # Use ref($_[2]) to determine what kind of referent it was.
+ ...
+ }
- use Attribute::Handlers autotie => { Cycle => Tie::Cycle };
+ use Attribute::Handlers autotie => { Cycle => Tie::Cycle };
- my $next : Cycle(['A'..'Z']);
+ my $next : Cycle(['A'..'Z']);
=head1 DESCRIPTION
@@ -349,7 +349,8 @@ attribute C<:ATTR>. For example:
use Attribute::Handlers;
sub Loud :ATTR {
- my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_;
+ my ($package, $symbol, $referent, $attr, $data, $phase,
+ $filename, $linenum) = @_;
print STDERR
ref($referent), " ",
*{$symbol}{NAME}, " ",
@@ -364,9 +365,9 @@ This creates a handler for the attribute C<:Loud> in the class LoudDecl.
Thereafter, any subroutine declared with a C<:Loud> attribute in the class
LoudDecl:
- package LoudDecl;
-
- sub foo: Loud {...}
+ package LoudDecl;
+
+ sub foo: Loud {...}
causes the above handler to be invoked, and passed:
@@ -409,11 +410,11 @@ the line number in this file.
Likewise, declaring any variables with the C<:Loud> attribute within the
package:
- package LoudDecl;
+ package LoudDecl;
- my $foo :Loud;
- my @foo :Loud;
- my %foo :Loud;
+ my $foo :Loud;
+ my @foo :Loud;
+ my %foo :Loud;
will cause the handler to be called with a similar argument list (except,
of course, that C<$_[2]> will be a reference to the variable).
@@ -474,11 +475,11 @@ Regardless of the package in which it is declared, if a lexical variable is
ascribed an attribute, the handler that is invoked is the one belonging to
the package to which it is typed. For example, the following declarations:
- package OtherClass;
+ package OtherClass;
- my LoudDecl $loudobj : Loud;
- my LoudDecl @loudobjs : Loud;
- my LoudDecl %loudobjex : Loud;
+ my LoudDecl $loudobj : Loud;
+ my LoudDecl @loudobjs : Loud;
+ my LoudDecl %loudobjex : Loud;
causes the LoudDecl::Loud handler to be invoked (even if OtherClass also
defines a handler for C<:Loud> attributes).
@@ -491,40 +492,40 @@ given the name of a built-in type (C<SCALAR>, C<ARRAY>, C<HASH>, or C<CODE>),
the handler is only applied to declarations of that type. For example,
the following definition:
- package LoudDecl;
+ package LoudDecl;
- sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" }
+ sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" }
creates an attribute handler that applies only to scalars:
- package Painful;
- use base LoudDecl;
+ package Painful;
+ use base LoudDecl;
- my $metal : RealLoud; # invokes &LoudDecl::RealLoud
- my @metal : RealLoud; # error: unknown attribute
- my %metal : RealLoud; # error: unknown attribute
- sub metal : RealLoud {...} # error: unknown attribute
+ my $metal : RealLoud; # invokes &LoudDecl::RealLoud
+ my @metal : RealLoud; # error: unknown attribute
+ my %metal : RealLoud; # error: unknown attribute
+ sub metal : RealLoud {...} # error: unknown attribute
You can, of course, declare separate handlers for these types as well
(but you'll need to specify C<no warnings 'redefine'> to do it quietly):
- package LoudDecl;
- use Attribute::Handlers;
- no warnings 'redefine';
+ package LoudDecl;
+ use Attribute::Handlers;
+ no warnings 'redefine';
- sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" }
- sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" }
- sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" }
- sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" }
+ sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" }
+ sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" }
+ sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" }
+ sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" }
You can also explicitly indicate that a single handler is meant to be
used for all types of referents like so:
- package LoudDecl;
- use Attribute::Handlers;
+ package LoudDecl;
+ use Attribute::Handlers;
- sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" }
+ sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" }
(I.e. C<ATTR(ANY)> is a synonym for C<:ATTR>).
@@ -538,14 +539,14 @@ the handler get in the way.
You can turn off that eagerness-to-help by declaring
an attribute handler with the keyword C<RAWDATA>. For example:
- sub Raw : ATTR(RAWDATA) {...}
- sub Nekkid : ATTR(SCALAR,RAWDATA) {...}
- sub Au::Naturale : ATTR(RAWDATA,ANY) {...}
+ sub Raw : ATTR(RAWDATA) {...}
+ sub Nekkid : ATTR(SCALAR,RAWDATA) {...}
+ sub Au::Naturale : ATTR(RAWDATA,ANY) {...}
Then the handler makes absolutely no attempt to interpret the data it
receives and simply passes it as a string:
- my $power : Raw(1..100); # handlers receives "1..100"
+ my $power : Raw(1..100); # handlers receives "1..100"
=head2 Phase-specific attribute handlers
@@ -559,11 +560,11 @@ other points in the program's compilation or execution, by explicitly
stating the phase (or phases) in which you wish the attribute handler to
be called. For example:
- sub Early :ATTR(SCALAR,BEGIN) {...}
- sub Normal :ATTR(SCALAR,CHECK) {...}
- sub Late :ATTR(SCALAR,INIT) {...}
- sub Final :ATTR(SCALAR,END) {...}
- sub Bookends :ATTR(SCALAR,BEGIN,END) {...}
+ sub Early :ATTR(SCALAR,BEGIN) {...}
+ sub Normal :ATTR(SCALAR,CHECK) {...}
+ sub Late :ATTR(SCALAR,INIT) {...}
+ sub Final :ATTR(SCALAR,END) {...}
+ sub Bookends :ATTR(SCALAR,BEGIN,END) {...}
As the last example indicates, a handler may be set up to be (re)called in
two or more phases. The phase name is passed as the handler's final argument.
@@ -578,24 +579,24 @@ subsequently defined C<BEGIN> blocks are executed).
Attributes make an excellent and intuitive interface through which to tie
variables. For example:
- use Attribute::Handlers;
- use Tie::Cycle;
-
- sub UNIVERSAL::Cycle : ATTR(SCALAR) {
- my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
- $data = [ $data ] unless ref $data eq 'ARRAY';
- tie $$referent, 'Tie::Cycle', $data;
- }
-
- # and thereafter...
-
- package main;
+ use Attribute::Handlers;
+ use Tie::Cycle;
+
+ sub UNIVERSAL::Cycle : ATTR(SCALAR) {
+ my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
+ $data = [ $data ] unless ref $data eq 'ARRAY';
+ tie $$referent, 'Tie::Cycle', $data;
+ }
- my $next : Cycle('A'..'Z'); # $next is now a tied variable
+ # and thereafter...
- while (<>) {
- print $next;
- }
+ package main;
+
+ my $next : Cycle('A'..'Z'); # $next is now a tied variable
+
+ while (<>) {
+ print $next;
+ }
Note that, because the C<Cycle> attribute receives its arguments in the
C<$data> variable, if the attribute is given a list of arguments, C<$data>
@@ -604,16 +605,16 @@ single argument directly. Since Tie::Cycle requires its cycling values to
be passed as an array reference, this means that we need to wrap
non-array-reference arguments in an array constructor:
- $data = [ $data ] unless ref $data eq 'ARRAY';
+ $data = [ $data ] unless ref $data eq 'ARRAY';
Typically, however, things are the other way around: the tieable class expects
its arguments as a flattened list, so the attribute looks like:
- sub UNIVERSAL::Cycle : ATTR(SCALAR) {
- my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
- my @data = ref $data eq 'ARRAY' ? @$data : $data;
- tie $$referent, 'Tie::Whatever', @data;
- }
+ sub UNIVERSAL::Cycle : ATTR(SCALAR) {
+ my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
+ my @data = ref $data eq 'ARRAY' ? @$data : $data;
+ tie $$referent, 'Tie::Whatever', @data;
+ }
This software pattern is so widely applicable that Attribute::Handlers
@@ -621,16 +622,17 @@ provides a way to automate it: specifying C<'autotie'> in the
C<use Attribute::Handlers> statement. So, the cycling example,
could also be written:
- use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' };
+ use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' };
- # and thereafter...
+ # and thereafter...
- package main;
+ package main;
- my $next : Cycle(['A'..'Z']); # $next is now a tied variable
+ my $next : Cycle(['A'..'Z']); # $next is now a tied variable
- while (<>) {
- print $next;
+ while (<>) {
+ print $next;
+ }
Note that we now have to pass the cycling values as an array reference,
since the C<autotie> mechanism passes C<tie> a list of arguments as a list
@@ -646,28 +648,29 @@ Attribute::Handlers takes care of that automagically. You can even pass
arguments to the module's C<import> subroutine, by appending them to the
class name. For example:
- use Attribute::Handlers
- autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' };
+ use Attribute::Handlers
+ autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' };
If the attribute name is unqualified, the attribute is installed in the
current package. Otherwise it is installed in the qualifier's package:
- package Here;
-
- use Attribute::Handlers autotie => {
- Other::Good => Tie::SecureHash, # tie attr installed in Other::
- Bad => Tie::Taxes, # tie attr installed in Here::
- UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere
- };
+ package Here;
+
+ use Attribute::Handlers autotie => {
+ Other::Good => Tie::SecureHash, # tie attr installed in Other::
+ Bad => Tie::Taxes, # tie attr installed in Here::
+ UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere
+ };
Autoties are most commonly used in the module to which they actually tie,
and need to export their attributes to any module that calls them. To
facilitate this, Attribute::Handlers recognizes a special "pseudo-class" --
C<__CALLER__>, which may be specified as the qualifier of an attribute:
- package Tie::Me::Kangaroo:Down::Sport;
-
- use Attribute::Handlers autotie => { '__CALLER__::Roo' => __PACKAGE__ };
+ package Tie::Me::Kangaroo:Down::Sport;
+
+ use Attribute::Handlers autotie =>
+ { '__CALLER__::Roo' => __PACKAGE__ };
This causes Attribute::Handlers to define the C<Roo> attribute in the package
that imports the Tie::Me::Kangaroo:Down::Sport module.
@@ -682,22 +685,22 @@ to the TIESCALAR, TIEHASH, etc. that ties it.
The C<autotie> mechanism supports this too. The following code:
- use Attribute::Handlers autotieref => { Selfish => Tie::Selfish };
- my $var : Selfish(@args);
+ use Attribute::Handlers autotieref => { Selfish => Tie::Selfish };
+ my $var : Selfish(@args);
has the same effect as:
- tie my $var, 'Tie::Selfish', @args;
+ tie my $var, 'Tie::Selfish', @args;
But when C<"autotieref"> is used instead of C<"autotie">:
- use Attribute::Handlers autotieref => { Selfish => Tie::Selfish };
- my $var : Selfish(@args);
+ use Attribute::Handlers autotieref => { Selfish => Tie::Selfish };
+ my $var : Selfish(@args);
the effect is to pass the C<tie> call an extra reference to the variable
being tied:
- tie my $var, 'Tie::Selfish', \$var, @args;
+ tie my $var, 'Tie::Selfish', \$var, @args;
@@ -706,142 +709,142 @@ being tied:
If the class shown in L</SYNOPSIS> were placed in the MyClass.pm
module, then the following code:
- package main;
- use MyClass;
+ package main;
+ use MyClass;
- my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous);
+ my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous);
- package SomeOtherClass;
- use base MyClass;
+ package SomeOtherClass;
+ use base MyClass;
- sub tent { 'acle' }
+ sub tent { 'acle' }
- sub fn :Ugly(sister) :Omni('po',tent()) {...}
- my @arr :Good :Omni(s/cie/nt/);
- my %hsh :Good(q/bye/) :Omni(q/bus/);
+ sub fn :Ugly(sister) :Omni('po',tent()) {...}
+ my @arr :Good :Omni(s/cie/nt/);
+ my %hsh :Good(q/bye/) :Omni(q/bus/);
would cause the following handlers to be invoked:
- # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous);
-
- MyClass::Good:ATTR(SCALAR)( 'MyClass', # class
- 'LEXICAL', # no typeglob
- \$slr, # referent
- 'Good', # attr name
- undef # no attr data
- 'CHECK', # compiler phase
- );
-
- MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class
- 'LEXICAL', # no typeglob
- \$slr, # referent
- 'Bad', # attr name
- 0 # eval'd attr data
- 'CHECK', # compiler phase
- );
-
- MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class
- 'LEXICAL', # no typeglob
- \$slr, # referent
- 'Omni', # attr name
- '-vorous' # eval'd attr data
- 'CHECK', # compiler phase
- );
-
-
- # sub fn :Ugly(sister) :Omni('po',tent()) {...}
-
- MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class
- \*SomeOtherClass::fn, # typeglob
- \&SomeOtherClass::fn, # referent
- 'Ugly', # attr name
- 'sister' # eval'd attr data
- 'CHECK', # compiler phase
- );
-
- MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class
- \*SomeOtherClass::fn, # typeglob
- \&SomeOtherClass::fn, # referent
- 'Omni', # attr name
- ['po','acle'] # eval'd attr data
- 'CHECK', # compiler phase
- );
-
-
- # my @arr :Good :Omni(s/cie/nt/);
-
- MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class
- 'LEXICAL', # no typeglob
- \@arr, # referent
- 'Good', # attr name
- undef # no attr data
- 'CHECK', # compiler phase
- );
-
- MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class
- 'LEXICAL', # no typeglob
- \@arr, # referent
- 'Omni', # attr name
- "" # eval'd attr data
- 'CHECK', # compiler phase
- );
-
-
- # my %hsh :Good(q/bye) :Omni(q/bus/);
-
- MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class
- 'LEXICAL', # no typeglob
- \%hsh, # referent
- 'Good', # attr name
- 'q/bye' # raw attr data
- 'CHECK', # compiler phase
- );
-
- MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class
- 'LEXICAL', # no typeglob
- \%hsh, # referent
- 'Omni', # attr name
- 'bus' # eval'd attr data
- 'CHECK', # compiler phase
- );
+ # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous);
+
+ MyClass::Good:ATTR(SCALAR)( 'MyClass', # class
+ 'LEXICAL', # no typeglob
+ \$slr, # referent
+ 'Good', # attr name
+ undef # no attr data
+ 'CHECK', # compiler phase
+ );
+
+ MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class
+ 'LEXICAL', # no typeglob
+ \$slr, # referent
+ 'Bad', # attr name
+ 0 # eval'd attr data
+ 'CHECK', # compiler phase
+ );
+
+ MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class
+ 'LEXICAL', # no typeglob
+ \$slr, # referent
+ 'Omni', # attr name
+ '-vorous' # eval'd attr data
+ 'CHECK', # compiler phase
+ );
+
+
+ # sub fn :Ugly(sister) :Omni('po',tent()) {...}
+
+ MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class
+ \*SomeOtherClass::fn, # typeglob
+ \&SomeOtherClass::fn, # referent
+ 'Ugly', # attr name
+ 'sister' # eval'd attr data
+ 'CHECK', # compiler phase
+ );
+
+ MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class
+ \*SomeOtherClass::fn, # typeglob
+ \&SomeOtherClass::fn, # referent
+ 'Omni', # attr name
+ ['po','acle'] # eval'd attr data
+ 'CHECK', # compiler phase
+ );
+
+
+ # my @arr :Good :Omni(s/cie/nt/);
+
+ MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class
+ 'LEXICAL', # no typeglob
+ \@arr, # referent
+ 'Good', # attr name
+ undef # no attr data
+ 'CHECK', # compiler phase
+ );
+
+ MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class
+ 'LEXICAL', # no typeglob
+ \@arr, # referent
+ 'Omni', # attr name
+ "" # eval'd attr data
+ 'CHECK', # compiler phase
+ );
+
+
+ # my %hsh :Good(q/bye) :Omni(q/bus/);
+
+ MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class
+ 'LEXICAL', # no typeglob
+ \%hsh, # referent
+ 'Good', # attr name
+ 'q/bye' # raw attr data
+ 'CHECK', # compiler phase
+ );
+
+ MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class
+ 'LEXICAL', # no typeglob
+ \%hsh, # referent
+ 'Omni', # attr name
+ 'bus' # eval'd attr data
+ 'CHECK', # compiler phase
+ );
Installing handlers into UNIVERSAL, makes them...err..universal.
For example:
- package Descriptions;
- use Attribute::Handlers;
+ package Descriptions;
+ use Attribute::Handlers;
- my %name;
- sub name { return $name{$_[2]}||*{$_[1]}{NAME} }
+ my %name;
+ sub name { return $name{$_[2]}||*{$_[1]}{NAME} }
- sub UNIVERSAL::Name :ATTR {
- $name{$_[2]} = $_[4];
- }
+ sub UNIVERSAL::Name :ATTR {
+ $name{$_[2]} = $_[4];
+ }
- sub UNIVERSAL::Purpose :ATTR {
- print STDERR "Purpose of ", &name, " is $_[4]\n";
- }
+ sub UNIVERSAL::Purpose :ATTR {
+ print STDERR "Purpose of ", &name, " is $_[4]\n";
+ }
- sub UNIVERSAL::Unit :ATTR {
- print STDERR &name, " measured in $_[4]\n";
- }
+ sub UNIVERSAL::Unit :ATTR {
+ print STDERR &name, " measured in $_[4]\n";
+ }
Let's you write:
- use Descriptions;
+ use Descriptions;
- my $capacity : Name(capacity)
- : Purpose(to store max storage capacity for files)
- : Unit(Gb);
+ my $capacity : Name(capacity)
+ : Purpose(to store max storage capacity for files)
+ : Unit(Gb);
- package Other;
+ package Other;
- sub foo : Purpose(to foo all data before barring it) { }
+ sub foo : Purpose(to foo all data before barring it) { }
- # etc.
+ # etc.
=head1 UTILITY FUNCTIONS
@@ -851,7 +854,7 @@ This module offers a single utility function, C<findsym()>.
=item findsym
- my $symbol = Attribute::Handlers::findsym($package, $referent);
+ my $symbol = Attribute::Handlers::findsym($package, $referent);
The function looks in the symbol table of C<$package> for the typeglob for
C<$referent>, which is a reference to a variable or subroutine (SCALAR, ARRAY,
diff --git a/dist/B-Deparse/Deparse.pm b/dist/B-Deparse/Deparse.pm
index 08129933a5..cb60bae653 100644
--- a/dist/B-Deparse/Deparse.pm
+++ b/dist/B-Deparse/Deparse.pm
@@ -1553,7 +1553,7 @@ sub keyword {
: "CORE::$name";
}
if (
- $name !~ /^(?:chom?p|exec|system|l?stat)\z/
+ $name !~ /^(?:chom?p|exec|s(?:elect|ystem))\z/
&& !defined eval{prototype "CORE::$name"}
) { return $name }
if (
diff --git a/dist/Cwd/lib/File/Spec.pm b/dist/Cwd/lib/File/Spec.pm
index 34c527eea2..2d60b89a3c 100644
--- a/dist/Cwd/lib/File/Spec.pm
+++ b/dist/Cwd/lib/File/Spec.pm
@@ -3,7 +3,7 @@ package File::Spec;
use strict;
use vars qw(@ISA $VERSION);
-$VERSION = '3.33';
+$VERSION = '3.34';
$VERSION = eval $VERSION;
my %module = (MacOS => 'Mac',
@@ -199,8 +199,10 @@ X<splitpath> X<split, path>
Splits a path in to volume, directory, and filename portions. On systems
with no concept of volume, returns '' for volume.
- ($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+ ($volume,$directories,$file) =
+ File::Spec->splitpath( $path );
+ ($volume,$directories,$file) =
+ File::Spec->splitpath( $path, $no_file );
For systems with no syntax differentiating filenames from directories,
assumes that the last file is a path unless C<$no_file> is true or a
diff --git a/dist/Cwd/lib/File/Spec/Mac.pm b/dist/Cwd/lib/File/Spec/Mac.pm
index f47293cb2d..1fa533cd36 100644
--- a/dist/Cwd/lib/File/Spec/Mac.pm
+++ b/dist/Cwd/lib/File/Spec/Mac.pm
@@ -4,7 +4,7 @@ use strict;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.34';
+$VERSION = '3.35';
$VERSION = eval $VERSION;
@ISA = qw(File::Spec::Unix);
@@ -156,13 +156,16 @@ their Unix counterparts:
Unix:
Unix->catdir("","") = "/"
Unix->catdir("",".") = "/"
- Unix->catdir("","..") = "/" # can't go beyond root
+ Unix->catdir("","..") = "/" # can't go
+ # beyond root
Unix->catdir("",".","..","..","a") = "/a"
Mac:
- Mac->catdir("","") = rootdir() # (e.g. "HD:")
+ Mac->catdir("","") = rootdir() # (e.g. "HD:")
Mac->catdir("",":") = rootdir()
- Mac->catdir("","::") = rootdir() # can't go beyond root
- Mac->catdir("",":","::","::","a") = rootdir() . "a:" # (e.g. "HD:a:")
+ Mac->catdir("","::") = rootdir() # can't go
+ # beyond root
+ Mac->catdir("",":","::","::","a") = rootdir() . "a:"
+ # (e.g. "HD:a:")
However, this approach is limited to the first arguments following
"root" (again, see C<Unix-E<gt>canonpath()> ). If there are more
@@ -400,10 +403,11 @@ the filename '' is always considered to be absolute. Note that with version
E.g.
- File::Spec->file_name_is_absolute("a"); # false (relative)
- File::Spec->file_name_is_absolute(":a:b:"); # false (relative)
- File::Spec->file_name_is_absolute("MacintoshHD:"); # true (absolute)
- File::Spec->file_name_is_absolute(""); # true (absolute)
+ File::Spec->file_name_is_absolute("a"); # false (relative)
+ File::Spec->file_name_is_absolute(":a:b:"); # false (relative)
+ File::Spec->file_name_is_absolute("MacintoshHD:");
+ # true (absolute)
+ File::Spec->file_name_is_absolute(""); # true (absolute)
=cut
@@ -440,7 +444,8 @@ sub path {
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path,
+ $no_file );
Splits a path into volume, directory, and filename portions.
diff --git a/dist/Cwd/lib/File/Spec/Unix.pm b/dist/Cwd/lib/File/Spec/Unix.pm
index b276b21392..9f024e00be 100644
--- a/dist/Cwd/lib/File/Spec/Unix.pm
+++ b/dist/Cwd/lib/File/Spec/Unix.pm
@@ -3,7 +3,7 @@ package File::Spec::Unix;
use strict;
use vars qw($VERSION);
-$VERSION = '3.33';
+$VERSION = '3.34';
$VERSION = eval $VERSION;
=head1 NAME
@@ -238,7 +238,8 @@ sub join {
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path,
+ $no_file );
Splits a path into volume, directory, and filename portions. On systems
with no concept of volume, returns '' for volume.
diff --git a/dist/Cwd/lib/File/Spec/VMS.pm b/dist/Cwd/lib/File/Spec/VMS.pm
index 120575a3e0..9164dbcc59 100644
--- a/dist/Cwd/lib/File/Spec/VMS.pm
+++ b/dist/Cwd/lib/File/Spec/VMS.pm
@@ -4,7 +4,7 @@ use strict;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.34';
+$VERSION = '3.35';
$VERSION = eval $VERSION;
@ISA = qw(File::Spec::Unix);
@@ -602,7 +602,8 @@ sub file_name_is_absolute {
=item splitpath (override)
($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path,
+ $no_file );
Passing a true value for C<$no_file> indicates that the path being
split only contains directory components, even on systems where you
diff --git a/dist/Cwd/lib/File/Spec/Win32.pm b/dist/Cwd/lib/File/Spec/Win32.pm
index 81c0960bb5..fa5c3b16a6 100644
--- a/dist/Cwd/lib/File/Spec/Win32.pm
+++ b/dist/Cwd/lib/File/Spec/Win32.pm
@@ -5,7 +5,7 @@ use strict;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.34';
+$VERSION = '3.35';
$VERSION = eval $VERSION;
@ISA = qw(File::Spec::Unix);
@@ -189,7 +189,8 @@ sub canonpath {
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path,
+ $no_file );
Splits a path into volume, directory, and filename portions. Assumes that
the last file is a path unless the path ends in '\\', '\\.', '\\..'
diff --git a/dist/Data-Dumper/Dumper.pm b/dist/Data-Dumper/Dumper.pm
index d30c66cc60..748dd545f4 100644
--- a/dist/Data-Dumper/Dumper.pm
+++ b/dist/Data-Dumper/Dumper.pm
@@ -9,7 +9,7 @@
package Data::Dumper;
-$VERSION = '2.131'; # Don't forget to set version and release date in POD!
+$VERSION = '2.132'; # Don't forget to set version and release date in POD!
#$| = 1;
@@ -1106,20 +1106,20 @@ distribution for more examples.)
print($@) if $@;
print Dumper($boo), Dumper($bar); # pretty print (no array indices)
- $Data::Dumper::Terse = 1; # don't output names where feasible
- $Data::Dumper::Indent = 0; # turn off all pretty print
+ $Data::Dumper::Terse = 1; # don't output names where feasible
+ $Data::Dumper::Indent = 0; # turn off all pretty print
print Dumper($boo), "\n";
- $Data::Dumper::Indent = 1; # mild pretty print
+ $Data::Dumper::Indent = 1; # mild pretty print
print Dumper($boo);
- $Data::Dumper::Indent = 3; # pretty print with array indices
+ $Data::Dumper::Indent = 3; # pretty print with array indices
print Dumper($boo);
- $Data::Dumper::Useqq = 1; # print strings in double quotes
+ $Data::Dumper::Useqq = 1; # print strings in double quotes
print Dumper($boo);
- $Data::Dumper::Pair = " : "; # specify hash key/value separator
+ $Data::Dumper::Pair = " : "; # specify hash key/value separator
print Dumper($boo);
@@ -1297,7 +1297,7 @@ modify it under the same terms as Perl itself.
=head1 VERSION
-Version 2.131 (May 27 2011)
+Version 2.132 (August 20 2011)
=head1 SEE ALSO
diff --git a/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm b/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm
index afc52a5188..b4b7f7580f 100644
--- a/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm
+++ b/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm
@@ -383,7 +383,8 @@ the configuration information for a separate perl installation and
pass that in.
my $yoda_cfg = get_fake_config('yoda');
- my $yoda_inst = ExtUtils::Installed->new(config_override=>$yoda_cfg);
+ my $yoda_inst =
+ ExtUtils::Installed->new(config_override=>$yoda_cfg);
Similarly, the parameter C<inc_override> may be a reference to an
array which is used in place of the default module search paths
@@ -399,7 +400,8 @@ you will want to set both together.
The parameter C<extra_libs> can be used to specify B<additional> paths to
search for installed modules. For instance
- my $installed = ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]);
+ my $installed =
+ ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]);
This should only be necessary if C</my/lib/path> is not in PERL5LIB.
diff --git a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm
index ce4314c419..40df070af7 100644
--- a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm
+++ b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm
@@ -13,7 +13,7 @@ use vars qw($VERSION @ISA @EXPORT_OK
$Is_MacOS $Is_VMS $Is_VMS_mode $Is_VMS_lc $Is_VMS_nodot
$Debug $Verbose $Quiet $MANIFEST $DEFAULT_MSKIP);
-$VERSION = '1.58';
+$VERSION = '1.59';
@ISA=('Exporter');
@EXPORT_OK = qw(mkmanifest
manicheck filecheck fullcheck skipcheck
@@ -706,21 +706,36 @@ sub maniadd {
}
-# Sometimes MANIFESTs are missing a trailing newline. Fix this.
+# Make sure this MANIFEST is consistently written with native
+# newlines and has a terminal newline.
sub _fix_manifest {
my $manifest_file = shift;
open MANIFEST, $MANIFEST or die "Could not open $MANIFEST: $!";
-
- # Yes, we should be using seek(), but I'd like to avoid loading POSIX
- # to get SEEK_*
- my @manifest = <MANIFEST>;
+ local $/;
+ my @manifest = split /(\015\012|\012|\015)/, <MANIFEST>, -1;
close MANIFEST;
+ my $must_rewrite = "";
+ if ($manifest[-1] eq ""){
+ # sane case: last line had a terminal newline
+ pop @manifest;
+ for (my $i=1; $i<=$#manifest; $i+=2) {
+ unless ($manifest[$i] eq "\n") {
+ $must_rewrite = "not a newline at pos $i";
+ last;
+ }
+ }
+ } else {
+ $must_rewrite = "last line without newline";
+ }
- unless( $manifest[-1] =~ /\n\z/ ) {
- open MANIFEST, ">>$MANIFEST" or die "Could not open $MANIFEST: $!";
- print MANIFEST "\n";
- close MANIFEST;
+ if ( $must_rewrite ) {
+ 1 while unlink $MANIFEST; # avoid multiple versions on VMS
+ open MANIFEST, ">", $MANIFEST or die "(must_rewrite=$must_rewrite) Could not open >$MANIFEST: $!";
+ for (my $i=0; $i<=$#manifest; $i+=2) {
+ print MANIFEST "$manifest[$i]\n";
+ }
+ close MANIFEST or die "could not write $MANIFEST: $!";
}
}
diff --git a/dist/ExtUtils-Manifest/t/Manifest.t b/dist/ExtUtils-Manifest/t/Manifest.t
index 91b126b20e..8d2ff8b91e 100644
--- a/dist/ExtUtils-Manifest/t/Manifest.t
+++ b/dist/ExtUtils-Manifest/t/Manifest.t
@@ -13,7 +13,7 @@ chdir 't';
use strict;
-use Test::More tests => 94;
+use Test::More tests => 96;
use Cwd;
use File::Spec;
@@ -231,6 +231,48 @@ is( $files->{wibble}, '', 'maniadd() with undef comment' );
is( $files->{yarrow}, 'hock',' with comment' );
is( $files->{foobar}, '', ' preserved old entries' );
+{
+ # EOL normalization in maniadd()
+
+ # move manifest away:
+ rename "MANIFEST", "MANIFEST.bak" or die "Could not rename MANIFEST to MANIFEST.bak: $!";
+ my $prev_maniaddresult;
+ my @eol = ("\012","\015","\015\012");
+ # for all line-endings:
+ for my $i (0..$#eol) {
+ my $eol = $eol[$i];
+ # cp the backup of the manifest to MANIFEST, line-endings adjusted
+ my $content = do { local $/; open my $fh, "MANIFEST.bak" or die; <$fh> };
+ SPLITTER: for my $eol2 (@eol) {
+ if ( index($content, $eol2) > -1 ) {
+ my @lines = split /$eol2/, $content;
+ pop @lines while $lines[-1] eq "";
+ open my $fh, ">", "MANIFEST" or die "Could not open >MANIFEST: $!";
+ print $fh map { "$_$eol" } @lines;
+ close $fh or die "Could not close: $!";
+ last SPLITTER;
+ }
+ }
+ # try maniadd
+ maniadd({eoltest => "end of line normalization test"});
+ # slurp result and compare to previous result
+ my $maniaddresult = do { local $/; open my $fh, "MANIFEST" or die; <$fh> };
+ if ($prev_maniaddresult) {
+ if ( $maniaddresult eq $prev_maniaddresult ) {
+ pass "normalization success with i=$i";
+ } else {
+ require Data::Dumper;
+ local $Data::Dumper::Useqq = 1;
+ local $Data::Dumper::Terse = 1;
+ is Data::Dumper::Dumper($maniaddresult), Data::Dumper::Dumper($prev_maniaddresult), "eol normalization failed with i=$i";
+ }
+ }
+ $prev_maniaddresult = $maniaddresult;
+ }
+ # move backup over MANIFEST
+ rename "MANIFEST.bak", "MANIFEST" or die "Could not rename MANIFEST.bak to MANIFEST: $!";
+}
+
my %funky_files;
# test including a filename with a space
SKIP: {
diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes
index e667a2aaf8..e8533baf8f 100644
--- a/dist/ExtUtils-ParseXS/Changes
+++ b/dist/ExtUtils-ParseXS/Changes
@@ -1,5 +1,21 @@
Revision history for Perl extension ExtUtils::ParseXS.
+ - No detects and throws a warning if there is a CODE section using
+ RETVAL, but no OUTPUT section. [CPAN RT #69536]
+
+3.03 - Thu Aug 11 08:24:00 CET 2011
+
+ - Test fix: Try all @INC-derived typemap locations. (CPAN RT #70047)
+ [Mike Sheldrake]
+
+3.02 - Thu Aug 4 18:19:00 CET 2011
+
+ - Test fix: Use File::Spec->catfile instead of catdir where appropriate.
+
+3.01 - Thu Aug 4 17:51:00 CET 2011
+
+ - No significant changes form 3.00_05.
+
3.00_05 - Wed Jul 27 22:54:00 CET 2011
- Define PERL_UNUSED_ARG for pre-3.8.9 perls.
diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
index 8a2658ff23..e63b133f76 100644
--- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
+++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
@@ -35,7 +35,7 @@ our @EXPORT_OK = qw(
process_file
report_error_count
);
-our $VERSION = '3.00_05';
+our $VERSION = '3.03_01';
$VERSION = eval $VERSION if $VERSION =~ /_/;
# The scalars in the line below remain as 'our' variables because pulling
@@ -597,6 +597,9 @@ EOF
}
}
+ # These are set if OUTPUT is found and/or CODE using RETVAL
+ $self->{have_OUTPUT} = $self->{have_CODE_with_RETVAL} = 0;
+
my ($wantRETVAL);
# do code
if (/^\s*NOT_IMPLEMENTED_YET/) {
@@ -631,7 +634,10 @@ EOF
print "\tPUTBACK;\n\treturn;\n";
}
elsif ($self->check_keyword("CODE")) {
- $self->print_section();
+ my $consumed_code = $self->print_section();
+ if ($consumed_code =~ /\bRETVAL\b/) {
+ $self->{have_CODE_with_RETVAL} = 1;
+ }
}
elsif (defined($class) and $func_name eq "DESTROY") {
print "\n\t";
@@ -672,8 +678,14 @@ EOF
# $wantRETVAL set if 'RETVAL =' autogenerated
($wantRETVAL, $self->{ret_type}) = (0, 'void') if $RETVAL_no_return;
undef %{ $self->{outargs} };
+
$self->process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE|OVERLOAD");
+ # A CODE section with RETVAL, but no OUTPUT? FAIL!
+ if ($self->{have_CODE_with_RETVAL} and not $self->{have_OUTPUT} and $self->{ret_type} ne 'void') {
+ $self->Warn("Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section.");
+ }
+
generate_output( {
type => $self->{var_types}->{$_},
num => $self->{args_match}->{$_},
@@ -1000,12 +1012,17 @@ sub print_section {
# the "do" is required for right semantics
do { $_ = shift(@{ $self->{line} }) } while !/\S/ && @{ $self->{line} };
+ my $consumed_code = '';
+
print("#line ", $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} } -1], " \"$self->{filepathname}\"\n")
if $self->{WantLineNumbers} && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/;
for (; defined($_) && !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) {
print "$_\n";
+ $consumed_code .= "$_\n";
}
print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $self->{WantLineNumbers};
+
+ return $consumed_code;
}
sub merge_section {
@@ -1137,6 +1154,8 @@ sub INPUT_handler {
sub OUTPUT_handler {
my $self = shift;
+ $self->{have_OUTPUT} = 1;
+
$_ = shift;
for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) {
next unless /\S/;
diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
index 0f5d12c840..7ecc7777cd 100644
--- a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
+++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
@@ -2,7 +2,7 @@ package ExtUtils::Typemaps;
use 5.006001;
use strict;
use warnings;
-our $VERSION = '1.00';
+our $VERSION = '1.01';
#use Carp qw(croak);
require ExtUtils::ParseXS;
@@ -26,9 +26,14 @@ ExtUtils::Typemaps - Read/Write/Modify Perl/XS typemap files
# add a mapping
$typemap->add_typemap(ctype => 'NV', xstype => 'T_NV');
- $typemap->add_inputmap (xstype => 'T_NV', code => '$var = ($type)SvNV($arg);');
- $typemap->add_outputmap(xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);');
- $typemap->add_string(string => $typemapstring); # will be parsed and merged
+ $typemap->add_inputmap(
+ xstype => 'T_NV', code => '$var = ($type)SvNV($arg);'
+ );
+ $typemap->add_outputmap(
+ xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);'
+ );
+ $typemap->add_string(string => $typemapstring);
+ # will be parsed and merged
# remove a mapping (same for remove_typemap and remove_outputmap...)
$typemap->remove_inputmap(xstype => 'SomeType');
@@ -732,7 +737,10 @@ corresponding OUTPUT code:
'T_OUT' => ' {
GV *gv = newGVgen("$Package");
if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ sv_setsv(
+ $arg,
+ sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))
+ );
else
$arg = &PL_sv_undef;
}
diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm
index d29cae4e82..52baa54ec5 100644
--- a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm
+++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm
@@ -109,10 +109,11 @@ If the optimization can not be applied, this returns undef.
If it can be applied, this method returns a hash reference containing
the following information:
- type: Any of the characters i, u, n, p
+ type: Any of the characters i, u, n, p
with_size: Bool indicating whether this is the sv_setpvn variant
- what: The code that actually evaluates to the output scalar
- what_size: If "with_size", this has the string length (as code, not constant)
+ what: The code that actually evaluates to the output scalar
+ what_size: If "with_size", this has the string length (as code,
+ not constant)
=cut
diff --git a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
index e9e7e59650..3de8d9d3b9 100644
--- a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
+++ b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
@@ -17,7 +17,20 @@ use ExtUtils::ParseXS::Utilities qw(
skip "No lib/ExtUtils/ directories under directories in \@INC",
1
unless @stl > 9;
- ok( -f $stl[-10],
+
+ # We check only as many location entries from the start of the array
+ # (where the @INC-related entries are) as there are entries from @INC.
+ # We manage to do that by stopping when we find the "updir" related
+ # entries, which we assume is never contained in a default @INC entry.
+ my $updir = File::Spec->updir;
+ my $max = $#INC;
+ $max = $#stl if $#stl < $max;
+ foreach my $i (0.. $max) {
+ $max = $i, last if $stl[$i] =~ /\Q$updir\E/;
+ }
+
+ ok(
+ ( 0 < (grep -f $_, @stl[0..$max]) ),
"At least one typemap file exists underneath \@INC directories"
);
}
diff --git a/dist/I18N-LangTags/lib/I18N/LangTags.pm b/dist/I18N-LangTags/lib/I18N/LangTags.pm
index 85a4f2263b..42ff0fccba 100644
--- a/dist/I18N-LangTags/lib/I18N/LangTags.pm
+++ b/dist/I18N-LangTags/lib/I18N/LangTags.pm
@@ -19,7 +19,7 @@ require Exporter;
);
%EXPORT_TAGS = ('ALL' => \@EXPORT_OK);
-$VERSION = "0.36";
+$VERSION = "0.37";
sub uniq { my %seen; return grep(!($seen{$_}++), @_); } # a util function
@@ -579,16 +579,16 @@ tag ("ar") exists.
Examples:
- alternate_language_tags('no-bok') is ('nb')
- alternate_language_tags('nb') is ('no-bok')
- alternate_language_tags('he') is ('iw')
- alternate_language_tags('iw') is ('he')
- alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka')
- alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka')
- alternate_language_tags('en') is ()
- alternate_language_tags('x-mingo-tom') is ('i-mingo-tom')
- alternate_language_tags('x-klikitat') is ('i-klikitat')
- alternate_language_tags('i-klikitat') is ('x-klikitat')
+ alternate_language_tags('no-bok') is ('nb')
+ alternate_language_tags('nb') is ('no-bok')
+ alternate_language_tags('he') is ('iw')
+ alternate_language_tags('iw') is ('he')
+ alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka')
+ alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka')
+ alternate_language_tags('en') is ()
+ alternate_language_tags('x-mingo-tom') is ('i-mingo-tom')
+ alternate_language_tags('x-klikitat') is ('i-klikitat')
+ alternate_language_tags('i-klikitat') is ('x-klikitat')
This function returns empty-list if given anything other than a formally
valid language tag.
diff --git a/dist/IO/IO.pm b/dist/IO/IO.pm
index d6ccbfb1fa..09143f2e39 100644
--- a/dist/IO/IO.pm
+++ b/dist/IO/IO.pm
@@ -7,7 +7,7 @@ use Carp;
use strict;
use warnings;
-our $VERSION = "1.25_04";
+our $VERSION = "1.25_05";
XSLoader::load 'IO', $VERSION;
sub import {
@@ -32,8 +32,8 @@ IO - load various IO modules
=head1 SYNOPSIS
- use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File
- use IO; # DEPRECATED
+ use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File
+ use IO; # DEPRECATED
=head1 DESCRIPTION
diff --git a/dist/IO/lib/IO/Socket/INET.pm b/dist/IO/lib/IO/Socket/INET.pm
index 2f0e5d1d7a..cc9f170aac 100644
--- a/dist/IO/lib/IO/Socket/INET.pm
+++ b/dist/IO/lib/IO/Socket/INET.pm
@@ -15,7 +15,7 @@ use Exporter;
use Errno;
@ISA = qw(IO::Socket);
-$VERSION = "1.31";
+$VERSION = "1.32";
my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
@@ -338,22 +338,23 @@ In addition to the key-value pairs accepted by L<IO::Socket>,
C<IO::Socket::INET> provides.
- PeerAddr Remote host address <hostname>[:<port>]
- PeerHost Synonym for PeerAddr
- PeerPort Remote port or service <service>[(<no>)] | <no>
- LocalAddr Local host bind address hostname[:port]
- LocalHost Synonym for LocalAddr
- LocalPort Local host bind port <service>[(<no>)] | <no>
- Proto Protocol name (or number) "tcp" | "udp" | ...
- Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
- Listen Queue size for listen
- ReuseAddr Set SO_REUSEADDR before binding
- Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
- ReusePort Set SO_REUSEPORT before binding
- Broadcast Set SO_BROADCAST before binding
- Timeout Timeout value for various operations
- MultiHomed Try all addresses for multi-homed hosts
- Blocking Determine if connection will be blocking mode
+ PeerAddr Remote host address <hostname>[:<port>]
+ PeerHost Synonym for PeerAddr
+ PeerPort Remote port or service <service>[(<no>)] | <no>
+ LocalAddr Local host bind address hostname[:port]
+ LocalHost Synonym for LocalAddr
+ LocalPort Local host bind port <service>[(<no>)] | <no>
+ Proto Protocol name (or number) "tcp" | "udp" | ...
+ Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
+ Listen Queue size for listen
+ ReuseAddr Set SO_REUSEADDR before binding
+ Reuse Set SO_REUSEADDR before binding (deprecated,
+ prefer ReuseAddr)
+ ReusePort Set SO_REUSEPORT before binding
+ Broadcast Set SO_BROADCAST before binding
+ Timeout Timeout value for various operations
+ MultiHomed Try all addresses for multi-homed hosts
+ Blocking Determine if connection will be blocking mode
If C<Listen> is defined then a listen socket is created, else if the
socket type, which is derived from the protocol, is SOCK_STREAM then
@@ -397,12 +398,13 @@ Examples:
$sock = IO::Socket::INET->new('127.0.0.1:25');
- $sock = IO::Socket::INET->new(PeerPort => 9999,
- PeerAddr => inet_ntoa(INADDR_BROADCAST),
- Proto => udp,
- LocalAddr => 'localhost',
- Broadcast => 1 )
- or die "Can't bind : $@\n";
+ $sock = IO::Socket::INET->new(
+ PeerPort => 9999,
+ PeerAddr => inet_ntoa(INADDR_BROADCAST),
+ Proto => udp,
+ LocalAddr => 'localhost',
+ Broadcast => 1 )
+ or die "Can't bind : $@\n";
NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
diff --git a/dist/Locale-Maketext/lib/Locale/Maketext.pod b/dist/Locale-Maketext/lib/Locale/Maketext.pod
index 14b47c884e..ce280bed23 100644
--- a/dist/Locale-Maketext/lib/Locale/Maketext.pod
+++ b/dist/Locale-Maketext/lib/Locale/Maketext.pod
@@ -166,7 +166,8 @@ file, you might consider something like this in your project class:
my $lh;
if($chosen_language) {
$lh = $class->get_handle($chosen_language)
- || die "No language handle for \"$chosen_language\" or the like";
+ || die "No language handle for \"$chosen_language\""
+ . " or the like";
} else {
# Config file missing, maybe?
$lh = $class->get_handle()
diff --git a/dist/Math-BigInt/lib/Math/BigFloat.pm b/dist/Math-BigInt/lib/Math/BigFloat.pm
index c992f97340..9c75951f71 100644
--- a/dist/Math-BigInt/lib/Math/BigFloat.pm
+++ b/dist/Math-BigInt/lib/Math/BigFloat.pm
@@ -12,7 +12,7 @@ package Math::BigFloat;
# _a : accuracy
# _p : precision
-$VERSION = '1.994';
+$VERSION = '1.995';
require 5.006002;
require Exporter;
@@ -3816,122 +3816,122 @@ Math::BigFloat - Arbitrary size floating point math package
=head1 SYNOPSIS
- use Math::BigFloat;
-
- # Number creation
- my $x = Math::BigFloat->new($str); # defaults to 0
- my $y = $x->copy(); # make a true copy
- my $nan = Math::BigFloat->bnan(); # create a NotANumber
- my $zero = Math::BigFloat->bzero(); # create a +0
- my $inf = Math::BigFloat->binf(); # create a +inf
- my $inf = Math::BigFloat->binf('-'); # create a -inf
- my $one = Math::BigFloat->bone(); # create a +1
- my $mone = Math::BigFloat->bone('-'); # create a -1
-
- my $pi = Math::BigFloat->bpi(100); # PI to 100 digits
-
- # the following examples compute their result to 100 digits accuracy:
- my $cos = Math::BigFloat->new(1)->bcos(100); # cosinus(1)
- my $sin = Math::BigFloat->new(1)->bsin(100); # sinus(1)
- my $atan = Math::BigFloat->new(1)->batan(100); # arcus tangens(1)
-
- my $atan2 = Math::BigFloat->new( 1 )->batan2( 1 ,100); # batan(1)
- my $atan2 = Math::BigFloat->new( 1 )->batan2( 8 ,100); # batan(1/8)
- my $atan2 = Math::BigFloat->new( -2 )->batan2( 1 ,100); # batan(-2)
-
- # Testing
- $x->is_zero(); # true if arg is +0
- $x->is_nan(); # true if arg is NaN
- $x->is_one(); # true if arg is +1
- $x->is_one('-'); # true if arg is -1
- $x->is_odd(); # true if odd, false for even
- $x->is_even(); # true if even, false for odd
- $x->is_pos(); # true if >= 0
- $x->is_neg(); # true if < 0
- $x->is_inf(sign); # true if +inf, or -inf (default is '+')
-
- $x->bcmp($y); # compare numbers (undef,<0,=0,>0)
- $x->bacmp($y); # compare absolutely (undef,<0,=0,>0)
- $x->sign(); # return the sign, either +,- or NaN
- $x->digit($n); # return the nth digit, counting from right
- $x->digit(-$n); # return the nth digit, counting from left
-
- # The following all modify their first argument. If you want to preserve
- # $x, use $z = $x->copy()->bXXX($y); See under L<CAVEATS> for why this is
- # necessary when mixing $a = $b assignments with non-overloaded math.
-
- # set
- $x->bzero(); # set $i to 0
- $x->bnan(); # set $i to NaN
- $x->bone(); # set $x to +1
- $x->bone('-'); # set $x to -1
- $x->binf(); # set $x to inf
- $x->binf('-'); # set $x to -inf
-
- $x->bneg(); # negation
- $x->babs(); # absolute value
- $x->bnorm(); # normalize (no-op)
- $x->bnot(); # two's complement (bit wise not)
- $x->binc(); # increment x by 1
- $x->bdec(); # decrement x by 1
-
- $x->badd($y); # addition (add $y to $x)
- $x->bsub($y); # subtraction (subtract $y from $x)
- $x->bmul($y); # multiplication (multiply $x by $y)
- $x->bdiv($y); # divide, set $x to quotient
- # return (quo,rem) or quo if scalar
-
- $x->bmod($y); # modulus ($x % $y)
- $x->bpow($y); # power of arguments ($x ** $y)
- $x->bmodpow($exp,$mod); # modular exponentiation (($num**$exp) % $mod))
- $x->blsft($y, $n); # left shift by $y places in base $n
- $x->brsft($y, $n); # right shift by $y places in base $n
- # returns (quo,rem) or quo if in scalar context
-
- $x->blog(); # logarithm of $x to base e (Euler's number)
- $x->blog($base); # logarithm of $x to base $base (f.i. 2)
- $x->bexp(); # calculate e ** $x where e is Euler's number
-
- $x->band($y); # bit-wise and
- $x->bior($y); # bit-wise inclusive or
- $x->bxor($y); # bit-wise exclusive or
- $x->bnot(); # bit-wise not (two's complement)
-
- $x->bsqrt(); # calculate square-root
- $x->broot($y); # $y'th root of $x (e.g. $y == 3 => cubic root)
- $x->bfac(); # factorial of $x (1*2*3*4*..$x)
-
- $x->bround($N); # accuracy: preserve $N digits
- $x->bfround($N); # precision: round to the $Nth digit
-
- $x->bfloor(); # return integer less or equal than $x
- $x->bceil(); # return integer greater or equal than $x
+ use Math::BigFloat;
+
+ # Number creation
+ my $x = Math::BigFloat->new($str); # defaults to 0
+ my $y = $x->copy(); # make a true copy
+ my $nan = Math::BigFloat->bnan(); # create a NotANumber
+ my $zero = Math::BigFloat->bzero(); # create a +0
+ my $inf = Math::BigFloat->binf(); # create a +inf
+ my $inf = Math::BigFloat->binf('-'); # create a -inf
+ my $one = Math::BigFloat->bone(); # create a +1
+ my $mone = Math::BigFloat->bone('-'); # create a -1
+
+ my $pi = Math::BigFloat->bpi(100); # PI to 100 digits
+
+ # the following examples compute their result to 100 digits accuracy:
+ my $cos = Math::BigFloat->new(1)->bcos(100); # cosinus(1)
+ my $sin = Math::BigFloat->new(1)->bsin(100); # sinus(1)
+ my $atan = Math::BigFloat->new(1)->batan(100); # arcus tangens(1)
+
+ my $atan2 = Math::BigFloat->new( 1 )->batan2( 1 ,100); # batan(1)
+ my $atan2 = Math::BigFloat->new( 1 )->batan2( 8 ,100); # batan(1/8)
+ my $atan2 = Math::BigFloat->new( -2 )->batan2( 1 ,100); # batan(-2)
+
+ # Testing
+ $x->is_zero(); # true if arg is +0
+ $x->is_nan(); # true if arg is NaN
+ $x->is_one(); # true if arg is +1
+ $x->is_one('-'); # true if arg is -1
+ $x->is_odd(); # true if odd, false for even
+ $x->is_even(); # true if even, false for odd
+ $x->is_pos(); # true if >= 0
+ $x->is_neg(); # true if < 0
+ $x->is_inf(sign); # true if +inf, or -inf (default is '+')
+
+ $x->bcmp($y); # compare numbers (undef,<0,=0,>0)
+ $x->bacmp($y); # compare absolutely (undef,<0,=0,>0)
+ $x->sign(); # return the sign, either +,- or NaN
+ $x->digit($n); # return the nth digit, counting from right
+ $x->digit(-$n); # return the nth digit, counting from left
+
+ # The following all modify their first argument. If you want to pre-
+ # serve $x, use $z = $x->copy()->bXXX($y); See under L<CAVEATS> for
+ # necessary when mixing $a = $b assignments with non-overloaded math.
+
+ # set
+ $x->bzero(); # set $i to 0
+ $x->bnan(); # set $i to NaN
+ $x->bone(); # set $x to +1
+ $x->bone('-'); # set $x to -1
+ $x->binf(); # set $x to inf
+ $x->binf('-'); # set $x to -inf
+
+ $x->bneg(); # negation
+ $x->babs(); # absolute value
+ $x->bnorm(); # normalize (no-op)
+ $x->bnot(); # two's complement (bit wise not)
+ $x->binc(); # increment x by 1
+ $x->bdec(); # decrement x by 1
+
+ $x->badd($y); # addition (add $y to $x)
+ $x->bsub($y); # subtraction (subtract $y from $x)
+ $x->bmul($y); # multiplication (multiply $x by $y)
+ $x->bdiv($y); # divide, set $x to quotient
+ # return (quo,rem) or quo if scalar
+
+ $x->bmod($y); # modulus ($x % $y)
+ $x->bpow($y); # power of arguments ($x ** $y)
+ $x->bmodpow($exp,$mod); # modular exponentiation (($num**$exp) % $mod))
+ $x->blsft($y, $n); # left shift by $y places in base $n
+ $x->brsft($y, $n); # right shift by $y places in base $n
+ # returns (quo,rem) or quo if in scalar context
+
+ $x->blog(); # logarithm of $x to base e (Euler's number)
+ $x->blog($base); # logarithm of $x to base $base (f.i. 2)
+ $x->bexp(); # calculate e ** $x where e is Euler's number
+
+ $x->band($y); # bit-wise and
+ $x->bior($y); # bit-wise inclusive or
+ $x->bxor($y); # bit-wise exclusive or
+ $x->bnot(); # bit-wise not (two's complement)
+
+ $x->bsqrt(); # calculate square-root
+ $x->broot($y); # $y'th root of $x (e.g. $y == 3 => cubic root)
+ $x->bfac(); # factorial of $x (1*2*3*4*..$x)
+
+ $x->bround($N); # accuracy: preserve $N digits
+ $x->bfround($N); # precision: round to the $Nth digit
+
+ $x->bfloor(); # return integer less or equal than $x
+ $x->bceil(); # return integer greater or equal than $x
# The following do not modify their arguments:
- bgcd(@values); # greatest common divisor
- blcm(@values); # lowest common multiplicator
+ bgcd(@values); # greatest common divisor
+ blcm(@values); # lowest common multiplicator
- $x->bstr(); # return string
- $x->bsstr(); # return string in scientific notation
+ $x->bstr(); # return string
+ $x->bsstr(); # return string in scientific notation
- $x->as_int(); # return $x as BigInt
- $x->exponent(); # return exponent as BigInt
- $x->mantissa(); # return mantissa as BigInt
- $x->parts(); # return (mantissa,exponent) as BigInt
+ $x->as_int(); # return $x as BigInt
+ $x->exponent(); # return exponent as BigInt
+ $x->mantissa(); # return mantissa as BigInt
+ $x->parts(); # return (mantissa,exponent) as BigInt
- $x->length(); # number of digits (w/o sign and '.')
- ($l,$f) = $x->length(); # number of digits, and length of fraction
+ $x->length(); # number of digits (w/o sign and '.')
+ ($l,$f) = $x->length(); # number of digits, and length of fraction
- $x->precision(); # return P of $x (or global, if P of $x undef)
- $x->precision($n); # set P of $x to $n
- $x->accuracy(); # return A of $x (or global, if A of $x undef)
- $x->accuracy($n); # set A $x to $n
+ $x->precision(); # return P of $x (or global, if P of $x undef)
+ $x->precision($n); # set P of $x to $n
+ $x->accuracy(); # return A of $x (or global, if A of $x undef)
+ $x->accuracy($n); # set A $x to $n
- # these get/set the appropriate global value for all BigFloat objects
- Math::BigFloat->precision(); # Precision
- Math::BigFloat->accuracy(); # Accuracy
- Math::BigFloat->round_mode(); # rounding mode
+ # these get/set the appropriate global value for all BigFloat objects
+ Math::BigFloat->precision(); # Precision
+ Math::BigFloat->accuracy(); # Accuracy
+ Math::BigFloat->round_mode(); # rounding mode
=head1 DESCRIPTION
@@ -4040,8 +4040,8 @@ input $x has no accuracy or precision set, then a fallback parameter will
be used. For historical reasons, it is called C<div_scale> and can be accessed
via:
- $d = Math::BigFloat->div_scale(); # query
- Math::BigFloat->div_scale($n); # set to $n digits
+ $d = Math::BigFloat->div_scale(); # query
+ Math::BigFloat->div_scale($n); # set to $n digits
The default value for C<div_scale> is 40.
@@ -4049,13 +4049,13 @@ In case the result of one operation has more digits than specified,
it is rounded. The rounding mode taken is either the default mode, or the one
supplied to the operation after the I<scale>:
- $x = Math::BigFloat->new(2);
- Math::BigFloat->accuracy(5); # 5 digits max
- $y = $x->copy()->bdiv(3); # will give 0.66667
- $y = $x->copy()->bdiv(3,6); # will give 0.666667
- $y = $x->copy()->bdiv(3,6,undef,'odd'); # will give 0.666667
- Math::BigFloat->round_mode('zero');
- $y = $x->copy()->bdiv(3,6); # will also give 0.666667
+ $x = Math::BigFloat->new(2);
+ Math::BigFloat->accuracy(5); # 5 digits max
+ $y = $x->copy()->bdiv(3); # will give 0.66667
+ $y = $x->copy()->bdiv(3,6); # will give 0.666667
+ $y = $x->copy()->bdiv(3,6,undef,'odd'); # will give 0.666667
+ Math::BigFloat->round_mode('zero');
+ $y = $x->copy()->bdiv(3,6); # will also give 0.666667
Note that C<< Math::BigFloat->accuracy() >> and C<< Math::BigFloat->precision() >>
set the global variables, and thus B<any> newly created number will be subject
@@ -4138,12 +4138,12 @@ differences:
=head2 accuracy
- $x->accuracy(5); # local for $x
- CLASS->accuracy(5); # global for all members of CLASS
- # Note: This also applies to new()!
+ $x->accuracy(5); # local for $x
+ CLASS->accuracy(5); # global for all members of CLASS
+ # Note: This also applies to new()!
- $A = $x->accuracy(); # read out accuracy that affects $x
- $A = CLASS->accuracy(); # read out global accuracy
+ $A = $x->accuracy(); # read out accuracy that affects $x
+ $A = CLASS->accuracy(); # read out global accuracy
Set or get the global or local accuracy, aka how many significant digits the
results have. If you set a global accuracy, then this also applies to new()!
@@ -4163,15 +4163,17 @@ to the math operation as additional parameter:
=head2 precision()
- $x->precision(-2); # local for $x, round at the second digit right of the dot
- $x->precision(2); # ditto, round at the second digit left of the dot
+ $x->precision(-2); # local for $x, round at the second
+ # digit right of the dot
+ $x->precision(2); # ditto, round at the second digit left
+ # of the dot
CLASS->precision(5); # Global for all members of CLASS
# This also applies to new()!
CLASS->precision(-5); # ditto
- $P = CLASS->precision(); # read out global precision
- $P = $x->precision(); # read out precision that affects $x
+ $P = CLASS->precision(); # read out global precision
+ $P = $x->precision(); # read out precision that affects $x
Note: You probably want to use L<accuracy()> instead. With L<accuracy> you
set the number of digits each result should have, with L<precision> you
@@ -4187,7 +4189,7 @@ This method was added in v1.82 of Math::BigInt (April 2007).
=head2 bnok()
- $x->bnok($y); # x over y (binomial coefficient n over k)
+ $x->bnok($y); # x over y (binomial coefficient n over k)
Calculates the binomial coefficient n over k, also called the "choose"
function. The result is equivalent to:
@@ -4351,10 +4353,10 @@ Please see the file BUGS in the CPAN distribution Math::BigInt for known bugs.
Do not try to be clever to insert some operations in between switching
libraries:
- require Math::BigFloat;
- my $matter = Math::BigFloat->bone() + 4; # load BigInt and Calc
- Math::BigFloat->import( lib => 'Pari' ); # load Pari, too
- my $anti_matter = Math::BigFloat->bone()+4; # now use Pari
+ require Math::BigFloat;
+ my $matter = Math::BigFloat->bone() + 4; # load BigInt and Calc
+ Math::BigFloat->import( lib => 'Pari' ); # load Pari, too
+ my $anti_matter = Math::BigFloat->bone()+4; # now use Pari
This will create objects with numbers stored in two different backend libraries,
and B<VERY BAD THINGS> will happen when you use these together:
@@ -4378,8 +4380,8 @@ The following will probably not print what you expect:
It prints both quotient and remainder since print works in list context. Also,
bdiv() will modify $c, so be careful. You probably want to use
- print $c / 123.456,"\n";
- print scalar $c->bdiv(123.456),"\n"; # or if you want to modify $c
+ print $c / 123.456,"\n";
+ print scalar $c->bdiv(123.456),"\n"; # or if you want to modify $c
instead.
@@ -4427,39 +4429,41 @@ C<badd()> etc. The first will modify $x, the second one won't:
A common pitfall is to use L<precision()> when you want to round a result to
a certain number of digits:
- use Math::BigFloat;
+ use Math::BigFloat;
- Math::BigFloat->precision(4); # does not do what you think it does
- my $x = Math::BigFloat->new(12345); # rounds $x to "12000"!
- print "$x\n"; # print "12000"
- my $y = Math::BigFloat->new(3); # rounds $y to "0"!
- print "$y\n"; # print "0"
- $z = $x / $y; # 12000 / 0 => NaN!
- print "$z\n";
- print $z->precision(),"\n"; # 4
+ Math::BigFloat->precision(4); # does not do what you
+ # think it does
+ my $x = Math::BigFloat->new(12345); # rounds $x to "12000"!
+ print "$x\n"; # print "12000"
+ my $y = Math::BigFloat->new(3); # rounds $y to "0"!
+ print "$y\n"; # print "0"
+ $z = $x / $y; # 12000 / 0 => NaN!
+ print "$z\n";
+ print $z->precision(),"\n"; # 4
Replacing L<precision> with L<accuracy> is probably not what you want, either:
- use Math::BigFloat;
+ use Math::BigFloat;
- Math::BigFloat->accuracy(4); # enables global rounding:
- my $x = Math::BigFloat->new(123456); # rounded immediately to "12350"
- print "$x\n"; # print "123500"
- my $y = Math::BigFloat->new(3); # rounded to "3
- print "$y\n"; # print "3"
- print $z = $x->copy()->bdiv($y),"\n"; # 41170
- print $z->accuracy(),"\n"; # 4
+ Math::BigFloat->accuracy(4); # enables global rounding:
+ my $x = Math::BigFloat->new(123456); # rounded immediately
+ # to "12350"
+ print "$x\n"; # print "123500"
+ my $y = Math::BigFloat->new(3); # rounded to "3
+ print "$y\n"; # print "3"
+ print $z = $x->copy()->bdiv($y),"\n"; # 41170
+ print $z->accuracy(),"\n"; # 4
What you want to use instead is:
- use Math::BigFloat;
+ use Math::BigFloat;
- my $x = Math::BigFloat->new(123456); # no rounding
- print "$x\n"; # print "123456"
- my $y = Math::BigFloat->new(3); # no rounding
- print "$y\n"; # print "3"
- print $z = $x->copy()->bdiv($y,4),"\n"; # 41150
- print $z->accuracy(),"\n"; # undef
+ my $x = Math::BigFloat->new(123456); # no rounding
+ print "$x\n"; # print "123456"
+ my $y = Math::BigFloat->new(3); # no rounding
+ print "$y\n"; # print "3"
+ print $z = $x->copy()->bdiv($y,4),"\n"; # 41150
+ print $z->accuracy(),"\n"; # undef
In addition to computing what you expected, the last example also does B<not>
"taint" the result with an accuracy or precision setting, which would
diff --git a/dist/Math-BigInt/lib/Math/BigInt.pm b/dist/Math-BigInt/lib/Math/BigInt.pm
index 36b10490f4..3da16ded7e 100644
--- a/dist/Math-BigInt/lib/Math/BigInt.pm
+++ b/dist/Math-BigInt/lib/Math/BigInt.pm
@@ -18,7 +18,7 @@ package Math::BigInt;
my $class = "Math::BigInt";
use 5.006002;
-$VERSION = '1.995';
+$VERSION = '1.996';
@ISA = qw(Exporter);
@EXPORT_OK = qw(objectify bgcd blcm);
@@ -3344,9 +3344,10 @@ Math::BigInt - Arbitrary size integer/float math package
$x->digit($n); # return the nth digit, counting from right
$x->digit(-$n); # return the nth digit, counting from left
- # The following all modify their first argument. If you want to preserve
- # $x, use $z = $x->copy()->bXXX($y); See under L<CAVEATS> for why this is
- # necessary when mixing $a = $b assignments with non-overloaded math.
+ # The following all modify their first argument. If you want to pre-
+ # serve $x, use $z = $x->copy()->bXXX($y); See under L<CAVEATS> for
+ # why this is necessary when mixing $a = $b assignments with non-over-
+ # loaded math.
$x->bzero(); # set $x to 0
$x->bnan(); # set $x to NaN
@@ -3377,10 +3378,12 @@ Math::BigInt - Arbitrary size integer/float math package
$x->bpow($y); # power of arguments (x ** y)
$x->blsft($y); # left shift in base 2
$x->brsft($y); # right shift in base 2
- # returns (quo,rem) or quo if in scalar context
+ # returns (quo,rem) or quo if in sca-
+ # lar context
$x->blsft($y,$n); # left shift by $y places in base $n
$x->brsft($y,$n); # right shift by $y places in base $n
- # returns (quo,rem) or quo if in scalar context
+ # returns (quo,rem) or quo if in sca-
+ # lar context
$x->band($y); # bitwise and
$x->bior($y); # bitwise inclusive or
@@ -3397,7 +3400,8 @@ Math::BigInt - Arbitrary size integer/float math package
$x->blog($base); # logarithm of $x to base $base (f.i. 2)
$x->bexp(); # calculate e ** $x where e is Euler's number
- $x->round($A,$P,$mode); # round to accuracy or precision using mode $mode
+ $x->round($A,$P,$mode); # round to accuracy or precision using
+ # mode $mode
$x->bround($n); # accuracy: preserve $n digits
$x->bfround($n); # $n > 0: round $nth digits,
# $n < 0: round to the $nth digit after the
@@ -3417,36 +3421,38 @@ Math::BigInt - Arbitrary size integer/float math package
my $lcm = Math::BigInt::blcm(@values);
$x->length(); # return number of digits in number
- ($xl,$f) = $x->length(); # length of number and length of fraction part,
- # latter is always 0 digits long for BigInts
+ ($xl,$f) = $x->length(); # length of number and length of fraction
+ # part, latter is always 0 digits long
+ # for BigInts
- $x->exponent(); # return exponent as BigInt
- $x->mantissa(); # return (signed) mantissa as BigInt
- $x->parts(); # return (mantissa,exponent) as BigInt
- $x->copy(); # make a true copy of $x (unlike $y = $x;)
- $x->as_int(); # return as BigInt (in BigInt: same as copy())
- $x->numify(); # return as scalar (might overflow!)
+ $x->exponent(); # return exponent as BigInt
+ $x->mantissa(); # return (signed) mantissa as BigInt
+ $x->parts(); # return (mantissa,exponent) as BigInt
+ $x->copy(); # make a true copy of $x (unlike $y = $x;)
+ $x->as_int(); # return as BigInt (in BigInt: same as copy())
+ $x->numify(); # return as scalar (might overflow!)
# conversion to string (do not modify their argument)
- $x->bstr(); # normalized string (e.g. '3')
- $x->bsstr(); # norm. string in scientific notation (e.g. '3E0')
- $x->as_hex(); # as signed hexadecimal string with prefixed 0x
- $x->as_bin(); # as signed binary string with prefixed 0b
- $x->as_oct(); # as signed octal string with prefixed 0
+ $x->bstr(); # normalized string (e.g. '3')
+ $x->bsstr(); # norm. string in scientific notation (e.g. '3E0')
+ $x->as_hex(); # as signed hexadecimal string with prefixed 0x
+ $x->as_bin(); # as signed binary string with prefixed 0b
+ $x->as_oct(); # as signed octal string with prefixed 0
# precision and accuracy (see section about rounding for more)
- $x->precision(); # return P of $x (or global, if P of $x undef)
- $x->precision($n); # set P of $x to $n
- $x->accuracy(); # return A of $x (or global, if A of $x undef)
- $x->accuracy($n); # set A $x to $n
+ $x->precision(); # return P of $x (or global, if P of $x undef)
+ $x->precision($n); # set P of $x to $n
+ $x->accuracy(); # return A of $x (or global, if A of $x undef)
+ $x->accuracy($n); # set A $x to $n
# Global methods
- Math::BigInt->precision(); # get/set global P for all BigInt objects
- Math::BigInt->accuracy(); # get/set global A for all BigInt objects
- Math::BigInt->round_mode(); # get/set global round mode, one of
- # 'even', 'odd', '+inf', '-inf', 'zero', 'trunc' or 'common'
- Math::BigInt->config(); # return hash containing configuration
+ Math::BigInt->precision(); # get/set global P for all BigInt objects
+ Math::BigInt->accuracy(); # get/set global A for all BigInt objects
+ Math::BigInt->round_mode(); # get/set global round mode, one of
+ # 'even', 'odd', '+inf', '-inf', 'zero',
+ # 'trunc' or 'common'
+ Math::BigInt->config(); # return hash containing configuration
=head1 DESCRIPTION
@@ -3527,33 +3533,33 @@ Returns a hash containing the configuration, e.g. the version number, lib
loaded etc. The following hash keys are currently filled in with the
appropriate information.
- key Description
- Example
+ key Description
+ Example
============================================================
- lib Name of the low-level math library
- Math::BigInt::Calc
- lib_version Version of low-level math library (see 'lib')
- 0.30
- class The class name of config() you just called
- Math::BigInt
- upgrade To which class math operations might be upgraded
- Math::BigFloat
- downgrade To which class math operations might be downgraded
- undef
- precision Global precision
- undef
- accuracy Global accuracy
- undef
- round_mode Global round mode
- even
- version version number of the class you used
- 1.61
- div_scale Fallback accuracy for div
- 40
- trap_nan If true, traps creation of NaN via croak()
- 1
- trap_inf If true, traps creation of +inf/-inf via croak()
- 1
+ lib Name of the low-level math library
+ Math::BigInt::Calc
+ lib_version Version of low-level math library (see 'lib')
+ 0.30
+ class The class name of config() you just called
+ Math::BigInt
+ upgrade To which class math operations might be upgraded
+ Math::BigFloat
+ downgrade To which class math operations might be downgraded
+ undef
+ precision Global precision
+ undef
+ accuracy Global accuracy
+ undef
+ round_mode Global round mode
+ even
+ version version number of the class you used
+ 1.61
+ div_scale Fallback accuracy for div
+ 40
+ trap_nan If true, traps creation of NaN via croak()
+ 1
+ trap_inf If true, traps creation of +inf/-inf via croak()
+ 1
The following values can be set by passing C<config()> a reference to a hash:
@@ -3562,16 +3568,18 @@ The following values can be set by passing C<config()> a reference to a hash:
Example:
- $new_cfg = Math::BigInt->config( { trap_inf => 1, precision => 5 } );
+ $new_cfg = Math::BigInt->config(
+ { trap_inf => 1, precision => 5 }
+ );
=head2 accuracy()
- $x->accuracy(5); # local for $x
- CLASS->accuracy(5); # global for all members of CLASS
- # Note: This also applies to new()!
+ $x->accuracy(5); # local for $x
+ CLASS->accuracy(5); # global for all members of CLASS
+ # Note: This also applies to new()!
- $A = $x->accuracy(); # read out accuracy that affects $x
- $A = CLASS->accuracy(); # read out global accuracy
+ $A = $x->accuracy(); # read out accuracy that affects $x
+ $A = CLASS->accuracy(); # read out global accuracy
Set or get the global or local accuracy, aka how many significant digits the
results have. If you set a global accuracy, then this also applies to new()!
@@ -3584,31 +3592,32 @@ In most cases, you should probably round the results explicitly using one of
L<round()>, L<bround()> or L<bfround()> or by passing the desired accuracy
to the math operation as additional parameter:
- my $x = Math::BigInt->new(30000);
- my $y = Math::BigInt->new(7);
- print scalar $x->copy()->bdiv($y, 2); # print 4300
- print scalar $x->copy()->bdiv($y)->bround(2); # print 4300
+ my $x = Math::BigInt->new(30000);
+ my $y = Math::BigInt->new(7);
+ print scalar $x->copy()->bdiv($y, 2); # print 4300
+ print scalar $x->copy()->bdiv($y)->bround(2); # print 4300
Please see the section about L<ACCURACY and PRECISION> for further details.
Value must be greater than zero. Pass an undef value to disable it:
- $x->accuracy(undef);
- Math::BigInt->accuracy(undef);
+ $x->accuracy(undef);
+ Math::BigInt->accuracy(undef);
Returns the current accuracy. For C<< $x->accuracy() >> it will return either
the local accuracy, or if not defined, the global. This means the return value
represents the accuracy that will be in effect for $x:
- $y = Math::BigInt->new(1234567); # unrounded
- print Math::BigInt->accuracy(4),"\n"; # set 4, print 4
- $x = Math::BigInt->new(123456); # $x will be automatically rounded!
- print "$x $y\n"; # '123500 1234567'
- print $x->accuracy(),"\n"; # will be 4
- print $y->accuracy(),"\n"; # also 4, since global is 4
- print Math::BigInt->accuracy(5),"\n"; # set to 5, print 5
- print $x->accuracy(),"\n"; # still 4
- print $y->accuracy(),"\n"; # 5, since global is 5
+ $y = Math::BigInt->new(1234567); # unrounded
+ print Math::BigInt->accuracy(4),"\n"; # set 4, print 4
+ $x = Math::BigInt->new(123456); # $x will be automatic-
+ # ally rounded!
+ print "$x $y\n"; # '123500 1234567'
+ print $x->accuracy(),"\n"; # will be 4
+ print $y->accuracy(),"\n"; # also 4, since global is 4
+ print Math::BigInt->accuracy(5),"\n"; # set to 5, print 5
+ print $x->accuracy(),"\n"; # still 4
+ print $y->accuracy(),"\n"; # 5, since global is 5
Note: Works also for subclasses like Math::BigFloat. Each class has it's own
globals separated from Math::BigInt, but it is possible to subclass
@@ -3617,15 +3626,17 @@ Math::BigInt.
=head2 precision()
- $x->precision(-2); # local for $x, round at the second digit right of the dot
- $x->precision(2); # ditto, round at the second digit left of the dot
+ $x->precision(-2); # local for $x, round at the second
+ # digit right of the dot
+ $x->precision(2); # ditto, round at the second digit left
+ # of the dot
- CLASS->precision(5); # Global for all members of CLASS
- # This also applies to new()!
- CLASS->precision(-5); # ditto
+ CLASS->precision(5); # Global for all members of CLASS
+ # This also applies to new()!
+ CLASS->precision(-5); # ditto
- $P = CLASS->precision(); # read out global precision
- $P = $x->precision(); # read out precision that affects $x
+ $P = CLASS->precision(); # read out global precision
+ $P = $x->precision(); # read out precision that affects $x
Note: You probably want to use L<accuracy()> instead. With L<accuracy> you
set the number of digits each result should have, with L<precision> you
@@ -3643,17 +3654,17 @@ Please see the section about L<ACCURACY and PRECISION> for further details.
Pass an undef value to disable it:
- $x->precision(undef);
- Math::BigInt->precision(undef);
+ $x->precision(undef);
+ Math::BigInt->precision(undef);
Returns the current precision. For C<< $x->precision() >> it will return either
the local precision of $x, or if not defined, the global. This means the return
value represents the prevision that will be in effect for $x:
- $y = Math::BigInt->new(1234567); # unrounded
- print Math::BigInt->precision(4),"\n"; # set 4, print 4
- $x = Math::BigInt->new(123456); # will be automatically rounded
- print $x; # print "120000"!
+ $y = Math::BigInt->new(1234567); # unrounded
+ print Math::BigInt->precision(4),"\n"; # set 4, print 4
+ $x = Math::BigInt->new(123456); # will be automatically rounded
+ print $x; # print "120000"!
Note: Works also for subclasses like L<Math::BigFloat>. Each class has its
own globals separated from Math::BigInt, but it is possible to subclass
@@ -3762,12 +3773,12 @@ If used on an object, it will set it to one:
=head2 is_one()/is_zero()/is_nan()/is_inf()
- $x->is_zero(); # true if arg is +0
- $x->is_nan(); # true if arg is NaN
- $x->is_one(); # true if arg is +1
- $x->is_one('-'); # true if arg is -1
- $x->is_inf(); # true if +inf
- $x->is_inf('-'); # true if -inf (sign is default '+')
+ $x->is_zero(); # true if arg is +0
+ $x->is_nan(); # true if arg is NaN
+ $x->is_one(); # true if arg is +1
+ $x->is_one('-'); # true if arg is -1
+ $x->is_inf(); # true if +inf
+ $x->is_inf('-'); # true if -inf (sign is default '+')
These methods all test the BigInt for being one specific value and return
true or false depending on the input. These are faster than doing something
@@ -3831,7 +3842,7 @@ If you want $x to have a certain sign, use one of the following methods:
=head2 digit()
- $x->digit($n); # return the nth digit, counting from right
+ $x->digit($n); # return the nth digit, counting from right
If C<$n> is negative, returns the digit counting from left.
@@ -3866,23 +3877,23 @@ but faster.
=head2 binc()
- $x->binc(); # increment x by 1
+ $x->binc(); # increment x by 1
=head2 bdec()
- $x->bdec(); # decrement x by 1
+ $x->bdec(); # decrement x by 1
=head2 badd()
- $x->badd($y); # addition (add $y to $x)
+ $x->badd($y); # addition (add $y to $x)
=head2 bsub()
- $x->bsub($y); # subtraction (subtract $y from $x)
+ $x->bsub($y); # subtraction (subtract $y from $x)
=head2 bmul()
- $x->bmul($y); # multiplication (multiply $x by $y)
+ $x->bmul($y); # multiplication (multiply $x by $y)
=head2 bmuladd()
@@ -3894,16 +3905,16 @@ This method was added in v1.87 of Math::BigInt (June 2007).
=head2 bdiv()
- $x->bdiv($y); # divide, set $x to quotient
- # return (quo,rem) or quo if scalar
+ $x->bdiv($y); # divide, set $x to quotient
+ # return (quo,rem) or quo if scalar
=head2 bmod()
- $x->bmod($y); # modulus (x % y)
+ $x->bmod($y); # modulus (x % y)
=head2 bmodinv()
- $x->bmodinv($mod); # modular multiplicative inverse
+ $x->bmodinv($mod); # modular multiplicative inverse
Returns the multiplicative inverse of C<$x> modulo C<$mod>. If
@@ -3942,19 +3953,19 @@ is exactly equivalent to
=head2 bpow()
- $x->bpow($y); # power of arguments (x ** y)
+ $x->bpow($y); # power of arguments (x ** y)
=head2 blog()
- $x->blog($base, $accuracy); # logarithm of x to the base $base
+ $x->blog($base, $accuracy); # logarithm of x to the base $base
If C<$base> is not defined, Euler's number (e) is used:
- print $x->blog(undef, 100); # log(x) to 100 digits
+ print $x->blog(undef, 100); # log(x) to 100 digits
=head2 bexp()
- $x->bexp($accuracy); # calculate e ** X
+ $x->bexp($accuracy); # calculate e ** X
Calculates the expression C<e ** $x> where C<e> is Euler's number.
@@ -3964,7 +3975,7 @@ See also L<blog()>.
=head2 bnok()
- $x->bnok($y); # x over y (binomial coefficient n over k)
+ $x->bnok($y); # x over y (binomial coefficient n over k)
Calculates the binomial coefficient n over k, also called the "choose"
function. The result is equivalent to:
@@ -4154,11 +4165,11 @@ Return the signed mantissa of $x as BigInt.
=head2 parts()
- $x->parts(); # return (mantissa,exponent) as BigInt
+ $x->parts(); # return (mantissa,exponent) as BigInt
=head2 copy()
- $x->copy(); # make a true copy of $x (unlike $y = $x;)
+ $x->copy(); # make a true copy of $x (unlike $y = $x;)
=head2 as_int()/as_number()
@@ -4178,19 +4189,19 @@ Returns a normalized string representation of C<$x>.
=head2 bsstr()
- $x->bsstr(); # normalized string in scientific notation
+ $x->bsstr(); # normalized string in scientific notation
=head2 as_hex()
- $x->as_hex(); # as signed hexadecimal string with prefixed 0x
+ $x->as_hex(); # as signed hexadecimal string with prefixed 0x
=head2 as_bin()
- $x->as_bin(); # as signed binary string with prefixed 0b
+ $x->as_bin(); # as signed binary string with prefixed 0b
=head2 as_oct()
- $x->as_oct(); # as signed octal string with prefixed 0
+ $x->as_oct(); # as signed octal string with prefixed 0
=head2 numify()
diff --git a/dist/base/lib/fields.pm b/dist/base/lib/fields.pm
index de6f379d9f..fd59b6a465 100644
--- a/dist/base/lib/fields.pm
+++ b/dist/base/lib/fields.pm
@@ -11,7 +11,7 @@ unless( eval q{require warnings::register; warnings::register->import; 1} ) {
}
use vars qw(%attr $VERSION);
-$VERSION = '2.15';
+$VERSION = '2.16';
# constant.pm is slow
sub PUBLIC () { 2**0 }
@@ -278,8 +278,8 @@ This makes it possible to write a constructor like this:
sub new {
my $self = shift;
$self = fields::new($self) unless ref $self;
- $self->{cat} = 'meow'; # scalar element
- @$self{'dog','bird'} = ('bark','tweet'); # slice
+ $self->{cat} = 'meow'; # scalar element
+ @$self{'dog','bird'} = ('bark','tweet'); # slice
return $self;
}
diff --git a/dist/bignum/lib/Math/BigFloat/Trace.pm b/dist/bignum/lib/Math/BigFloat/Trace.pm
index 055d7b70d8..5e1636e59d 100644
--- a/dist/bignum/lib/Math/BigFloat/Trace.pm
+++ b/dist/bignum/lib/Math/BigFloat/Trace.pm
@@ -12,7 +12,7 @@ use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK
@ISA = qw(Exporter Math::BigFloat);
-$VERSION = '0.28';
+$VERSION = '0.29';
use overload; # inherit overload from BigFloat
diff --git a/dist/bignum/lib/Math/BigInt/Trace.pm b/dist/bignum/lib/Math/BigInt/Trace.pm
index 59dcf43e94..5826f6123b 100644
--- a/dist/bignum/lib/Math/BigInt/Trace.pm
+++ b/dist/bignum/lib/Math/BigInt/Trace.pm
@@ -12,7 +12,7 @@ use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK
@ISA = qw(Exporter Math::BigInt);
-$VERSION = '0.28';
+$VERSION = '0.29';
use overload; # inherit overload from BigInt
diff --git a/dist/bignum/lib/bigint.pm b/dist/bignum/lib/bigint.pm
index e0fcf73c1a..926742ac31 100644
--- a/dist/bignum/lib/bigint.pm
+++ b/dist/bignum/lib/bigint.pm
@@ -1,7 +1,7 @@
package bigint;
use 5.006;
-$VERSION = '0.28';
+$VERSION = '0.29';
use Exporter;
@ISA = qw( Exporter );
@EXPORT_OK = qw( PI e bpi bexp );
@@ -353,10 +353,10 @@ In practice this makes seldom a difference as B<parts and results> of
expressions will be truncated anyway, but this can, for instance, affect the
return value of subroutines:
- sub three_integer { use integer; return 3.2; }
- sub three_bigint { use bigint; return 3.2; }
+ sub three_integer { use integer; return 3.2; }
+ sub three_bigint { use bigint; return 3.2; }
- print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3"
+ print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3"
=head2 Options
diff --git a/dist/bignum/lib/bignum.pm b/dist/bignum/lib/bignum.pm
index 716ba921e5..f0377c60f1 100644
--- a/dist/bignum/lib/bignum.pm
+++ b/dist/bignum/lib/bignum.pm
@@ -1,7 +1,7 @@
package bignum;
use 5.006;
-$VERSION = '0.28';
+$VERSION = '0.29';
use Exporter;
@ISA = qw( bigint );
@EXPORT_OK = qw( PI e bexp bpi );
@@ -364,12 +364,12 @@ allow you finer control over what get's done in which module/space. For
instance, simple loop counters will be Math::BigInts under C<use bignum;> and
this is slower than keeping them as Perl scalars:
- perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }'
+ perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }'
Please note the following does not work as expected (prints nothing), since
overloading of '..' is not yet possible in Perl (as of v5.8.0):
- perl -Mbignum -le 'for (1..2) { print ref($_); }'
+ perl -Mbignum -le 'for (1..2) { print ref($_); }'
=head2 Options
diff --git a/dist/bignum/lib/bigrat.pm b/dist/bignum/lib/bigrat.pm
index 907c13ceb5..6ba821d976 100644
--- a/dist/bignum/lib/bigrat.pm
+++ b/dist/bignum/lib/bigrat.pm
@@ -1,7 +1,7 @@
package bigrat;
use 5.006;
-$VERSION = '0.28';
+$VERSION = '0.29';
require Exporter;
@ISA = qw( bigint );
@EXPORT_OK = qw( PI e bpi bexp );
diff --git a/embed.fnc b/embed.fnc
index a84a958619..e7041b1042 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -265,7 +265,7 @@ Afnp |int |printf_nocontext|NN const char *format|...
#endif
: Used in pp.c
p |SV * |core_prototype |NULLOK SV *sv|NN const char *name \
- |const STRLEN len|const bool croak
+ |const int code|NULLOK int * const opnum
: Used in sv.c
p |void |cv_ckproto_len |NN const CV* cv|NULLOK const GV* gv\
|NULLOK const char* p|const STRLEN len
@@ -758,8 +758,6 @@ Ap |I32 |mg_size |NN SV* sv
Ap |void |mini_mktime |NN struct tm *ptm
AMmd |OP* |op_lvalue |NULLOK OP* o|I32 type
poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags
-: To be removed after 5.14 (see [perl #78908]):
-EXp |OP* |mod |NULLOK OP* o|I32 type
p |void |finalize_optree |NN OP* o
#if defined(PERL_IN_OP_C)
s |void |finalize_op |NN OP* o
@@ -807,6 +805,9 @@ p |void |my_unexec
Apa |OP* |newANONLIST |NULLOK OP* o
Apa |OP* |newANONHASH |NULLOK OP* o
Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block
+#if defined(PERL_IN_OP_C)
+i |bool |aassign_common_vars |NULLOK OP* o
+#endif
Apda |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right
Apda |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop
Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv
@@ -878,6 +879,8 @@ Apd |CV* |rv2cv_op_cv |NN OP *cvop|U32 flags
Apd |OP* |ck_entersub_args_list|NN OP *entersubop
Apd |OP* |ck_entersub_args_proto|NN OP *entersubop|NN GV *namegv|NN SV *protosv
Apd |OP* |ck_entersub_args_proto_or_list|NN OP *entersubop|NN GV *namegv|NN SV *protosv
+po |OP* |ck_entersub_args_core|NN OP *entersubop|NN GV *namegv \
+ |NN SV *protosv
Apd |void |cv_get_call_checker|NN CV *cv|NN Perl_call_checker *ckfun_p|NN SV **ckobj_p
Apd |void |cv_set_call_checker|NN CV *cv|NN Perl_call_checker ckfun|NN SV *ckobj
Apa |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
@@ -1640,10 +1643,10 @@ s |OP * |dup_attrlist |NN OP *o
s |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs|bool for_my
s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
s |void |bad_type |I32 n|NN const char *t|NN const char *name|NN const OP *kid
-s |void |no_bareword_allowed|NN const OP *o
+s |void |no_bareword_allowed|NN OP *o
sR |OP* |no_fh_allowed|NN OP *o
sR |OP* |too_few_arguments|NN OP *o|NN const char* name
-sR |OP* |too_many_arguments|NN OP *o|NN const char* name
+s |OP* |too_many_arguments|NN OP *o|NN const char* name
s |bool |looks_like_bool|NN const OP* o
s |OP* |newGIVWHENOP |NULLOK OP* cond|NN OP *block \
|I32 enter_opcode|I32 leave_opcode \
diff --git a/embed.h b/embed.h
index b15a92e417..7fc3b211b8 100644
--- a/embed.h
+++ b/embed.h
@@ -840,7 +840,6 @@
#define is_utf8_X_extend(a) Perl_is_utf8_X_extend(aTHX_ a)
#define is_utf8_X_non_hangul(a) Perl_is_utf8_X_non_hangul(aTHX_ a)
#define is_utf8_X_prepend(a) Perl_is_utf8_X_prepend(aTHX_ a)
-#define mod(a,b) Perl_mod(aTHX_ a,b)
#define op_clear(a) Perl_op_clear(aTHX_ a)
#define qerror(a) Perl_qerror(aTHX_ a)
#define reg_named_buff(a,b,c,d) Perl_reg_named_buff(aTHX_ a,b,c,d)
@@ -1332,6 +1331,7 @@
#define mulexp10 S_mulexp10
# endif
# if defined(PERL_IN_OP_C)
+#define aassign_common_vars(a) S_aassign_common_vars(aTHX_ a)
#define apply_attrs(a,b,c,d) S_apply_attrs(aTHX_ a,b,c,d)
#define apply_attrs_my(a,b,c,d) S_apply_attrs_my(aTHX_ a,b,c,d)
#define bad_type(a,b,c,d) S_bad_type(aTHX_ a,b,c,d)
diff --git a/embedvar.h b/embedvar.h
index 2405ee58e3..575e2e2aca 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -366,337 +366,6 @@
#define PL_watchok (vTHX->Iwatchok)
#define PL_xmlfp (vTHX->Ixmlfp)
-#else /* !MULTIPLICITY */
-
-/* case 1 above */
-
-#define PL_IArgv PL_Argv
-#define PL_ICmd PL_Cmd
-#define PL_IDBcv PL_DBcv
-#define PL_IDBgv PL_DBgv
-#define PL_IDBline PL_DBline
-#define PL_IDBsignal PL_DBsignal
-#define PL_IDBsingle PL_DBsingle
-#define PL_IDBsub PL_DBsub
-#define PL_IDBtrace PL_DBtrace
-#define PL_IDir PL_Dir
-#define PL_IEnv PL_Env
-#define PL_ILIO PL_LIO
-#define PL_IMem PL_Mem
-#define PL_IMemParse PL_MemParse
-#define PL_IMemShared PL_MemShared
-#define PL_IOpPtr PL_OpPtr
-#define PL_IOpSlab PL_OpSlab
-#define PL_IOpSpace PL_OpSpace
-#define PL_IProc PL_Proc
-#define PL_ISock PL_Sock
-#define PL_IStdIO PL_StdIO
-#define PL_ISv PL_Sv
-#define PL_IXpv PL_Xpv
-#define PL_Iamagic_generation PL_amagic_generation
-#define PL_Ian PL_an
-#define PL_Iapiversion PL_apiversion
-#define PL_Iargvgv PL_argvgv
-#define PL_Iargvout_stack PL_argvout_stack
-#define PL_Iargvoutgv PL_argvoutgv
-#define PL_Ibasetime PL_basetime
-#define PL_Ibeginav PL_beginav
-#define PL_Ibeginav_save PL_beginav_save
-#define PL_Iblockhooks PL_blockhooks
-#define PL_Ibody_arenas PL_body_arenas
-#define PL_Ibody_roots PL_body_roots
-#define PL_Ibodytarget PL_bodytarget
-#define PL_Ibreakable_sub_gen PL_breakable_sub_gen
-#define PL_Icheckav PL_checkav
-#define PL_Icheckav_save PL_checkav_save
-#define PL_Ichopset PL_chopset
-#define PL_Iclocktick PL_clocktick
-#define PL_Icollation_ix PL_collation_ix
-#define PL_Icollation_name PL_collation_name
-#define PL_Icollation_standard PL_collation_standard
-#define PL_Icollxfrm_base PL_collxfrm_base
-#define PL_Icollxfrm_mult PL_collxfrm_mult
-#define PL_Icolors PL_colors
-#define PL_Icolorset PL_colorset
-#define PL_Icompcv PL_compcv
-#define PL_Icompiling PL_compiling
-#define PL_Icomppad PL_comppad
-#define PL_Icomppad_name PL_comppad_name
-#define PL_Icomppad_name_fill PL_comppad_name_fill
-#define PL_Icomppad_name_floor PL_comppad_name_floor
-#define PL_Icop_seqmax PL_cop_seqmax
-#define PL_Icryptseen PL_cryptseen
-#define PL_Icurcop PL_curcop
-#define PL_Icurcopdb PL_curcopdb
-#define PL_Icurpad PL_curpad
-#define PL_Icurpm PL_curpm
-#define PL_Icurstack PL_curstack
-#define PL_Icurstackinfo PL_curstackinfo
-#define PL_Icurstash PL_curstash
-#define PL_Icurstname PL_curstname
-#define PL_Icustom_op_descs PL_custom_op_descs
-#define PL_Icustom_op_names PL_custom_op_names
-#define PL_Icustom_ops PL_custom_ops
-#define PL_Icv_has_eval PL_cv_has_eval
-#define PL_Idbargs PL_dbargs
-#define PL_Idebstash PL_debstash
-#define PL_Idebug PL_debug
-#define PL_Idebug_pad PL_debug_pad
-#define PL_Idef_layerlist PL_def_layerlist
-#define PL_Idefgv PL_defgv
-#define PL_Idefoutgv PL_defoutgv
-#define PL_Idefstash PL_defstash
-#define PL_Idelaymagic PL_delaymagic
-#define PL_Idestroyhook PL_destroyhook
-#define PL_Idiehook PL_diehook
-#define PL_Idoswitches PL_doswitches
-#define PL_Idowarn PL_dowarn
-#define PL_Idumper_fd PL_dumper_fd
-#define PL_Idumpindent PL_dumpindent
-#define PL_Ie_script PL_e_script
-#define PL_Iefloatbuf PL_efloatbuf
-#define PL_Iefloatsize PL_efloatsize
-#define PL_Iegid PL_egid
-#define PL_Iencoding PL_encoding
-#define PL_Iendav PL_endav
-#define PL_Ienvgv PL_envgv
-#define PL_Ierrgv PL_errgv
-#define PL_Ierrors PL_errors
-#define PL_Ieuid PL_euid
-#define PL_Ieval_root PL_eval_root
-#define PL_Ieval_start PL_eval_start
-#define PL_Ievalseq PL_evalseq
-#define PL_Iexit_flags PL_exit_flags
-#define PL_Iexitlist PL_exitlist
-#define PL_Iexitlistlen PL_exitlistlen
-#define PL_Ifdpid PL_fdpid
-#define PL_Ifilemode PL_filemode
-#define PL_Ifirstgv PL_firstgv
-#define PL_Iforkprocess PL_forkprocess
-#define PL_Iformfeed PL_formfeed
-#define PL_Iformtarget PL_formtarget
-#define PL_Igeneration PL_generation
-#define PL_Igensym PL_gensym
-#define PL_Igid PL_gid
-#define PL_Iglob_index PL_glob_index
-#define PL_Iglobalstash PL_globalstash
-#define PL_Ihash_seed PL_hash_seed
-#define PL_Ihintgv PL_hintgv
-#define PL_Ihints PL_hints
-#define PL_Ihv_fetch_ent_mh PL_hv_fetch_ent_mh
-#define PL_Iin_clean_all PL_in_clean_all
-#define PL_Iin_clean_objs PL_in_clean_objs
-#define PL_Iin_eval PL_in_eval
-#define PL_Iin_load_module PL_in_load_module
-#define PL_Iincgv PL_incgv
-#define PL_Iinitav PL_initav
-#define PL_Iinplace PL_inplace
-#define PL_Iisarev PL_isarev
-#define PL_Iknown_layers PL_known_layers
-#define PL_Ilast_in_gv PL_last_in_gv
-#define PL_Ilast_swash_hv PL_last_swash_hv
-#define PL_Ilast_swash_key PL_last_swash_key
-#define PL_Ilast_swash_klen PL_last_swash_klen
-#define PL_Ilast_swash_slen PL_last_swash_slen
-#define PL_Ilast_swash_tmps PL_last_swash_tmps
-#define PL_Ilastfd PL_lastfd
-#define PL_Ilastgotoprobe PL_lastgotoprobe
-#define PL_Ilaststatval PL_laststatval
-#define PL_Ilaststype PL_laststype
-#define PL_Ilocalizing PL_localizing
-#define PL_Ilocalpatches PL_localpatches
-#define PL_Ilockhook PL_lockhook
-#define PL_Imadskills PL_madskills
-#define PL_Imain_cv PL_main_cv
-#define PL_Imain_root PL_main_root
-#define PL_Imain_start PL_main_start
-#define PL_Imainstack PL_mainstack
-#define PL_Imarkstack PL_markstack
-#define PL_Imarkstack_max PL_markstack_max
-#define PL_Imarkstack_ptr PL_markstack_ptr
-#define PL_Imax_intro_pending PL_max_intro_pending
-#define PL_Imaxo PL_maxo
-#define PL_Imaxsysfd PL_maxsysfd
-#define PL_Imemory_debug_header PL_memory_debug_header
-#define PL_Imess_sv PL_mess_sv
-#define PL_Imin_intro_pending PL_min_intro_pending
-#define PL_Iminus_E PL_minus_E
-#define PL_Iminus_F PL_minus_F
-#define PL_Iminus_a PL_minus_a
-#define PL_Iminus_c PL_minus_c
-#define PL_Iminus_l PL_minus_l
-#define PL_Iminus_n PL_minus_n
-#define PL_Iminus_p PL_minus_p
-#define PL_Imodcount PL_modcount
-#define PL_Imodglobal PL_modglobal
-#define PL_Imy_cxt_keys PL_my_cxt_keys
-#define PL_Imy_cxt_list PL_my_cxt_list
-#define PL_Imy_cxt_size PL_my_cxt_size
-#define PL_Ina PL_na
-#define PL_Inomemok PL_nomemok
-#define PL_Inumeric_local PL_numeric_local
-#define PL_Inumeric_name PL_numeric_name
-#define PL_Inumeric_radix_sv PL_numeric_radix_sv
-#define PL_Inumeric_standard PL_numeric_standard
-#define PL_Iofsgv PL_ofsgv
-#define PL_Ioldname PL_oldname
-#define PL_Iop PL_op
-#define PL_Iop_mask PL_op_mask
-#define PL_Iopfreehook PL_opfreehook
-#define PL_Iopsave PL_opsave
-#define PL_Iorigalen PL_origalen
-#define PL_Iorigargc PL_origargc
-#define PL_Iorigargv PL_origargv
-#define PL_Iorigenviron PL_origenviron
-#define PL_Iorigfilename PL_origfilename
-#define PL_Iors_sv PL_ors_sv
-#define PL_Iosname PL_osname
-#define PL_Ipad_reset_pending PL_pad_reset_pending
-#define PL_Ipadix PL_padix
-#define PL_Ipadix_floor PL_padix_floor
-#define PL_Iparser PL_parser
-#define PL_Ipatchlevel PL_patchlevel
-#define PL_Ipeepp PL_peepp
-#define PL_Iperl_destruct_level PL_perl_destruct_level
-#define PL_Iperldb PL_perldb
-#define PL_Iperlio PL_perlio
-#define PL_Iphase PL_phase
-#define PL_Ipidstatus PL_pidstatus
-#define PL_Ippid PL_ppid
-#define PL_Ipreambleav PL_preambleav
-#define PL_Iprofiledata PL_profiledata
-#define PL_Ipsig_name PL_psig_name
-#define PL_Ipsig_pend PL_psig_pend
-#define PL_Ipsig_ptr PL_psig_ptr
-#define PL_Iptr_table PL_ptr_table
-#define PL_Ireentrant_buffer PL_reentrant_buffer
-#define PL_Ireentrant_retint PL_reentrant_retint
-#define PL_Ireg_state PL_reg_state
-#define PL_Iregdummy PL_regdummy
-#define PL_Iregex_pad PL_regex_pad
-#define PL_Iregex_padav PL_regex_padav
-#define PL_Ireginterp_cnt PL_reginterp_cnt
-#define PL_Iregistered_mros PL_registered_mros
-#define PL_Iregmatch_slab PL_regmatch_slab
-#define PL_Iregmatch_state PL_regmatch_state
-#define PL_Irehash_seed PL_rehash_seed
-#define PL_Irehash_seed_set PL_rehash_seed_set
-#define PL_Ireplgv PL_replgv
-#define PL_Irestartjmpenv PL_restartjmpenv
-#define PL_Irestartop PL_restartop
-#define PL_Irpeepp PL_rpeepp
-#define PL_Irs PL_rs
-#define PL_Irunops PL_runops
-#define PL_Isavebegin PL_savebegin
-#define PL_Isavestack PL_savestack
-#define PL_Isavestack_ix PL_savestack_ix
-#define PL_Isavestack_max PL_savestack_max
-#define PL_Isawampersand PL_sawampersand
-#define PL_Iscopestack PL_scopestack
-#define PL_Iscopestack_ix PL_scopestack_ix
-#define PL_Iscopestack_max PL_scopestack_max
-#define PL_Iscopestack_name PL_scopestack_name
-#define PL_Isecondgv PL_secondgv
-#define PL_Isharehook PL_sharehook
-#define PL_Isig_pending PL_sig_pending
-#define PL_Isighandlerp PL_sighandlerp
-#define PL_Isignalhook PL_signalhook
-#define PL_Isignals PL_signals
-#define PL_Islab_count PL_slab_count
-#define PL_Islabs PL_slabs
-#define PL_Isort_RealCmp PL_sort_RealCmp
-#define PL_Isortcop PL_sortcop
-#define PL_Isortstash PL_sortstash
-#define PL_Isplitstr PL_splitstr
-#define PL_Isrand_called PL_srand_called
-#define PL_Istack_base PL_stack_base
-#define PL_Istack_max PL_stack_max
-#define PL_Istack_sp PL_stack_sp
-#define PL_Istart_env PL_start_env
-#define PL_Istashcache PL_stashcache
-#define PL_Istatbuf PL_statbuf
-#define PL_Istatcache PL_statcache
-#define PL_Istatgv PL_statgv
-#define PL_Istatname PL_statname
-#define PL_Istatusvalue PL_statusvalue
-#define PL_Istatusvalue_posix PL_statusvalue_posix
-#define PL_Istatusvalue_vms PL_statusvalue_vms
-#define PL_Istderrgv PL_stderrgv
-#define PL_Istdingv PL_stdingv
-#define PL_Istrtab PL_strtab
-#define PL_Isub_generation PL_sub_generation
-#define PL_Isubline PL_subline
-#define PL_Isubname PL_subname
-#define PL_Isv_arenaroot PL_sv_arenaroot
-#define PL_Isv_count PL_sv_count
-#define PL_Isv_no PL_sv_no
-#define PL_Isv_objcount PL_sv_objcount
-#define PL_Isv_root PL_sv_root
-#define PL_Isv_serial PL_sv_serial
-#define PL_Isv_undef PL_sv_undef
-#define PL_Isv_yes PL_sv_yes
-#define PL_Isys_intern PL_sys_intern
-#define PL_Itaint_warn PL_taint_warn
-#define PL_Itainted PL_tainted
-#define PL_Itainting PL_tainting
-#define PL_Ithreadhook PL_threadhook
-#define PL_Itimesbuf PL_timesbuf
-#define PL_Itmps_floor PL_tmps_floor
-#define PL_Itmps_ix PL_tmps_ix
-#define PL_Itmps_max PL_tmps_max
-#define PL_Itmps_stack PL_tmps_stack
-#define PL_Itop_env PL_top_env
-#define PL_Itoptarget PL_toptarget
-#define PL_Iuid PL_uid
-#define PL_Iunicode PL_unicode
-#define PL_Iunitcheckav PL_unitcheckav
-#define PL_Iunitcheckav_save PL_unitcheckav_save
-#define PL_Iunlockhook PL_unlockhook
-#define PL_Iunsafe PL_unsafe
-#define PL_Iutf8_X_L PL_utf8_X_L
-#define PL_Iutf8_X_LV PL_utf8_X_LV
-#define PL_Iutf8_X_LVT PL_utf8_X_LVT
-#define PL_Iutf8_X_LV_LVT_V PL_utf8_X_LV_LVT_V
-#define PL_Iutf8_X_T PL_utf8_X_T
-#define PL_Iutf8_X_V PL_utf8_X_V
-#define PL_Iutf8_X_begin PL_utf8_X_begin
-#define PL_Iutf8_X_extend PL_utf8_X_extend
-#define PL_Iutf8_X_non_hangul PL_utf8_X_non_hangul
-#define PL_Iutf8_X_prepend PL_utf8_X_prepend
-#define PL_Iutf8_alnum PL_utf8_alnum
-#define PL_Iutf8_alpha PL_utf8_alpha
-#define PL_Iutf8_ascii PL_utf8_ascii
-#define PL_Iutf8_cntrl PL_utf8_cntrl
-#define PL_Iutf8_digit PL_utf8_digit
-#define PL_Iutf8_foldable PL_utf8_foldable
-#define PL_Iutf8_foldclosures PL_utf8_foldclosures
-#define PL_Iutf8_graph PL_utf8_graph
-#define PL_Iutf8_idcont PL_utf8_idcont
-#define PL_Iutf8_idstart PL_utf8_idstart
-#define PL_Iutf8_lower PL_utf8_lower
-#define PL_Iutf8_mark PL_utf8_mark
-#define PL_Iutf8_perl_space PL_utf8_perl_space
-#define PL_Iutf8_perl_word PL_utf8_perl_word
-#define PL_Iutf8_posix_digit PL_utf8_posix_digit
-#define PL_Iutf8_print PL_utf8_print
-#define PL_Iutf8_punct PL_utf8_punct
-#define PL_Iutf8_space PL_utf8_space
-#define PL_Iutf8_tofold PL_utf8_tofold
-#define PL_Iutf8_tolower PL_utf8_tolower
-#define PL_Iutf8_totitle PL_utf8_totitle
-#define PL_Iutf8_toupper PL_utf8_toupper
-#define PL_Iutf8_upper PL_utf8_upper
-#define PL_Iutf8_xdigit PL_utf8_xdigit
-#define PL_Iutf8_xidcont PL_utf8_xidcont
-#define PL_Iutf8_xidstart PL_utf8_xidstart
-#define PL_Iutf8cache PL_utf8cache
-#define PL_Iutf8locale PL_utf8locale
-#define PL_Iwarnhook PL_warnhook
-#define PL_Iwatchaddr PL_watchaddr
-#define PL_Iwatchok PL_watchok
-#define PL_Ixmlfp PL_xmlfp
-
-
#endif /* MULTIPLICITY */
#if defined(PERL_GLOBAL_STRUCT)
@@ -770,44 +439,6 @@
#define PL_watch_pvx (my_vars->Gwatch_pvx)
#define PL_Gwatch_pvx (my_vars->Gwatch_pvx)
-#else /* !PERL_GLOBAL_STRUCT */
-
-#define PL_Gappctx PL_appctx
-#define PL_Gcheck PL_check
-#define PL_Gcsighandlerp PL_csighandlerp
-#define PL_Gcurinterp PL_curinterp
-#define PL_Gdo_undump PL_do_undump
-#define PL_Gdollarzero_mutex PL_dollarzero_mutex
-#define PL_Gfold_locale PL_fold_locale
-#define PL_Ghints_mutex PL_hints_mutex
-#define PL_Gkeyword_plugin PL_keyword_plugin
-#define PL_Gmalloc_mutex PL_malloc_mutex
-#define PL_Gmmap_page_size PL_mmap_page_size
-#define PL_Gmy_ctx_mutex PL_my_ctx_mutex
-#define PL_Gmy_cxt_index PL_my_cxt_index
-#define PL_Gop_mutex PL_op_mutex
-#define PL_Gop_seq PL_op_seq
-#define PL_Gop_sequence PL_op_sequence
-#define PL_Gperlio_debug_fd PL_perlio_debug_fd
-#define PL_Gperlio_fd_refcnt PL_perlio_fd_refcnt
-#define PL_Gperlio_fd_refcnt_size PL_perlio_fd_refcnt_size
-#define PL_Gperlio_mutex PL_perlio_mutex
-#define PL_Gppaddr PL_ppaddr
-#ifdef OS2
-#define PL_Gsh_path PL_sh_path
-#endif
-#define PL_Gsig_defaulting PL_sig_defaulting
-#define PL_Gsig_handlers_initted PL_sig_handlers_initted
-#define PL_Gsig_ignoring PL_sig_ignoring
-#define PL_Gsig_trapped PL_sig_trapped
-#define PL_Gsigfpe_saved PL_sigfpe_saved
-#define PL_Gsv_placeholder PL_sv_placeholder
-#define PL_Gthr_key PL_thr_key
-#define PL_Gtimesbase PL_timesbase
-#define PL_Guse_safe_putenv PL_use_safe_putenv
-#define PL_Gveto_cleanup PL_veto_cleanup
-#define PL_Gwatch_pvx PL_watch_pvx
-
#endif /* PERL_GLOBAL_STRUCT */
/* ex: set ro: */
diff --git a/epoc/config.sh b/epoc/config.sh
index eedc6a8b23..5c7f6d51f1 100644
--- a/epoc/config.sh
+++ b/epoc/config.sh
@@ -858,6 +858,8 @@ stdio_cnt=''
stdio_filbuf=''
stdio_ptr=''
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings=''
submit=''
diff --git a/ext/B/B.pm b/ext/B/B.pm
index da20925ae5..2f18065e4a 100644
--- a/ext/B/B.pm
+++ b/ext/B/B.pm
@@ -15,7 +15,7 @@ require Exporter;
# walkoptree comes from B.xs
BEGIN {
- $B::VERSION = '1.30';
+ $B::VERSION = '1.31';
@B::EXPORT_OK = ();
# Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
diff --git a/ext/B/B.xs b/ext/B/B.xs
index 901554968f..0c44e45bad 100644
--- a/ext/B/B.xs
+++ b/ext/B/B.xs
@@ -609,10 +609,10 @@ typedef struct refcounted_he *B__RHE;
#endif
#ifdef MULTIPLICITY
-# define ASSIGN_COMMON_ALIAS(var) \
- STMT_START { XSANY.any_i32 = offsetof(struct interpreter, var); } STMT_END
+# define ASSIGN_COMMON_ALIAS(prefix, var) \
+ STMT_START { XSANY.any_i32 = offsetof(struct interpreter, prefix##var); } STMT_END
#else
-# define ASSIGN_COMMON_ALIAS(var) \
+# define ASSIGN_COMMON_ALIAS(prefix, var) \
STMT_START { XSANY.any_ptr = (void *)&PL_##var; } STMT_END
#endif
@@ -657,35 +657,35 @@ BOOT:
specialsv_list[6] = (SV *) pWARN_STD;
cv = newXS("B::init_av", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iinitav);
+ ASSIGN_COMMON_ALIAS(I, initav);
cv = newXS("B::check_av", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Icheckav_save);
+ ASSIGN_COMMON_ALIAS(I, checkav_save);
#if PERL_VERSION >= 9
cv = newXS("B::unitcheck_av", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iunitcheckav_save);
+ ASSIGN_COMMON_ALIAS(I, unitcheckav_save);
#endif
cv = newXS("B::begin_av", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Ibeginav_save);
+ ASSIGN_COMMON_ALIAS(I, beginav_save);
cv = newXS("B::end_av", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iendav);
+ ASSIGN_COMMON_ALIAS(I, endav);
cv = newXS("B::main_cv", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Imain_cv);
+ ASSIGN_COMMON_ALIAS(I, main_cv);
cv = newXS("B::inc_gv", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iincgv);
+ ASSIGN_COMMON_ALIAS(I, incgv);
cv = newXS("B::defstash", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Idefstash);
+ ASSIGN_COMMON_ALIAS(I, defstash);
cv = newXS("B::curstash", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Icurstash);
+ ASSIGN_COMMON_ALIAS(I, curstash);
cv = newXS("B::formfeed", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iformfeed);
+ ASSIGN_COMMON_ALIAS(I, formfeed);
#ifdef USE_ITHREADS
cv = newXS("B::regex_padav", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iregex_padav);
+ ASSIGN_COMMON_ALIAS(I, regex_padav);
#endif
cv = newXS("B::warnhook", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Iwarnhook);
+ ASSIGN_COMMON_ALIAS(I, warnhook);
cv = newXS("B::diehook", intrpvar_sv_common, file);
- ASSIGN_COMMON_ALIAS(Idiehook);
+ ASSIGN_COMMON_ALIAS(I, diehook);
}
long
diff --git a/ext/B/B/Terse.pm b/ext/B/B/Terse.pm
index 562c58abd8..8e551c5a62 100644
--- a/ext/B/B/Terse.pm
+++ b/ext/B/B/Terse.pm
@@ -1,6 +1,6 @@
package B::Terse;
-our $VERSION = '1.05';
+our $VERSION = '1.06';
use strict;
use B qw(class @specialsv_name);
@@ -78,7 +78,15 @@ B::Terse - Walk Perl syntax tree, printing terse info about ops
=head1 DESCRIPTION
-This version of B::Terse is really just a wrapper that calls B::Concise
+This module prints the contents of the parse tree, but without as much
+information as L<B::Debug>. For comparison, C<print "Hello, world.">
+produced 96 lines of output from B::Debug, but only 6 from B::Terse.
+
+This module is useful for people who are writing their own back end,
+or who are learning about the Perl internals. It's not useful to the
+average programmer.
+
+This version of B::Terse is really just a wrapper that calls L<B::Concise>
with the B<-terse> option. It is provided for compatibility with old scripts
(and habits) but using B::Concise directly is now recommended instead.
diff --git a/ext/B/B/Xref.pm b/ext/B/B/Xref.pm
index 64e677ccb8..f3a362c3f6 100644
--- a/ext/B/B/Xref.pm
+++ b/ext/B/B/Xref.pm
@@ -1,6 +1,6 @@
package B::Xref;
-our $VERSION = '1.02';
+our $VERSION = '1.03';
=head1 NAME
@@ -48,6 +48,56 @@ letter "i". Subroutine and method calls are indicated by the character
"&". Subroutine definitions are indicated by "s" and format
definitions by "f".
+For instance, here's part of the report from the I<pod2man> program that
+comes with Perl:
+
+ Subroutine clear_noremap
+ Package (lexical)
+ $ready_to_print i1069, 1079
+ Package main
+ $& 1086
+ $. 1086
+ $0 1086
+ $1 1087
+ $2 1085, 1085
+ $3 1085, 1085
+ $ARGV 1086
+ %HTML_Escapes 1085, 1085
+
+This shows the variables used in the subroutine C<clear_noremap>. The
+variable C<$ready_to_print> is a my() (lexical) variable,
+B<i>ntroduced (first declared with my()) on line 1069, and used on
+line 1079. The variable C<$&> from the main package is used on 1086,
+and so on.
+
+A line number may be prefixed by a single letter:
+
+=over 4
+
+=item i
+
+Lexical variable introduced (declared with my()) for the first time.
+
+=item &
+
+Subroutine or method call.
+
+=item s
+
+Subroutine defined.
+
+=item r
+
+Format defined.
+
+=back
+
+The most useful option the cross referencer has is to save the report
+to a separate file. For instance, to save the report on
+I<myperlprogram> to the file I<report>:
+
+ $ perl -MO=Xref,-oreport myperlprogram
+
=head1 OPTIONS
Option words are separated by commas (not whitespace) and follow the
diff --git a/ext/Socket/t/getaddrinfo.t b/ext/Socket/t/getaddrinfo.t
index 5c8d1539d7..b85af38254 100644
--- a/ext/Socket/t/getaddrinfo.t
+++ b/ext/Socket/t/getaddrinfo.t
@@ -1,6 +1,6 @@
use strict;
use warnings;
-use Test::More tests => 29;
+use Test::More tests => 30;
use Socket qw(
AI_NUMERICHOST AF_INET SOCK_STREAM IPPROTO_TCP
@@ -21,9 +21,15 @@ is( $res[0]->{socktype}, SOCK_STREAM,
'$res[0] socktype is SOCK_STREAM' );
ok( $res[0]->{protocol} == 0 || $res[0]->{protocol} == IPPROTO_TCP,
'$res[0] protocol is 0 or IPPROTO_TCP' );
-is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
- [ 80, inet_aton( "127.0.0.1" ) ],
- '$res[0] addr is {"127.0.0.1", 80}' );
+ok( defined $res[0]->{addr},
+ '$res[0] addr is defined' );
+if (length $res[0]->{addr}) {
+ is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
+ [ 80, inet_aton( "127.0.0.1" ) ],
+ '$res[0] addr is {"127.0.0.1", 80}' );
+} else {
+ fail( '$res[0] addr is empty: check $socksizetype' );
+}
# Check actual IV integers work just as well as PV strings
( $err, @res ) = getaddrinfo( "127.0.0.1", 80, { socktype => SOCK_STREAM } );
diff --git a/global.sym b/global.sym
index 11de51ef9c..0a27f2982f 100644
--- a/global.sym
+++ b/global.sym
@@ -323,7 +323,6 @@ Perl_mg_magical
Perl_mg_set
Perl_mg_size
Perl_mini_mktime
-Perl_mod
Perl_moreswitches
Perl_mro_get_from_name
Perl_mro_get_linear_isa
diff --git a/gv.c b/gv.c
index 79bc0e9c0c..1741bda79d 100644
--- a/gv.c
+++ b/gv.c
@@ -36,6 +36,7 @@ Perl stores its global variables.
#define PERL_IN_GV_C
#include "perl.h"
#include "overload.c"
+#include "keywords.h"
static const char S_autoload[] = "AUTOLOAD";
static const STRLEN S_autolen = sizeof(S_autoload)-1;
@@ -411,7 +412,6 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
HV* cstash;
GV* candidate = NULL;
CV* cand_cv = NULL;
- CV* old_cv;
GV* topgv = NULL;
const char *hvname;
I32 create = (level >= 0) ? 1 : 0;
@@ -505,7 +505,8 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
* 2. method isn't a stub (else AUTOLOAD fails spectacularly)
*/
if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
- if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
+ CV *old_cv = GvCV(topgv);
+ SvREFCNT_dec(old_cv);
SvREFCNT_inc_simple_void_NN(cand_cv);
GvCV_set(topgv, cand_cv);
GvCVGEN(topgv) = topgen_cmp;
@@ -520,7 +521,8 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
if(candidate) {
cand_cv = GvCV(candidate);
if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
- if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
+ CV *old_cv = GvCV(topgv);
+ SvREFCNT_dec(old_cv);
SvREFCNT_inc_simple_void_NN(cand_cv);
GvCV_set(topgv, cand_cv);
GvCVGEN(topgv) = topgen_cmp;
@@ -1032,6 +1034,8 @@ S_gv_magicalize_overload(pTHX_ GV *gv)
hv_magic(hv, NULL, PERL_MAGIC_overload);
}
+static void core_xsub(pTHX_ CV* cv);
+
GV *
Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
const svtype sv_type)
@@ -1105,7 +1109,13 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
{
stash = GvHV(gv) = newHV();
if (!HvNAME_get(stash)) {
- hv_name_set(stash, nambeg, name_cursor-nambeg, 0);
+ if (GvSTASH(gv) == PL_defstash && len == 6
+ && strnEQ(name, "CORE", 4))
+ hv_name_set(stash, "CORE", 4, 0);
+ else
+ hv_name_set(
+ stash, nambeg, name_cursor-nambeg, 0
+ );
/* If the containing stash has multiple effective
names, see that this one gets them, too. */
if (HvAUX(GvSTASH(gv))->xhv_name_count)
@@ -1290,7 +1300,8 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
/* set up magic where warranted */
if (stash != PL_defstash) { /* not the main stash */
/* We only have to check for four names here: EXPORT, ISA, OVERLOAD
- and VERSION. All the others apply only to the main stash. */
+ and VERSION. All the others apply only to the main stash or to
+ CORE (which is checked right after this). */
if (len > 2) {
const char * const name2 = name + 1;
switch (*name) {
@@ -1310,7 +1321,53 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
if (strEQ(name2, "ERSION"))
GvMULTI_on(gv);
break;
+ default:
+ goto try_core;
}
+ return gv;
+ }
+ try_core:
+ if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
+ /* Avoid null warning: */
+ const char * const stashname = HvNAME(stash); assert(stashname);
+ if (strnEQ(stashname, "CORE", 4)) {
+ const int code = keyword(name, len, 1);
+ static const char file[] = __FILE__;
+ CV *cv;
+ int opnum = 0;
+ SV *opnumsv;
+ if (code >= 0) return gv; /* not overridable */
+ /* no support for \&CORE::infix;
+ no support for &CORE::not or &CORE::getprotobynumber
+ either, yet, as we cannot get the precedence right;
+ no support for funcs that take labels, as their parsing is
+ weird */
+ switch (-code) {
+ case KEY_and: case KEY_cmp: case KEY_CORE: case KEY_dump:
+ case KEY_eq: case KEY_ge:
+ case KEY_getprotobynumber: case KEY_gt: case KEY_le:
+ case KEY_lt: case KEY_ne: case KEY_not:
+ case KEY_or: case KEY_x: case KEY_xor:
+ return gv;
+ }
+ /* Avoid calling newXS, as it calls us, and things start to
+ get hairy. */
+ cv = MUTABLE_CV(newSV_type(SVt_PVCV));
+ GvCV_set(gv,cv);
+ GvCVGEN(gv) = 0;
+ mro_method_changed_in(GvSTASH(gv));
+ CvGV_set(cv, gv);
+ (void)gv_fetchfile(file);
+ CvFILE(cv) = (char *)file;
+ CvISXSUB_on(cv);
+ CvXSUB(cv) = core_xsub;
+ (void)core_prototype((SV *)cv, name, code, &opnum);
+ opnumsv = opnum ? newSVuv((UV)opnum) : (SV *)NULL;
+ cv_set_call_checker(
+ cv, Perl_ck_entersub_args_core, opnumsv ? opnumsv : (SV *)cv
+ );
+ SvREFCNT_dec(opnumsv);
+ }
}
}
else if (len > 1) {
@@ -2773,6 +2830,16 @@ Perl_gv_try_downgrade(pTHX_ GV *gv)
}
}
+#include "XSUB.h"
+
+static void
+core_xsub(pTHX_ CV* cv)
+{
+ Perl_croak(aTHX_
+ "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
+ );
+}
+
/*
* Local variables:
* c-indentation-style: bsd
diff --git a/hints/hpux.sh b/hints/hpux.sh
index cb1718478e..be6c1fddb8 100644
--- a/hints/hpux.sh
+++ b/hints/hpux.sh
@@ -263,6 +263,16 @@ EOM
case "$ccisgcc" in
$define|true|[Yy])
+ # The fixed socket.h header file is wrong for gcc-4.x
+ # on PA-RISC2.0W, so Sock_type_t is size_t which is
+ # unsigned long which is 64bit which is too long
+ case "$gccversion" in
+ 4*) case "$archname" in
+ PA-RISC*) socksizetype=int ;;
+ esac
+ ;;
+ esac
+
# For the moment, don't care that it ain't supported (yet)
# by gcc (up to and including 2.95.3), cause it'll crash
# anyway. Expect auto-detection of 64-bit enabled gcc on
diff --git a/hv.c b/hv.c
index f8f16b640a..d6ecfb4a1d 100644
--- a/hv.c
+++ b/hv.c
@@ -1813,7 +1813,7 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags)
SvREFCNT_dec(meta->mro_linear_current);
meta->mro_linear_current = NULL;
}
- if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod);
+ SvREFCNT_dec(meta->mro_nextmethod);
SvREFCNT_dec(meta->isa);
Safefree(meta);
aux->xhv_mro_meta = NULL;
diff --git a/intrpvar.h b/intrpvar.h
index 4a6122faa1..84534c94c1 100644
--- a/intrpvar.h
+++ b/intrpvar.h
@@ -32,43 +32,43 @@
*
* Important ones in the first cache line (if alignment is done right) */
-PERLVAR(Istack_sp, SV **) /* top of the stack */
+PERLVAR(I, stack_sp, SV **) /* top of the stack */
#ifdef OP_IN_REGISTER
-PERLVAR(Iopsave, OP *)
+PERLVAR(I, opsave, OP *)
#else
-PERLVAR(Iop, OP *) /* currently executing op */
+PERLVAR(I, op, OP *) /* currently executing op */
#endif
-PERLVAR(Icurpad, SV **) /* active pad (lexicals+tmps) */
+PERLVAR(I, curpad, SV **) /* active pad (lexicals+tmps) */
-PERLVAR(Istack_base, SV **)
-PERLVAR(Istack_max, SV **)
+PERLVAR(I, stack_base, SV **)
+PERLVAR(I, stack_max, SV **)
-PERLVAR(Iscopestack, I32 *) /* scopes we've ENTERed */
+PERLVAR(I, scopestack, I32 *) /* scopes we've ENTERed */
/* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be
present always, as -DDEUBGGING must be binary compatible with non. */
-PERLVARI(Iscopestack_name, const char * *, NULL)
-PERLVAR(Iscopestack_ix, I32)
-PERLVAR(Iscopestack_max,I32)
+PERLVARI(I, scopestack_name, const char * *, NULL)
+PERLVAR(I, scopestack_ix, I32)
+PERLVAR(I, scopestack_max, I32)
-PERLVAR(Isavestack, ANY *) /* items that need to be restored when
+PERLVAR(I, savestack, ANY *) /* items that need to be restored when
LEAVEing scopes we've ENTERed */
-PERLVAR(Isavestack_ix, I32)
-PERLVAR(Isavestack_max, I32)
-
-PERLVAR(Itmps_stack, SV **) /* mortals we've made */
-PERLVARI(Itmps_ix, I32, -1)
-PERLVARI(Itmps_floor, I32, -1)
-PERLVAR(Itmps_max, I32)
-PERLVAR(Imodcount, I32) /* how much op_lvalue()ification in
+PERLVAR(I, savestack_ix, I32)
+PERLVAR(I, savestack_max, I32)
+
+PERLVAR(I, tmps_stack, SV **) /* mortals we've made */
+PERLVARI(I, tmps_ix, I32, -1)
+PERLVARI(I, tmps_floor, I32, -1)
+PERLVAR(I, tmps_max, I32)
+PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in
assignment? */
-PERLVAR(Imarkstack, I32 *) /* stack_sp locations we're
+PERLVAR(I, markstack, I32 *) /* stack_sp locations we're
remembering */
-PERLVAR(Imarkstack_ptr, I32 *)
-PERLVAR(Imarkstack_max, I32 *)
+PERLVAR(I, markstack_ptr, I32 *)
+PERLVAR(I, markstack_max, I32 *)
-PERLVAR(ISv, SV *) /* used to hold temporary values */
-PERLVAR(IXpv, XPV *) /* used to hold temporary values */
+PERLVAR(I, Sv, SV *) /* used to hold temporary values */
+PERLVAR(I, Xpv, XPV *) /* used to hold temporary values */
/*
=for apidoc Amn|STRLEN|PL_na
@@ -81,21 +81,21 @@ C<SvPV_nolen> macro.
=cut
*/
-PERLVAR(Ina, STRLEN) /* for use in SvPV when length is
+PERLVAR(I, na, STRLEN) /* for use in SvPV when length is
Not Applicable */
/* stat stuff */
-PERLVAR(Istatbuf, Stat_t)
-PERLVAR(Istatcache, Stat_t) /* _ */
-PERLVAR(Istatgv, GV *)
-PERLVARI(Istatname, SV *, NULL)
+PERLVAR(I, statbuf, Stat_t)
+PERLVAR(I, statcache, Stat_t) /* _ */
+PERLVAR(I, statgv, GV *)
+PERLVARI(I, statname, SV *, NULL)
#ifdef HAS_TIMES
-PERLVAR(Itimesbuf, struct tms)
+PERLVAR(I, timesbuf, struct tms)
#endif
/* Fields used by magic variables such as $@, $/ and so on */
-PERLVAR(Icurpm, PMOP *) /* what to do \ interps in REs from */
+PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
/*
=for apidoc mn|SV*|PL_rs
@@ -113,60 +113,60 @@ The glob containing the output field separator - C<*,> in Perl space.
=cut
*/
-PERLVAR(Irs, SV *) /* input record separator $/ */
-PERLVAR(Ilast_in_gv, GV *) /* GV used in last <FH> */
-PERLVAR(Iofsgv, GV *) /* GV of output field separator *, */
-PERLVAR(Idefoutgv, GV *) /* default FH for output */
-PERLVARI(Ichopset, const char *, " \n-") /* $: */
-PERLVAR(Iformtarget, SV *)
-PERLVAR(Ibodytarget, SV *)
-PERLVAR(Itoptarget, SV *)
+PERLVAR(I, rs, SV *) /* input record separator $/ */
+PERLVAR(I, last_in_gv, GV *) /* GV used in last <FH> */
+PERLVAR(I, ofsgv, GV *) /* GV of output field separator *, */
+PERLVAR(I, defoutgv, GV *) /* default FH for output */
+PERLVARI(I, chopset, const char *, " \n-") /* $: */
+PERLVAR(I, formtarget, SV *)
+PERLVAR(I, bodytarget, SV *)
+PERLVAR(I, toptarget, SV *)
/* Stashes */
-PERLVAR(Idefstash, HV *) /* main symbol table */
-PERLVAR(Icurstash, HV *) /* symbol table for current package */
-
-PERLVAR(Irestartop, OP *) /* propagating an error from croak? */
-PERLVAR(Irestartjmpenv, JMPENV *) /* target frame for longjmp in die */
-PERLVAR(Icurcop, COP *)
-PERLVAR(Icurstack, AV *) /* THE STACK */
-PERLVAR(Icurstackinfo, PERL_SI *) /* current stack + context */
-PERLVAR(Imainstack, AV *) /* the stack when nothing funny is
+PERLVAR(I, defstash, HV *) /* main symbol table */
+PERLVAR(I, curstash, HV *) /* symbol table for current package */
+
+PERLVAR(I, restartop, OP *) /* propagating an error from croak? */
+PERLVAR(I, restartjmpenv, JMPENV *) /* target frame for longjmp in die */
+PERLVAR(I, curcop, COP *)
+PERLVAR(I, curstack, AV *) /* THE STACK */
+PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
+PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
happening */
-PERLVAR(Itop_env, JMPENV *) /* ptr to current sigjmp environment */
-PERLVAR(Istart_env, JMPENV) /* empty startup sigjmp environment */
-PERLVARI(Ierrors, SV *, NULL) /* outstanding queued errors */
+PERLVAR(I, top_env, JMPENV *) /* ptr to current sigjmp environment */
+PERLVAR(I, start_env, JMPENV) /* empty startup sigjmp environment */
+PERLVARI(I, errors, SV *, NULL) /* outstanding queued errors */
/* statics "owned" by various functions */
-PERLVAR(Ihv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */
+PERLVAR(I, hv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */
-PERLVAR(Ilastgotoprobe, OP*) /* from pp_ctl.c */
+PERLVAR(I, lastgotoprobe, OP*) /* from pp_ctl.c */
/* sort stuff */
-PERLVAR(Isortcop, OP *) /* user defined sort routine */
-PERLVAR(Isortstash, HV *) /* which is in some package or other */
-PERLVAR(Ifirstgv, GV *) /* $a */
-PERLVAR(Isecondgv, GV *) /* $b */
+PERLVAR(I, sortcop, OP *) /* user defined sort routine */
+PERLVAR(I, sortstash, HV *) /* which is in some package or other */
+PERLVAR(I, firstgv, GV *) /* $a */
+PERLVAR(I, secondgv, GV *) /* $b */
/* float buffer */
-PERLVAR(Iefloatbuf, char *)
-PERLVAR(Iefloatsize, STRLEN)
+PERLVAR(I, efloatbuf, char *)
+PERLVAR(I, efloatsize, STRLEN)
/* regex stuff */
-PERLVAR(Ireg_state, struct re_save_state)
+PERLVAR(I, reg_state, struct re_save_state)
-PERLVAR(Iregdummy, regnode) /* from regcomp.c */
+PERLVAR(I, regdummy, regnode) /* from regcomp.c */
-PERLVARI(Idumpindent, U16, 4) /* number of blanks per dump
+PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
indentation level */
-PERLVAR(Iutf8locale, bool) /* utf8 locale detected */
-PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */
+PERLVAR(I, utf8locale, bool) /* utf8 locale detected */
+PERLVARI(I, rehash_seed_set, bool, FALSE) /* 582 hash initialized? */
-PERLVARA(Icolors,6, char *) /* from regcomp.c */
+PERLVARA(I, colors,6, char *) /* from regcomp.c */
/*
=for apidoc Amn|peep_t|PL_peepp
@@ -189,7 +189,7 @@ convenient to wrap the L</PL_rpeepp> hook.
=cut
*/
-PERLVARI(Ipeepp, peep_t, Perl_peep)
+PERLVARI(I, peepp, peep_t, Perl_peep)
/*
=for apidoc Amn|peep_t|PL_rpeepp
@@ -213,7 +213,7 @@ to wrap the L</PL_peepp> hook.
=cut
*/
-PERLVARI(Irpeepp, peep_t, Perl_rpeep)
+PERLVARI(I, rpeepp, peep_t, Perl_rpeep)
/*
=for apidoc Amn|Perl_ophook_t|PL_opfreehook
@@ -227,64 +227,64 @@ When you replace this variable, it is considered a good practice to store the po
=cut
*/
-PERLVARI(Iopfreehook, Perl_ophook_t, 0) /* op_free() hook */
+PERLVARI(I, opfreehook, Perl_ophook_t, 0) /* op_free() hook */
/* Space for U32 */
-PERLVARI(Ireginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */
-PERLVARI(Iwatchaddr, char **, 0)
-PERLVAR(Iwatchok, char *)
+PERLVARI(I, reginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */
+PERLVARI(I, watchaddr, char **, 0)
+PERLVAR(I, watchok, char *)
/* the currently active slab in a chain of slabs of regmatch states,
* and the currently active state within that slab */
-PERLVARI(Iregmatch_slab, regmatch_slab *, NULL)
-PERLVAR(Iregmatch_state, regmatch_state *)
+PERLVARI(I, regmatch_slab, regmatch_slab *, NULL)
+PERLVAR(I, regmatch_state, regmatch_state *)
/* Put anything new that is pointer aligned here. */
-PERLVAR(Idelaymagic, U16) /* ($<,$>) = ... */
-PERLVAR(Ilocalizing, U8) /* are we processing a local() list? */
-PERLVAR(Icolorset, bool) /* from regcomp.c */
-PERLVAR(Iin_eval, U8) /* trap "fatal" errors? */
-PERLVAR(Itainted, bool) /* using variables controlled by $< */
-PERLVAR(Itainting, bool) /* doing taint checks */
+PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
+PERLVAR(I, localizing, U8) /* are we processing a local() list? */
+PERLVAR(I, colorset, bool) /* from regcomp.c */
+PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
+PERLVAR(I, tainted, bool) /* using variables controlled by $< */
+PERLVAR(I, tainting, bool) /* doing taint checks */
/* This value may be set when embedding for full cleanup */
/* 0=none, 1=full, 2=full with checks */
/* mod_perl is special, and also assigns a meaning -1 */
-PERLVARI(Iperl_destruct_level, signed char, 0)
+PERLVARI(I, perl_destruct_level, signed char, 0)
/* current phase the interpreter is in */
-PERLVARI(Iphase, enum perl_phase, PERL_PHASE_CONSTRUCT)
+PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT)
-PERLVAR(Iperldb, U32)
+PERLVAR(I, perldb, U32)
-PERLVAR(Isignals, U32) /* Using which pre-5.8 signals */
+PERLVAR(I, signals, U32) /* Using which pre-5.8 signals */
/* pseudo environmental stuff */
-PERLVAR(Iorigargc, int)
-PERLVAR(Iorigargv, char **)
-PERLVAR(Ienvgv, GV *)
-PERLVAR(Iincgv, GV *)
-PERLVAR(Ihintgv, GV *)
-PERLVAR(Iorigfilename, char *)
-PERLVAR(Idiehook, SV *)
-PERLVAR(Iwarnhook, SV *)
+PERLVAR(I, origargc, int)
+PERLVAR(I, origargv, char **)
+PERLVAR(I, envgv, GV *)
+PERLVAR(I, incgv, GV *)
+PERLVAR(I, hintgv, GV *)
+PERLVAR(I, origfilename, char *)
+PERLVAR(I, diehook, SV *)
+PERLVAR(I, warnhook, SV *)
/* switches */
-PERLVAR(Ipatchlevel, SV *)
-PERLVAR(Iapiversion, SV *)
-PERLVAR(Ilocalpatches, const char * const *)
-PERLVARI(Isplitstr, const char *, " ")
-
-PERLVAR(Iminus_c, bool)
-PERLVAR(Iminus_n, bool)
-PERLVAR(Iminus_p, bool)
-PERLVAR(Iminus_l, bool)
-PERLVAR(Iminus_a, bool)
-PERLVAR(Iminus_F, bool)
-PERLVAR(Idoswitches, bool)
-PERLVAR(Iminus_E, bool)
+PERLVAR(I, patchlevel, SV *)
+PERLVAR(I, apiversion, SV *)
+PERLVAR(I, localpatches, const char * const *)
+PERLVARI(I, splitstr, const char *, " ")
+
+PERLVAR(I, minus_c, bool)
+PERLVAR(I, minus_n, bool)
+PERLVAR(I, minus_p, bool)
+PERLVAR(I, minus_l, bool)
+PERLVAR(I, minus_a, bool)
+PERLVAR(I, minus_F, bool)
+PERLVAR(I, doswitches, bool)
+PERLVAR(I, minus_E, bool)
/*
@@ -295,50 +295,50 @@ The C variable which corresponds to Perl's $^W warning variable.
=cut
*/
-PERLVAR(Idowarn, U8)
-PERLVAR(Isawampersand, bool) /* must save all match strings */
-PERLVAR(Iunsafe, bool)
-PERLVAR(Iexit_flags, U8) /* was exit() unexpected, etc. */
-PERLVAR(Isrand_called, bool)
-PERLVARI(Iin_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
+PERLVAR(I, dowarn, U8)
+PERLVAR(I, sawampersand, bool) /* must save all match strings */
+PERLVAR(I, unsafe, bool)
+PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */
+PERLVAR(I, srand_called, bool)
+PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
/* Space for a U16 */
-PERLVAR(Iinplace, char *)
-PERLVAR(Ie_script, SV *)
+PERLVAR(I, inplace, char *)
+PERLVAR(I, e_script, SV *)
/* magical thingies */
-PERLVAR(Ibasetime, Time_t) /* $^T */
-PERLVAR(Iformfeed, SV *) /* $^L */
+PERLVAR(I, basetime, Time_t) /* $^T */
+PERLVAR(I, formfeed, SV *) /* $^L */
-PERLVARI(Imaxsysfd, I32, MAXSYSFD)
+PERLVARI(I, maxsysfd, I32, MAXSYSFD)
/* top fd to pass to subprocesses */
-PERLVAR(Istatusvalue, I32) /* $? */
+PERLVAR(I, statusvalue, I32) /* $? */
#ifdef VMS
-PERLVAR(Istatusvalue_vms,U32)
+PERLVAR(I, statusvalue_vms, U32)
#else
-PERLVAR(Istatusvalue_posix,I32)
+PERLVAR(I, statusvalue_posix, I32)
#endif
-PERLVARI(Isig_pending, int,0) /* Number if highest signal pending */
-PERLVAR(Ipsig_pend, int *) /* per-signal "count" of pending */
+PERLVARI(I, sig_pending, int, 0) /* Number if highest signal pending */
+PERLVAR(I, psig_pend, int *) /* per-signal "count" of pending */
/* shortcuts to various I/O objects */
-PERLVAR(Istdingv, GV *) /* *STDIN */
-PERLVAR(Istderrgv, GV *) /* *STDERR */
-PERLVAR(Idefgv, GV *)
-PERLVAR(Iargvgv, GV *) /* *ARGV */
-PERLVAR(Iargvoutgv, GV *) /* *ARGVOUT */
-PERLVAR(Iargvout_stack, AV *)
+PERLVAR(I, stdingv, GV *) /* *STDIN */
+PERLVAR(I, stderrgv, GV *) /* *STDERR */
+PERLVAR(I, defgv, GV *)
+PERLVAR(I, argvgv, GV *) /* *ARGV */
+PERLVAR(I, argvoutgv, GV *) /* *ARGVOUT */
+PERLVAR(I, argvout_stack, AV *)
/* shortcuts to regexp stuff */
-PERLVAR(Ireplgv, GV *) /* *^R */
+PERLVAR(I, replgv, GV *) /* *^R */
/* shortcuts to misc objects */
-PERLVAR(Ierrgv, GV *) /* *@ */
+PERLVAR(I, errgv, GV *) /* *@ */
/* shortcuts to debugging objects */
-PERLVAR(IDBgv, GV *) /* *DB::DB */
-PERLVAR(IDBline, GV *) /* *DB::line */
+PERLVAR(I, DBgv, GV *) /* *DB::DB */
+PERLVAR(I, DBline, GV *) /* *DB::line */
/*
=for apidoc mn|GV *|PL_DBsub
@@ -362,71 +362,71 @@ variable. See C<PL_DBsingle>.
=cut
*/
-PERLVAR(IDBsub, GV *) /* *DB::sub */
-PERLVAR(IDBsingle, SV *) /* $DB::single */
-PERLVAR(IDBtrace, SV *) /* $DB::trace */
-PERLVAR(IDBsignal, SV *) /* $DB::signal */
-PERLVAR(Idbargs, AV *) /* args to call listed by caller function */
+PERLVAR(I, DBsub, GV *) /* *DB::sub */
+PERLVAR(I, DBsingle, SV *) /* $DB::single */
+PERLVAR(I, DBtrace, SV *) /* $DB::trace */
+PERLVAR(I, DBsignal, SV *) /* $DB::signal */
+PERLVAR(I, dbargs, AV *) /* args to call listed by caller function */
/* symbol tables */
-PERLVAR(Idebstash, HV *) /* symbol table for perldb package */
-PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */
-PERLVAR(Icurstname, SV *) /* name of current package */
-PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */
-PERLVAR(Iendav, AV *) /* names of END subroutines */
-PERLVAR(Iunitcheckav, AV *) /* names of UNITCHECK subroutines */
-PERLVAR(Icheckav, AV *) /* names of CHECK subroutines */
-PERLVAR(Iinitav, AV *) /* names of INIT subroutines */
-PERLVAR(Istrtab, HV *) /* shared string table */
-PERLVARI(Isub_generation,U32,1) /* incr to invalidate method cache */
+PERLVAR(I, debstash, HV *) /* symbol table for perldb package */
+PERLVAR(I, globalstash, HV *) /* global keyword overrides imported here */
+PERLVAR(I, curstname, SV *) /* name of current package */
+PERLVAR(I, beginav, AV *) /* names of BEGIN subroutines */
+PERLVAR(I, endav, AV *) /* names of END subroutines */
+PERLVAR(I, unitcheckav, AV *) /* names of UNITCHECK subroutines */
+PERLVAR(I, checkav, AV *) /* names of CHECK subroutines */
+PERLVAR(I, initav, AV *) /* names of INIT subroutines */
+PERLVAR(I, strtab, HV *) /* shared string table */
+PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
/* funky return mechanisms */
-PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */
+PERLVAR(I, forkprocess, int) /* so do_open |- can return proc# */
/* memory management */
-PERLVAR(Isv_count, I32) /* how many SV* are currently allocated */
-PERLVAR(Isv_objcount, I32) /* how many objects are currently allocated */
-PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */
-PERLVAR(Isv_arenaroot, SV*) /* list of areas for garbage collection */
+PERLVAR(I, sv_count, I32) /* how many SV* are currently allocated */
+PERLVAR(I, sv_objcount, I32) /* how many objects are currently allocated */
+PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */
+PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */
/* subprocess state */
-PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */
+PERLVAR(I, fdpid, AV *) /* keep fd-to-pid mappings for my_popen */
/* internal state */
-PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */
+PERLVARI(I, op_mask, char *, NULL) /* masked operations for safe evals */
/* current interpreter roots */
-PERLVAR(Imain_cv, CV *)
-PERLVAR(Imain_root, OP *)
-PERLVAR(Imain_start, OP *)
-PERLVAR(Ieval_root, OP *)
-PERLVAR(Ieval_start, OP *)
+PERLVAR(I, main_cv, CV *)
+PERLVAR(I, main_root, OP *)
+PERLVAR(I, main_start, OP *)
+PERLVAR(I, eval_root, OP *)
+PERLVAR(I, eval_start, OP *)
/* runtime control stuff */
-PERLVARI(Icurcopdb, COP *, NULL)
+PERLVARI(I, curcopdb, COP *, NULL)
-PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */
-PERLVAR(Ilastfd, int) /* what to preserve mode on */
-PERLVAR(Ioldname, char *) /* what to preserve mode on */
-PERLVAR(IArgv, const char **) /* stuff to free from do_aexec, vfork safe */
-PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */
+PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */
+PERLVAR(I, lastfd, int) /* what to preserve mode on */
+PERLVAR(I, oldname, char *) /* what to preserve mode on */
+PERLVAR(I, Argv, const char **) /* stuff to free from do_aexec, vfork safe */
+PERLVAR(I, Cmd, char *) /* stuff to free from do_aexec, vfork safe */
/* Elements in this array have ';' appended and are injected as a single line
into the tokeniser. You can't put any (literal) newlines into any program
you stuff in into this array, as the point where it's injected is expecting
a single physical line. */
-PERLVAR(Ipreambleav, AV *)
-PERLVAR(Imess_sv, SV *)
-PERLVAR(Iors_sv, SV *) /* output record separator $\ */
+PERLVAR(I, preambleav, AV *)
+PERLVAR(I, mess_sv, SV *)
+PERLVAR(I, ors_sv, SV *) /* output record separator $\ */
/* statics moved here for shared library purposes */
-PERLVARI(Igensym, I32, 0) /* next symbol for getsym() to define */
-PERLVARI(Icv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */
-PERLVAR(Itaint_warn, bool) /* taint warns instead of dying */
-PERLVARI(Ilaststype, U16, OP_STAT)
-PERLVARI(Ilaststatval, int, -1)
+PERLVARI(I, gensym, I32, 0) /* next symbol for getsym() to define */
+PERLVARI(I, cv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */
+PERLVAR(I, taint_warn, bool) /* taint warns instead of dying */
+PERLVARI(I, laststype, U16, OP_STAT)
+PERLVARI(I, laststatval, int, -1)
/* interpreter atexit processing */
-PERLVARI(Iexitlistlen, I32, 0) /* length of same */
-PERLVARI(Iexitlist, PerlExitListEntry *, NULL)
+PERLVARI(I, exitlistlen, I32, 0) /* length of same */
+PERLVARI(I, exitlist, PerlExitListEntry *, NULL)
/* list of exit functions */
/*
@@ -441,38 +441,38 @@ prefixed by the package name of the extension that owns the data.
=cut
*/
-PERLVAR(Imodglobal, HV *) /* per-interp module data */
+PERLVAR(I, modglobal, HV *) /* per-interp module data */
/* these used to be in global before 5.004_68 */
-PERLVARI(Iprofiledata, U32 *, NULL) /* table of ops, counts */
+PERLVARI(I, profiledata, U32 *, NULL) /* table of ops, counts */
-PERLVAR(Icompiling, COP) /* compiling/done executing marker */
+PERLVAR(I, compiling, COP) /* compiling/done executing marker */
-PERLVAR(Icompcv, CV *) /* currently compiling subroutine */
-PERLVAR(Icomppad, AV *) /* storage for lexically scoped temporaries */
-PERLVAR(Icomppad_name, AV *) /* variable names for "my" variables */
-PERLVAR(Icomppad_name_fill, I32) /* last "introduced" variable offset */
-PERLVAR(Icomppad_name_floor, I32) /* start of vars in innermost block */
+PERLVAR(I, compcv, CV *) /* currently compiling subroutine */
+PERLVAR(I, comppad, AV *) /* storage for lexically scoped temporaries */
+PERLVAR(I, comppad_name, AV *) /* variable names for "my" variables */
+PERLVAR(I, comppad_name_fill, I32) /* last "introduced" variable offset */
+PERLVAR(I, comppad_name_floor, I32) /* start of vars in innermost block */
#ifdef HAVE_INTERP_INTERN
-PERLVAR(Isys_intern, struct interp_intern)
+PERLVAR(I, sys_intern, struct interp_intern)
/* platform internals */
#endif
/* more statics moved here */
-PERLVAR(IDBcv, CV *) /* from perl.c */
-PERLVARI(Igeneration, int, 100) /* from op.c */
+PERLVAR(I, DBcv, CV *) /* from perl.c */
+PERLVARI(I, generation, int, 100) /* from op.c */
-PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */
-PERLVARI(Iin_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */
-PERLVAR(Inomemok, bool) /* let malloc context handle nomem */
-PERLVARI(Isavebegin, bool, FALSE) /* save BEGINs for compiler */
+PERLVARI(I, in_clean_objs,bool, FALSE) /* from sv.c */
+PERLVARI(I, in_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */
+PERLVAR(I, nomemok, bool) /* let malloc context handle nomem */
+PERLVARI(I, savebegin, bool, FALSE) /* save BEGINs for compiler */
-PERLVAR(Iuid, Uid_t) /* current real user id */
-PERLVAR(Ieuid, Uid_t) /* current effective user id */
-PERLVAR(Igid, Gid_t) /* current real group id */
-PERLVAR(Iegid, Gid_t) /* current effective group id */
-PERLVARI(Ian, U32, 0) /* malloc sequence number */
+PERLVAR(I, uid, Uid_t) /* current real user id */
+PERLVAR(I, euid, Uid_t) /* current effective user id */
+PERLVAR(I, gid, Gid_t) /* current real group id */
+PERLVAR(I, egid, Gid_t) /* current effective group id */
+PERLVARI(I, an, U32, 0) /* malloc sequence number */
#ifdef DEBUGGING
/* exercise wrap-around */
@@ -480,26 +480,26 @@ PERLVARI(Ian, U32, 0) /* malloc sequence number */
#else
#define PERL_COP_SEQMAX 0
#endif
-PERLVARI(Icop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */
+PERLVARI(I, cop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */
#undef PERL_COP_SEQMAX
-PERLVARI(Ievalseq, U32, 0) /* eval sequence number */
-PERLVAR(Iorigalen, U32)
-PERLVAR(Iorigenviron, char **)
+PERLVARI(I, evalseq, U32, 0) /* eval sequence number */
+PERLVAR(I, origalen, U32)
+PERLVAR(I, origenviron, char **)
#ifdef PERL_USES_PL_PIDSTATUS
-PERLVAR(Ipidstatus, HV *) /* pid-to-status mappings for waitpid */
+PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif
-PERLVAR(Iosname, char *) /* operating system */
+PERLVAR(I, osname, char *) /* operating system */
-PERLVAR(Isighandlerp, Sighandler_t)
+PERLVAR(I, sighandlerp, Sighandler_t)
-PERLVARA(Ibody_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
+PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
-PERLVAR(Iunicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */
+PERLVAR(I, unicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */
-PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */
+PERLVARI(I, maxo, int, MAXO) /* maximum number of ops */
-PERLVARI(Irunops, runops_proc_t, RUNOPS_DEFAULT)
+PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT)
/*
=for apidoc Amn|SV|PL_sv_undef
@@ -516,35 +516,35 @@ C<&PL_sv_yes>.
=cut
*/
-PERLVAR(Isv_undef, SV)
-PERLVAR(Isv_no, SV)
-PERLVAR(Isv_yes, SV)
+PERLVAR(I, sv_undef, SV)
+PERLVAR(I, sv_no, SV)
+PERLVAR(I, sv_yes, SV)
-PERLVAR(Isubname, SV *) /* name of current subroutine */
+PERLVAR(I, subname, SV *) /* name of current subroutine */
-PERLVAR(Isubline, I32) /* line this subroutine began on */
-PERLVAR(Imin_intro_pending, I32) /* start of vars to introduce */
+PERLVAR(I, subline, I32) /* line this subroutine began on */
+PERLVAR(I, min_intro_pending, I32) /* start of vars to introduce */
-PERLVAR(Imax_intro_pending, I32) /* end of vars to introduce */
-PERLVAR(Ipadix, I32) /* max used index in current "register" pad */
+PERLVAR(I, max_intro_pending, I32) /* end of vars to introduce */
+PERLVAR(I, padix, I32) /* max used index in current "register" pad */
-PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */
+PERLVAR(I, padix_floor, I32) /* how low may inner block reset padix */
-PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */
+PERLVAR(I, hints, U32) /* pragma-tic compile-time flags */
-PERLVAR(Idebug, VOL U32) /* flags given to -D switch */
+PERLVAR(I, debug, VOL U32) /* flags given to -D switch */
/* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */
-PERLVARI(Ibreakable_sub_gen, U32, 0)
+PERLVARI(I, breakable_sub_gen, U32, 0)
-PERLVARI(Iamagic_generation, long, 0)
+PERLVARI(I, amagic_generation, long, 0)
#ifdef USE_LOCALE_COLLATE
-PERLVAR(Icollation_name,char *) /* Name of current collation */
-PERLVAR(Icollxfrm_base, Size_t) /* Basic overhead in *xfrm() */
-PERLVARI(Icollxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
-PERLVARI(Icollation_ix, U32, 0) /* Collation generation index */
-PERLVARI(Icollation_standard, bool, TRUE)
+PERLVAR(I, collation_name, char *) /* Name of current collation */
+PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */
+PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
+PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */
+PERLVARI(I, collation_standard, bool, TRUE)
/* Assume simple collation */
#endif /* USE_LOCALE_COLLATE */
@@ -554,99 +554,99 @@ PERLVARI(Icollation_standard, bool, TRUE)
#else
# define PERL___I 1
#endif
-PERLVARI(Iutf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
+PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
#undef PERL___I
#ifdef USE_LOCALE_NUMERIC
-PERLVARI(Inumeric_standard, bool, TRUE)
+PERLVARI(I, numeric_standard, bool, TRUE)
/* Assume simple numerics */
-PERLVARI(Inumeric_local, bool, TRUE)
+PERLVARI(I, numeric_local, bool, TRUE)
/* Assume local numerics */
-PERLVAR(Inumeric_name, char *) /* Name of current numeric locale */
-PERLVAR(Inumeric_radix_sv, SV *) /* The radix separator if not '.' */
+PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
+PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
#endif /* !USE_LOCALE_NUMERIC */
/* utf8 character classes */
-PERLVAR(Iutf8_alnum, SV *)
-PERLVAR(Iutf8_ascii, SV *)
-PERLVAR(Iutf8_alpha, SV *)
-PERLVAR(Iutf8_space, SV *)
-PERLVAR(Iutf8_perl_space, SV *)
-PERLVAR(Iutf8_perl_word, SV *)
-PERLVAR(Iutf8_posix_digit, SV *)
-PERLVAR(Iutf8_cntrl, SV *)
-PERLVAR(Iutf8_graph, SV *)
-PERLVAR(Iutf8_digit, SV *)
-PERLVAR(Iutf8_upper, SV *)
-PERLVAR(Iutf8_lower, SV *)
-PERLVAR(Iutf8_print, SV *)
-PERLVAR(Iutf8_punct, SV *)
-PERLVAR(Iutf8_xdigit, SV *)
-PERLVAR(Iutf8_mark, SV *)
-PERLVAR(Iutf8_X_begin, SV *)
-PERLVAR(Iutf8_X_extend, SV *)
-PERLVAR(Iutf8_X_prepend, SV *)
-PERLVAR(Iutf8_X_non_hangul, SV *)
-PERLVAR(Iutf8_X_L, SV *)
-PERLVAR(Iutf8_X_LV, SV *)
-PERLVAR(Iutf8_X_LVT, SV *)
-PERLVAR(Iutf8_X_T, SV *)
-PERLVAR(Iutf8_X_V, SV *)
-PERLVAR(Iutf8_X_LV_LVT_V, SV *)
-PERLVAR(Iutf8_toupper, SV *)
-PERLVAR(Iutf8_totitle, SV *)
-PERLVAR(Iutf8_tolower, SV *)
-PERLVAR(Iutf8_tofold, SV *)
-PERLVAR(Ilast_swash_hv, HV *)
-PERLVAR(Ilast_swash_tmps, U8 *)
-PERLVAR(Ilast_swash_slen, STRLEN)
-PERLVARA(Ilast_swash_key,10, U8)
-PERLVAR(Ilast_swash_klen, U8) /* Only needs to store 0-10 */
+PERLVAR(I, utf8_alnum, SV *)
+PERLVAR(I, utf8_ascii, SV *)
+PERLVAR(I, utf8_alpha, SV *)
+PERLVAR(I, utf8_space, SV *)
+PERLVAR(I, utf8_perl_space, SV *)
+PERLVAR(I, utf8_perl_word, SV *)
+PERLVAR(I, utf8_posix_digit, SV *)
+PERLVAR(I, utf8_cntrl, SV *)
+PERLVAR(I, utf8_graph, SV *)
+PERLVAR(I, utf8_digit, SV *)
+PERLVAR(I, utf8_upper, SV *)
+PERLVAR(I, utf8_lower, SV *)
+PERLVAR(I, utf8_print, SV *)
+PERLVAR(I, utf8_punct, SV *)
+PERLVAR(I, utf8_xdigit, SV *)
+PERLVAR(I, utf8_mark, SV *)
+PERLVAR(I, utf8_X_begin, SV *)
+PERLVAR(I, utf8_X_extend, SV *)
+PERLVAR(I, utf8_X_prepend, SV *)
+PERLVAR(I, utf8_X_non_hangul, SV *)
+PERLVAR(I, utf8_X_L, SV *)
+PERLVAR(I, utf8_X_LV, SV *)
+PERLVAR(I, utf8_X_LVT, SV *)
+PERLVAR(I, utf8_X_T, SV *)
+PERLVAR(I, utf8_X_V, SV *)
+PERLVAR(I, utf8_X_LV_LVT_V, SV *)
+PERLVAR(I, utf8_toupper, SV *)
+PERLVAR(I, utf8_totitle, SV *)
+PERLVAR(I, utf8_tolower, SV *)
+PERLVAR(I, utf8_tofold, SV *)
+PERLVAR(I, last_swash_hv, HV *)
+PERLVAR(I, last_swash_tmps, U8 *)
+PERLVAR(I, last_swash_slen, STRLEN)
+PERLVARA(I, last_swash_key,10, U8)
+PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-10 */
#ifdef FCRYPT
-PERLVARI(Icryptseen, bool, FALSE) /* has fast crypt() been initialized? */
+PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#endif
-PERLVAR(Ipad_reset_pending, bool) /* reset pad on next attempted alloc */
+PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
-PERLVARI(Iglob_index, int, 0)
+PERLVARI(I, glob_index, int, 0)
-PERLVAR(Iparser, yy_parser *) /* current parser state */
+PERLVAR(I, parser, yy_parser *) /* current parser state */
/* Array of signal handlers, indexed by signal number, through which the C
signal handler dispatches. */
-PERLVAR(Ipsig_ptr, SV**)
+PERLVAR(I, psig_ptr, SV **)
/* Array of names of signals, indexed by signal number, for (re)use as the first
argument to a signal handler. Only one block of memory is allocated for
both psig_name and psig_ptr. */
-PERLVAR(Ipsig_name, SV**)
+PERLVAR(I, psig_name, SV **)
#if defined(PERL_IMPLICIT_SYS)
-PERLVAR(IMem, struct IPerlMem*)
-PERLVAR(IMemShared, struct IPerlMem*)
-PERLVAR(IMemParse, struct IPerlMem*)
-PERLVAR(IEnv, struct IPerlEnv*)
-PERLVAR(IStdIO, struct IPerlStdIO*)
-PERLVAR(ILIO, struct IPerlLIO*)
-PERLVAR(IDir, struct IPerlDir*)
-PERLVAR(ISock, struct IPerlSock*)
-PERLVAR(IProc, struct IPerlProc*)
+PERLVAR(I, Mem, struct IPerlMem *)
+PERLVAR(I, MemShared, struct IPerlMem *)
+PERLVAR(I, MemParse, struct IPerlMem *)
+PERLVAR(I, Env, struct IPerlEnv *)
+PERLVAR(I, StdIO, struct IPerlStdIO *)
+PERLVAR(I, LIO, struct IPerlLIO *)
+PERLVAR(I, Dir, struct IPerlDir *)
+PERLVAR(I, Sock, struct IPerlSock *)
+PERLVAR(I, Proc, struct IPerlProc *)
#endif
-PERLVAR(Iptr_table, PTR_TBL_t*)
-PERLVARI(Ibeginav_save, AV*, NULL) /* save BEGIN{}s when compiling */
+PERLVAR(I, ptr_table, PTR_TBL_t *)
+PERLVARI(I, beginav_save, AV *, NULL) /* save BEGIN{}s when compiling */
-PERLVAR(Ibody_arenas, void*) /* pointer to list of body-arenas */
+PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */
#if defined(USE_ITHREADS)
-PERLVAR(Iregex_pad, SV**) /* Shortcut into the array of
+PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of
regex_padav */
-PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the
+PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the
values in op_pmoffset of pmop.
Entry 0 is an SV whose PV is a
"packed" list of IVs listing
@@ -654,82 +654,83 @@ PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the
#endif
#ifdef USE_REENTRANT_API
-PERLVAR(Ireentrant_buffer, REENTR*) /* here we store the _r buffers */
+PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */
#endif
-PERLVAR(Icustom_op_names, HV*) /* Names of user defined ops */
-PERLVAR(Icustom_op_descs, HV*) /* Descriptions of user defined ops */
+PERLVAR(I, custom_op_names, HV *) /* Names of user defined ops */
+PERLVAR(I, custom_op_descs, HV *) /* Descriptions of user defined ops */
#ifdef PERLIO_LAYERS
-PERLVARI(Iperlio, PerlIOl *,NULL)
-PERLVARI(Iknown_layers, PerlIO_list_t *,NULL)
-PERLVARI(Idef_layerlist, PerlIO_list_t *,NULL)
+PERLVARI(I, perlio, PerlIOl *, NULL)
+PERLVARI(I, known_layers, PerlIO_list_t *, NULL)
+PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
#endif
-PERLVARI(Iencoding, SV*, NULL) /* character encoding */
+PERLVARI(I, encoding, SV *, NULL) /* character encoding */
-PERLVAR(Idebug_pad, struct perl_debug_pad) /* always needed because of the re extension */
+PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re extension */
-PERLVAR(Iutf8_idstart, SV *)
-PERLVAR(Iutf8_idcont, SV *)
-PERLVAR(Iutf8_xidstart, SV *)
-PERLVAR(Iutf8_xidcont, SV *)
+PERLVAR(I, utf8_idstart, SV *)
+PERLVAR(I, utf8_idcont, SV *)
+PERLVAR(I, utf8_xidstart, SV *)
+PERLVAR(I, utf8_xidcont, SV *)
-PERLVAR(Isort_RealCmp, SVCOMPARE_t)
+PERLVAR(I, sort_RealCmp, SVCOMPARE_t)
-PERLVARI(Icheckav_save, AV*, NULL) /* save CHECK{}s when compiling */
-PERLVARI(Iunitcheckav_save, AV*, NULL) /* save UNITCHECK{}s when compiling */
+PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
+PERLVARI(I, unitcheckav_save, AV *, NULL)
+ /* save UNITCHECK{}s when compiling */
-PERLVARI(Iclocktick, long, 0) /* this many times() ticks in a second */
+PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
-PERLVAR(Istashcache, HV *) /* Cache to speed up S_method_common */
+PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */
/* Hooks to shared SVs and locks. */
-PERLVARI(Isharehook, share_proc_t, Perl_sv_nosharing)
-PERLVARI(Ilockhook, share_proc_t, Perl_sv_nosharing)
+PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing)
+PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
#ifdef NO_MATHOMS
# define PERL_UNLOCK_HOOK Perl_sv_nosharing
#else
/* This reference ensures that the mathoms are linked with perl */
# define PERL_UNLOCK_HOOK Perl_sv_nounlocking
#endif
-PERLVARI(Iunlockhook, share_proc_t, PERL_UNLOCK_HOOK)
+PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK)
-PERLVARI(Ithreadhook, thrhook_proc_t, Perl_nothreadhook)
+PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook)
/* Can shared object be destroyed */
-PERLVARI(Idestroyhook, destroyable_proc_t, Perl_sv_destroyable)
+PERLVARI(I, destroyhook, destroyable_proc_t, Perl_sv_destroyable)
#ifndef PERL_MICRO
-PERLVARI(Isignalhook, despatch_signals_proc_t, Perl_despatch_signals)
+PERLVARI(I, signalhook, despatch_signals_proc_t, Perl_despatch_signals)
#endif
-PERLVARI(Ihash_seed, UV, 0) /* Hash initializer */
+PERLVARI(I, hash_seed, UV, 0) /* Hash initializer */
-PERLVARI(Irehash_seed, UV, 0) /* 582 hash initializer */
+PERLVARI(I, rehash_seed, UV, 0) /* 582 hash initializer */
-PERLVARI(Iisarev, HV*, NULL) /* Reverse map of @ISA dependencies */
+PERLVARI(I, isarev, HV *, NULL) /* Reverse map of @ISA dependencies */
/* Register of known Method Resolution Orders.
What this actually points to is an implementation detail (it may change to
a structure incorporating a reference count - use mro_get_from_name to
retrieve a C<struct mro_alg *> */
-PERLVAR(Iregistered_mros, HV *)
+PERLVAR(I, registered_mros, HV *)
/* Compile-time block start/end hooks */
-PERLVAR(Iblockhooks, AV *)
+PERLVAR(I, blockhooks, AV *)
/* Everything that folds to a given character, for case insensitivity regex
* matching */
-PERLVARI(Iutf8_foldclosures, HV *, NULL)
+PERLVARI(I, utf8_foldclosures, HV *, NULL)
/* List of characters that participate in folds (except marks, etc in
* multi-char folds) */
-PERLVARI(Iutf8_foldable, SV *, NULL)
+PERLVARI(I, utf8_foldable, SV *, NULL)
-PERLVAR(Icustom_ops, HV *) /* custom op registrations */
+PERLVAR(I, custom_ops, HV *) /* custom op registrations */
-PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions */
+PERLVAR(I, reentrant_retint, int) /* Integer return value from reentrant functions */
/* The last unconditional member of the interpreter structure when 5.10.0 was
released. The offset of the end of this is baked into a global variable in
@@ -738,47 +739,47 @@ PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions
#define PERL_LAST_5_16_0_INTERP_MEMBER Ireentrant_retint
#ifdef PERL_IMPLICIT_CONTEXT
-PERLVARI(Imy_cxt_size, int, 0) /* size of PL_my_cxt_list */
-PERLVARI(Imy_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
+PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */
+PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-PERLVARI(Imy_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */
+PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */
# endif
#endif
#ifdef PERL_TRACK_MEMPOOL
/* For use with the memory debugging code in util.c */
-PERLVAR(Imemory_debug_header, struct perl_memory_debug_header)
+PERLVAR(I, memory_debug_header, struct perl_memory_debug_header)
#endif
#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
/* File descriptor to talk to the child which dumps scalars. */
-PERLVARI(Idumper_fd, int, -1)
+PERLVARI(I, dumper_fd, int, -1)
#endif
/* Stores the PPID */
#ifdef THREADS_HAVE_PIDS
-PERLVARI(Ippid, IV, 0)
+PERLVARI(I, ppid, IV, 0)
#endif
#ifdef PERL_MAD
-PERLVARI(Imadskills, bool, FALSE) /* preserve all syntactic info */
+PERLVARI(I, madskills, bool, FALSE) /* preserve all syntactic info */
/* (MAD = Misc Attribute Decoration) */
-PERLVARI(Ixmlfp, PerlIO *,NULL)
+PERLVARI(I, xmlfp, PerlIO *, NULL)
#endif
#ifdef PL_OP_SLAB_ALLOC
-PERLVAR(IOpPtr,I32 **)
-PERLVARI(IOpSpace,I32,0)
-PERLVAR(IOpSlab,I32 *)
+PERLVAR(I, OpPtr, I32 **)
+PERLVARI(I, OpSpace, I32, 0)
+PERLVAR(I, OpSlab, I32 *)
#endif
#ifdef PERL_DEBUG_READONLY_OPS
-PERLVARI(Islabs, I32**, NULL) /* Array of slabs that have been allocated */
-PERLVARI(Islab_count, U32, 0) /* Size of the array */
+PERLVARI(I, slabs, I32**, NULL) /* Array of slabs that have been allocated */
+PERLVARI(I, slab_count, U32, 0) /* Size of the array */
#endif
#ifdef DEBUG_LEAKING_SCALARS
-PERLVARI(Isv_serial, U32, 0) /* SV serial number, used in sv.c */
+PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
#endif
/* If you are adding a U8 or U16, check to see if there are 'Space' comments
diff --git a/lib/CORE.pod b/lib/CORE.pod
index b96c1de2d6..1a98f76d2d 100644
--- a/lib/CORE.pod
+++ b/lib/CORE.pod
@@ -1,6 +1,6 @@
=head1 NAME
-CORE - Pseudo-namespace for Perl's core routines
+CORE - Namespace for Perl's core routines
=head1 SYNOPSIS
@@ -12,17 +12,31 @@ CORE - Pseudo-namespace for Perl's core routines
print CORE::hex("0x50"),"\n"; # prints 80
CORE::say "yes"; # prints yes
+ BEGIN { *shove = \&CORE::push; }
+ shove @array, 1,2,3; # pushes on to @array
+
=head1 DESCRIPTION
The C<CORE> namespace gives access to the original built-in functions of
-Perl. It also provides access to keywords normally available
-only through the L<feature> pragma. There is no C<CORE>
-package, and therefore you do not need to use or
-require an hypothetical "CORE" module prior to accessing routines in this
+Perl. The C<CORE> package is built into
+Perl, and therefore you do not need to use or
+require a hypothetical "CORE" module prior to accessing routines in this
namespace.
A list of the built-in functions in Perl can be found in L<perlfunc>.
+For all Perl keywords, a C<CORE::> prefix will force the built-in function
+to be used, even if it has been overridden or would normally require the
+L<feature> pragma. Despite appearances, this has nothing to do with the
+CORE package, but is part of Perl's syntax.
+
+For many Perl functions, the CORE package contains real subroutines. This
+feature is new in Perl 5.16. You can take references to these and make
+aliases. However, they can only be called as barewords; i.e., you cannot
+use ampersand syntax (C<&foo>) or call them through references. See the
+C<shove> example above. This works for all overridable keywords, except
+for C<dump>, C<getprotobynumber>, C<not> and the infix operators.
+
=head1 OVERRIDING CORE FUNCTIONS
To override a Perl built-in routine with your own version, you need to
diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm
index f2d542927a..7079d2508f 100644
--- a/lib/diagnostics.pm
+++ b/lib/diagnostics.pm
@@ -185,7 +185,7 @@ use 5.009001;
use Carp;
$Carp::Internal{__PACKAGE__.""}++;
-our $VERSION = '1.23';
+our $VERSION = '1.24';
our $DEBUG;
our $VERBOSE;
our $PRETTY;
@@ -410,22 +410,22 @@ my %msg;
# Since we strip "\.\n" when we search a warning, strip it here as well
$header =~ s/\.?$//;
- my @toks = split( /(%l?[dx]|%c|%(?:\.\d+)?[fs])/, $header );
+ my @toks = split( /(%l?[dx]|%u|%c|%(?:\.\d+)?[fs])/, $header );
if (@toks > 1) {
my $conlen = 0;
for my $i (0..$#toks){
if( $i % 2 ){
if( $toks[$i] eq '%c' ){
$toks[$i] = '.';
- } elsif( $toks[$i] eq '%d' ){
+ } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){
$toks[$i] = '\d+';
} elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){
$toks[$i] = $i == $#toks ? '.*' : '.*?';
} elsif( $toks[$i] =~ '%.(\d+)s' ){
$toks[$i] = ".{$1}";
- } elsif( $toks[$i] =~ '^%l*x$' ){
+ } elsif( $toks[$i] =~ '^%l*x$' ){
$toks[$i] = '[\da-f]+';
- }
+ }
} elsif( length( $toks[$i] ) ){
$toks[$i] = quotemeta $toks[$i];
$conlen += length( $toks[$i] );
diff --git a/lib/diagnostics.t b/lib/diagnostics.t
index b5db34de74..31a5802c2b 100644
--- a/lib/diagnostics.t
+++ b/lib/diagnostics.t
@@ -5,7 +5,7 @@ BEGIN {
@INC = 'lib';
}
-use Test::More tests => 8;
+use Test::More tests => 9;
BEGIN {
my $w;
@@ -54,3 +54,10 @@ seek STDERR, 0,0;
$warning = '';
warn "Execution of -e aborted due to compilation errors.\n";
like $warning, qr/The final summary message/, 'Periods at end of line';
+
+
+# Test for %d/%u
+seek STDERR, 0,0;
+$warning = '';
+warn "Bad arg length for us, is 4, should be 42";
+like $warning, qr/In C parlance/, '%u works';
diff --git a/makedef.pl b/makedef.pl
index c69589d124..a4b5ced556 100644
--- a/makedef.pl
+++ b/makedef.pl
@@ -3,13 +3,13 @@
# Create the export list for perl.
#
# Needed by WIN32 and OS/2 for creating perl.dll,
-# and by AIX for creating libperl.a when -Dusershrplib is in effect,
+# and by AIX for creating libperl.a when -Duseshrplib is in effect,
# and by VMS for creating perlshr.exe.
#
# Reads from information stored in
#
+# %Config::Config (ie config.sh)
# config.h
-# config.sh
# global.sym
# globvar.sym
# intrpvar.h
@@ -18,8 +18,7 @@
# perlio.sym
# perlvars.h
#
-# plus long lists of function names hard-coded directly in this script and
-# in the DATA section.
+# plus long lists of function names hard-coded directly in this script.
#
# Writes the result to STDOUT.
#
@@ -36,61 +35,55 @@ BEGIN { unshift @INC, "lib" }
use Config;
use strict;
-use vars qw($PLATFORM $CCTYPE $FILETYPE $CONFIG_ARGS $ARCHNAME $PATCHLEVEL $TARG_DIR);
+my %ARGS = (CCTYPE => 'MSVC');
-$TARG_DIR = '';
+my %define;
-my (%define, %ordinal);
+sub process_cc_flags {
+ foreach (map {split /\s+/, $_} @_) {
+ $define{$1} = $2 // 1 if /^-D(\w+)(?:=(.+))?/;
+ }
+}
while (@ARGV) {
my $flag = shift;
- if ($flag =~ s/^CC_FLAGS=/ /) {
- for my $fflag ($flag =~ /(?:^|\s)-D(\S+)/g) {
- $fflag .= '=1' unless $fflag =~ /^(\w+)=/;
- $define{$1} = $2 if $fflag =~ /^(\w+)=(.+)$/;
- }
- next;
- }
- $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
- $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/);
- $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/);
- $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/);
- if ($PLATFORM eq 'netware') {
- $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/);
+ if ($flag =~ /^(?:CC_FLAGS=)?(-D\w.*)/) {
+ process_cc_flags($1);
+ } elsif ($flag =~ /^(CCTYPE|FILETYPE|PLATFORM|TARG_DIR)=(.+)$/) {
+ $ARGS{$1} = $2;
}
- $TARG_DIR = $1 if $flag =~ /^TARG_DIR=(.+)$/;
-}
-
-my @PLATFORM = qw(aix win32 wince os2 netware vms);
-my %PLATFORM;
-@PLATFORM{@PLATFORM} = ();
-
-defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n";
-exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n";
-
-if ($PLATFORM eq 'win32' or $PLATFORM eq 'wince' or $PLATFORM eq "aix") {
- # Add the compile-time options that miniperl was built with to %define.
- # On Win32 these are not the same options as perl itself will be built
- # with since miniperl is built with a canned config (one of the win32/
- # config_H.*) and none of the BUILDOPT's that are set in the makefiles,
- # but they do include some #define's that are hard-coded in various
- # source files and header files and don't include any BUILDOPT's that
- # the user might have chosen to disable because the canned configs are
- # minimal configs that don't include any of those options.
- my $opts = ($PLATFORM eq 'wince' ? '-MCross' : ''); # for wince need Cross.pm to get Config.pm
-
- $ENV{PERL5LIB} = join $Config{path_sep}, @INC;
- my $cmd = "$^X $opts -V";
- my $config = `$cmd`
- or die "Couldn't run [$cmd]: $!";
- my($options) = $config =~ /^ Compile-time options: (.*?)\n^ \S/ms;
- $options =~ s/\s+/ /g;
- print STDERR "Options: ($options)\n";
- foreach (split /\s+/, $options) {
- $define{$_} = 1;
- }
}
+{
+ my @PLATFORM = qw(aix win32 wince os2 netware vms);
+ my %PLATFORM;
+ @PLATFORM{@PLATFORM} = ();
+
+ die "PLATFORM undefined, must be one of: @PLATFORM\n"
+ unless defined $ARGS{PLATFORM};
+ die "PLATFORM must be one of: @PLATFORM\n"
+ unless exists $PLATFORM{$ARGS{PLATFORM}};
+}
+
+# Is the following guard strictly necessary? Added during refactoring
+# to keep the same behaviour when merging other code into here.
+process_cc_flags(@Config{qw(ccflags optimize)})
+ if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'wince'
+ && $ARGS{PLATFORM} ne 'netware';
+
+# Add the compile-time options that miniperl was built with to %define.
+# On Win32 these are not the same options as perl itself will be built
+# with since miniperl is built with a canned config (one of the win32/
+# config_H.*) and none of the BUILDOPT's that are set in the makefiles,
+# but they do include some #define's that are hard-coded in various
+# source files and header files and don't include any BUILDOPT's that
+# the user might have chosen to disable because the canned configs are
+# minimal configs that don't include any of those options.
+
+my @options = sort(Config::bincompat_options(), Config::non_bincompat_options());
+print STDERR "Options: (@options)\n";
+$define{$_} = 1 foreach @options;
+
my %exportperlmalloc =
(
Perl_malloc => "malloc",
@@ -99,65 +92,25 @@ my %exportperlmalloc =
Perl_calloc => "calloc",
);
-my $exportperlmalloc = $PLATFORM eq 'os2';
+my $exportperlmalloc = $ARGS{PLATFORM} eq 'os2';
-my $config_sh = "config.sh";
my $config_h = "config.h";
my $intrpvar_h = "intrpvar.h";
my $perlvars_h = "perlvars.h";
my $global_sym = "global.sym";
my $globvar_sym = "globvar.sym";
my $perlio_sym = "perlio.sym";
-my $static_ext = "";
-
-if ($PLATFORM eq 'aix') {
- # Nothing for now.
-}
-elsif ($PLATFORM =~ /^win(?:32|ce)$/ || $PLATFORM eq 'netware') {
- $CCTYPE = "MSVC" unless defined $CCTYPE;
- foreach ($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym,
- $config_sh) {
- s!^!$TARG_DIR!;
- }
-}
-unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') {
- open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n";
- while (<CFG>) {
- if (/^(?:ccflags|optimize)='(.+)'$/) {
- $_ = $1;
- $define{$1} = 1 while /-D(\w+)/g;
- }
- if (/^(d_(?:mmap|sigaction))='(.+)'$/) {
- $define{$1} = $2;
- }
- if ($PLATFORM eq 'os2') {
- $CONFIG_ARGS = $1 if /^config_args='(.+)'$/;
- $ARCHNAME = $1 if /^archname='(.+)'$/;
- $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/;
- }
- if ($PLATFORM eq 'vms') {
- $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/;
- $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/;
- }
- }
- close(CFG);
-}
-if ($PLATFORM eq 'win32' || $PLATFORM eq 'wince') {
- open(CFG, '<', $config_sh) || die "Cannot open $config_sh: $!\n";
- if ((join '', <CFG>) =~ /^static_ext='(.*)'$/m) {
- $static_ext = $1;
- }
- close(CFG);
+if (exists $ARGS{TARG_DIR}) {
+ s/^/$ARGS{TARG_DIR}/
+ foreach $intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym;
}
open(CFG,$config_h) || die "Cannot open $config_h: $!\n";
while (<CFG>) {
- $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(PERL_\w+)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(USE_\w+)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(HAS_\w+)\b/;
+ $define{$1} = 1 if /^\s*\#\s*define\s+(MYMALLOC|MULTIPLICITY
+ |SPRINTF_RETURNS_STRLEN
+ |(?:PERL|USE|HAS)_\w+)\b/x;
}
close(CFG);
@@ -177,34 +130,18 @@ $define{PERL_IMPLICIT_CONTEXT} ||=
$define{USE_ITHREADS} ||
$define{MULTIPLICITY} ;
-if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') {
+if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $^O ne 'darwin') {
$define{USE_REENTRANT_API} = 1;
}
# perl.h logic duplication ends
-my $sym_ord = 0;
-
print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n";
-if ($PLATFORM =~ /^win(?:32|ce)$/) {
- (my $dll = ($define{PERL_DLL} || "perl515")) =~ s/\.dll$//i;
- print "LIBRARY $dll\n";
- # The DESCRIPTION module definition file statement is not supported
- # by VC7 onwards.
- if ($CCTYPE =~ /^(?:MSVC60|GCC|BORLAND)$/) {
- print "DESCRIPTION 'Perl interpreter'\n";
- }
- print "EXPORTS\n";
- if ($define{PERL_IMPLICIT_SYS}) {
- output_symbol("perl_get_host_info");
- output_symbol("perl_alloc_override");
- }
- if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) {
- output_symbol("perl_clone_host");
- }
-}
-elsif ($PLATFORM eq 'os2') {
+my $sym_ord = 0;
+my %ordinal;
+
+if ($ARGS{PLATFORM} eq 'os2') {
if (open my $fh, '<', 'perl5.def') {
while (<$fh>) {
last if /^\s*EXPORTS\b/;
@@ -216,199 +153,44 @@ elsif ($PLATFORM eq 'os2') {
}
$sym_ord < $_ and $sym_ord = $_ for values %ordinal; # Take the max
}
- (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/;
- $v .= '-thread' if $ARCHNAME =~ /-thread/;
- (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i;
- $v .= "\@$PATCHLEVEL" if $PATCHLEVEL;
- my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS'";
- $d = substr($d, 0, 249) . "...'" if length $d > 253;
- print <<"---EOP---";
-LIBRARY '$dll' INITINSTANCE TERMINSTANCE
-$d
-STACKSIZE 32768
-CODE LOADONCALL
-DATA LOADONCALL NONSHARED MULTIPLE
-EXPORTS
----EOP---
-}
-elsif ($PLATFORM eq 'aix') {
- my $OSVER = `uname -v`;
- chop $OSVER;
- my $OSREL = `uname -r`;
- chop $OSREL;
- if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) {
- print "#! ..\n";
- } else {
- print "#!\n";
- }
-}
-elsif ($PLATFORM eq 'netware') {
- if ($FILETYPE eq 'def') {
- print "LIBRARY perl515\n";
- print "DESCRIPTION 'Perl interpreter for NetWare'\n";
- print "EXPORTS\n";
- }
- if ($define{PERL_IMPLICIT_SYS}) {
- output_symbol("perl_get_host_info");
- output_symbol("perl_alloc_override");
- output_symbol("perl_clone_host");
- }
}
my %skip;
-my %export;
+# All platforms export boot_DynaLoader unconditionally.
+my %export = ( boot_DynaLoader => 1 );
-sub skip_symbols {
- my $list = shift;
- foreach my $symbol (@$list) {
- $skip{$symbol} = 1;
+sub try_symbols {
+ foreach my $symbol (@_) {
+ ++$export{$symbol} unless exists $skip{$symbol};
}
}
-sub emit_symbols {
- my $list = shift;
- foreach my $symbol (@$list) {
- my $skipsym = $symbol;
- # XXX hack
- if ($define{MULTIPLICITY}) {
- $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/;
- }
- emit_symbol($symbol) unless exists $skip{$skipsym};
+sub readvar {
+ # $hash is the hash that we're adding to. For one of our callers, it will
+ # actually be the skip hash but that doesn't affect the intent of what
+ # we're doing, as in that case we skip adding something to the skip hash
+ # for the second time.
+
+ my ($file, $hash, $proc) = @_;
+ open my $vars, '<', $file or die die "Cannot open $file: $!\n";
+
+ while (<$vars>) {
+ # All symbols have a Perl_ prefix because that's what embed.h sticks
+ # in front of them. The A?I?S?C? is strictly speaking wrong.
+ next unless /\bPERLVAR(A?I?S?C?)\(([IGT]),\s*(\w+)/;
+
+ my $var = "PL_$3";
+ my $symbol = $proc ? &$proc($1,$2,$3) : $var;
+ ++$hash->{$symbol} unless exists $skip{$var};
}
}
-if ($PLATFORM eq 'win32') {
- skip_symbols [qw(
- PL_statusvalue_vms
- PL_archpat_auto
+if ($ARGS{PLATFORM} ne 'os2') {
+ ++$skip{$_} foreach qw(
PL_cryptseen
- PL_DBcv
- PL_generation
- PL_lastgotoprobe
- PL_linestart
- PL_modcount
- PL_pending_ident
- PL_sublex_info
- PL_timesbuf
- main
- Perl_ErrorNo
- Perl_GetVars
- Perl_do_exec3
- Perl_do_ipcctl
- Perl_do_ipcget
- Perl_do_msgrcv
- Perl_do_msgsnd
- Perl_do_semop
- Perl_do_shmio
- Perl_dump_fds
- Perl_init_thread_intern
- Perl_my_bzero
- Perl_my_bcopy
- Perl_my_htonl
- Perl_my_ntohl
- Perl_my_swap
- Perl_my_chsize
- Perl_same_dirent
- Perl_setenv_getix
- Perl_unlnk
- Perl_watch
- Perl_safexcalloc
- Perl_safexmalloc
- Perl_safexfree
- Perl_safexrealloc
- Perl_my_memcmp
- Perl_my_memset
- PL_cshlen
- PL_cshname
PL_opsave
- Perl_do_exec
- Perl_getenv_len
- Perl_my_pclose
- Perl_my_popen
- Perl_my_sprintf
- )];
-}
-elsif ($PLATFORM ne 'vms') {
- skip_symbols [qw(
- Perl_do_spawn
- Perl_do_spawn_nowait
- Perl_do_aspawn
- )];
-}
-if ($PLATFORM eq 'wince') {
- skip_symbols [qw(
- PL_statusvalue_vms
- PL_archpat_auto
- PL_cryptseen
- PL_DBcv
- PL_generation
- PL_lastgotoprobe
- PL_linestart
- PL_modcount
- PL_pending_ident
- PL_sublex_info
- PL_timesbuf
- PL_collation_ix
- PL_collation_name
- PL_collation_standard
- PL_collxfrm_base
- PL_collxfrm_mult
- PL_numeric_compat1
- PL_numeric_local
- PL_numeric_name
- PL_numeric_radix_sv
- PL_numeric_standard
- Perl_sv_collxfrm
- setgid
- setuid
- win32_free_childdir
- win32_free_childenv
- win32_get_childdir
- win32_get_childenv
- win32_spawnvp
- main
- Perl_ErrorNo
Perl_GetVars
- Perl_do_exec3
- Perl_do_ipcctl
- Perl_do_ipcget
- Perl_do_msgrcv
- Perl_do_msgsnd
- Perl_do_semop
- Perl_do_shmio
- Perl_dump_fds
- Perl_init_thread_intern
- Perl_my_bzero
- Perl_my_bcopy
- Perl_my_htonl
- Perl_my_ntohl
- Perl_my_swap
- Perl_my_chsize
- Perl_same_dirent
- Perl_setenv_getix
- Perl_unlnk
- Perl_watch
- Perl_safexcalloc
- Perl_safexmalloc
- Perl_safexfree
- Perl_safexrealloc
- Perl_my_memcmp
- Perl_my_memset
- PL_cshlen
- PL_cshname
- PL_opsave
- Perl_do_exec
- Perl_getenv_len
- Perl_my_pclose
- Perl_my_popen
- Perl_my_sprintf
- )];
-}
-elsif ($PLATFORM eq 'aix') {
- skip_symbols([qw(
Perl_dump_fds
- Perl_ErrorNo
- Perl_GetVars
Perl_my_bcopy
Perl_my_bzero
Perl_my_chsize
@@ -417,294 +199,46 @@ elsif ($PLATFORM eq 'aix') {
Perl_my_memset
Perl_my_ntohl
Perl_my_swap
- Perl_safexcalloc
- Perl_safexfree
- Perl_safexmalloc
- Perl_safexrealloc
- Perl_same_dirent
- Perl_unlnk
- Perl_sys_intern_clear
- Perl_sys_intern_dup
- Perl_sys_intern_init
- Perl_my_sprintf
- PL_cryptseen
- PL_opsave
- PL_statusvalue_vms
- PL_sys_intern
- )]);
- skip_symbols([qw(
- Perl_signbit
- )])
- if $define{'HAS_SIGNBIT'};
- emit_symbols([qw(
- boot_DynaLoader
- )]);
-}
-elsif ($PLATFORM eq 'os2') {
- emit_symbols([qw(
- ctermid
- get_sysinfo
- Perl_OS2_init
- Perl_OS2_init3
- Perl_OS2_term
- OS2_Perl_data
- dlopen
- dlsym
- dlerror
- dlclose
- dup2
- dup
- my_tmpfile
- my_tmpnam
- my_flock
- my_rmdir
- my_mkdir
- my_getpwuid
- my_getpwnam
- my_getpwent
- my_setpwent
- my_endpwent
- fork_with_resources
- croak_with_os2error
- setgrent
- endgrent
- getgrent
- malloc_mutex
- threads_mutex
- nthreads
- nthreads_cond
- os2_cond_wait
- os2_stat
- os2_execname
- async_mssleep
- msCounter
- InfoTable
- pthread_join
- pthread_create
- pthread_detach
- XS_Cwd_change_drive
- XS_Cwd_current_drive
- XS_Cwd_extLibpath
- XS_Cwd_extLibpath_set
- XS_Cwd_sys_abspath
- XS_Cwd_sys_chdir
- XS_Cwd_sys_cwd
- XS_Cwd_sys_is_absolute
- XS_Cwd_sys_is_relative
- XS_Cwd_sys_is_rooted
- XS_DynaLoader_mod2fname
- XS_File__Copy_syscopy
- Perl_Register_MQ
- Perl_Deregister_MQ
- Perl_Serve_Messages
- Perl_Process_Messages
- init_PMWIN_entries
- PMWIN_entries
- Perl_hab_GET
- loadByOrdinal
- pExtFCN
- os2error
- ResetWinError
- CroakWinError
- PL_do_undump
- )]);
- emit_symbols([qw(os2_cond_wait
- pthread_join
- pthread_create
- pthread_detach
- )])
- if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'};
-}
-elsif ($PLATFORM eq 'netware') {
- skip_symbols [qw(
- PL_statusvalue_vms
- PL_archpat_auto
- PL_cryptseen
- PL_DBcv
- PL_generation
- PL_lastgotoprobe
- PL_linestart
- PL_modcount
- PL_pending_ident
- PL_sublex_info
- PL_timesbuf
- main
- Perl_ErrorNo
- Perl_GetVars
- Perl_do_exec3
- Perl_do_ipcctl
- Perl_do_ipcget
- Perl_do_msgrcv
- Perl_do_msgsnd
- Perl_do_semop
- Perl_do_shmio
- Perl_dump_fds
- Perl_init_thread_intern
- Perl_my_bzero
- Perl_my_htonl
- Perl_my_ntohl
- Perl_my_swap
- Perl_my_chsize
- Perl_same_dirent
- Perl_setenv_getix
- Perl_unlnk
- Perl_watch
- Perl_safexcalloc
- Perl_safexmalloc
- Perl_safexfree
- Perl_safexrealloc
- Perl_my_memcmp
- Perl_my_memset
- PL_cshlen
- PL_cshname
- PL_opsave
- Perl_do_exec
- Perl_getenv_len
- Perl_my_pclose
- Perl_my_popen
- Perl_sys_intern_init
- Perl_sys_intern_dup
- Perl_sys_intern_clear
- Perl_my_bcopy
- Perl_PerlIO_write
- Perl_PerlIO_unread
- Perl_PerlIO_tell
- Perl_PerlIO_stdout
- Perl_PerlIO_stdin
- Perl_PerlIO_stderr
- Perl_PerlIO_setlinebuf
- Perl_PerlIO_set_ptrcnt
- Perl_PerlIO_set_cnt
- Perl_PerlIO_seek
- Perl_PerlIO_read
- Perl_PerlIO_get_ptr
- Perl_PerlIO_get_cnt
- Perl_PerlIO_get_bufsiz
- Perl_PerlIO_get_base
- Perl_PerlIO_flush
- Perl_PerlIO_fill
- Perl_PerlIO_fileno
- Perl_PerlIO_error
- Perl_PerlIO_eof
- Perl_PerlIO_close
- Perl_PerlIO_clearerr
- PerlIO_perlio
- )];
-}
-elsif ($PLATFORM eq 'vms') {
- emit_symbols([qw(
- boot_DynaLoader
- Perl_cando
- Perl_cando_by_name
- Perl_closedir
- Perl_csighandler_init
- Perl_do_rmdir
- Perl_fileify_dirspec
- Perl_fileify_dirspec_ts
- Perl_fileify_dirspec_utf8
- Perl_fileify_dirspec_utf8_ts
- Perl_flex_fstat
- Perl_flex_lstat
- Perl_flex_stat
- Perl_kill_file
- Perl_my_chdir
- Perl_my_chmod
- Perl_my_crypt
- Perl_my_endpwent
- Perl_my_fclose
- Perl_my_fdopen
- Perl_my_fgetname
- Perl_my_flush
- Perl_my_fwrite
- Perl_my_gconvert
- Perl_my_getenv
- Perl_my_getenv_len
- Perl_my_getlogin
- Perl_my_getpwnam
- Perl_my_getpwuid
- Perl_my_gmtime
- Perl_my_kill
- Perl_my_localtime
- Perl_my_mkdir
- Perl_my_sigaction
- Perl_my_symlink
- Perl_my_time
- Perl_my_tmpfile
- Perl_my_trnlnm
- Perl_my_utime
- Perl_my_waitpid
- Perl_opendir
- Perl_pathify_dirspec
- Perl_pathify_dirspec_ts
- Perl_pathify_dirspec_utf8
- Perl_pathify_dirspec_utf8_ts
- Perl_readdir
- Perl_readdir_r
- Perl_rename
- Perl_rmscopy
- Perl_rmsexpand
- Perl_rmsexpand_ts
- Perl_rmsexpand_utf8
- Perl_rmsexpand_utf8_ts
- Perl_seekdir
- Perl_sig_to_vmscondition
- Perl_telldir
- Perl_tounixpath
- Perl_tounixpath_ts
- Perl_tounixpath_utf8
- Perl_tounixpath_utf8_ts
- Perl_tounixspec
- Perl_tounixspec_ts
- Perl_tounixspec_utf8
- Perl_tounixspec_utf8_ts
- Perl_tovmspath
- Perl_tovmspath_ts
- Perl_tovmspath_utf8
- Perl_tovmspath_utf8_ts
- Perl_tovmsspec
- Perl_tovmsspec_ts
- Perl_tovmsspec_utf8
- Perl_tovmsspec_utf8_ts
- Perl_trim_unixpath
- Perl_vms_case_tolerant
- Perl_vms_do_aexec
- Perl_vms_do_exec
- Perl_vms_image_init
- Perl_vms_realpath
- Perl_vmssetenv
- Perl_vmssetuserlnm
- Perl_vmstrnenv
- PerlIO_openn
- )]);
- skip_symbols([qw(
- PL_statusvalue_posix
- PL_cryptseen
- PL_opsave
- Perl_GetVars
- Perl_dump_fds
- Perl_my_bzero
- Perl_my_bcopy
- Perl_my_chsize
- Perl_my_htonl
- Perl_my_memcmp
- Perl_my_memset
- Perl_my_ntohl
- Perl_my_sprintf
- Perl_my_swap
- )]);
- skip_symbols([qw(
- Perl_signbit
- )])
- if $define{'HAS_SIGNBIT'};
- skip_symbols([qw(
- Perl_unlnk
- )])
- unless $define{'UNLINK_ALL_VERSIONS'};
+ );
+ if ($ARGS{PLATFORM} eq 'vms') {
+ ++$skip{PL_statusvalue_posix};
+ } else {
+ ++$skip{PL_statusvalue_vms};
+ if ($ARGS{PLATFORM} ne 'aix') {
+ ++$skip{$_} foreach qw(
+ PL_DBcv
+ PL_generation
+ PL_lastgotoprobe
+ PL_modcount
+ PL_timesbuf
+ main
+ );
+ }
+ }
+}
+
+if ($ARGS{PLATFORM} ne 'vms') {
+ # VMS does its own thing for these symbols.
+ ++$skip{$_} foreach qw(
+ PL_sig_handlers_initted
+ PL_sig_ignoring
+ PL_sig_defaulting
+ );
+ if ($ARGS{PLATFORM} ne 'win32') {
+ ++$skip{$_} foreach qw(
+ Perl_do_spawn
+ Perl_do_spawn_nowait
+ Perl_do_aspawn
+ );
+ }
+}
+
+unless ($define{UNLINK_ALL_VERSIONS}) {
+ ++$skip{Perl_unlnk};
}
unless ($define{'DEBUGGING'}) {
- skip_symbols [qw(
- Perl_deb_growlevel
+ ++$skip{$_} foreach qw(
Perl_debop
Perl_debprofdump
Perl_debstack
@@ -716,24 +250,19 @@ unless ($define{'DEBUGGING'}) {
PL_watchaddr
PL_watchok
PL_watch_pvx
- )];
-}
-
-if ($define{'PERL_IMPLICIT_CONTEXT'}) {
- skip_symbols [qw(
- PL_sig_sv
- )];
+ );
}
if ($define{'PERL_IMPLICIT_SYS'}) {
- skip_symbols [qw(
- Perl_getenv_len
+ ++$skip{$_} foreach qw(
Perl_my_popen
Perl_my_pclose
- )];
+ );
+ ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override);
+ ++$export{perl_clone_host} if $define{USE_ITHREADS};
}
else {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_Mem
PL_MemShared
PL_MemParse
@@ -743,67 +272,52 @@ else {
PL_Dir
PL_Sock
PL_Proc
- )];
+ perl_alloc_using
+ perl_clone_using
+ );
}
unless ($define{'PERL_OLD_COPY_ON_WRITE'}) {
- skip_symbols [qw(
- Perl_sv_setsv_cow
- )];
+ ++$skip{Perl_sv_setsv_cow};
}
unless ($define{'USE_REENTRANT_API'}) {
- skip_symbols [qw(
- PL_reentrant_buffer
- )];
+ ++$skip{PL_reentrant_buffer};
}
if ($define{'MYMALLOC'}) {
- emit_symbols [qw(
+ try_symbols(qw(
Perl_dump_mstats
Perl_get_mstats
Perl_strdup
Perl_putenv
MallocCfg_ptr
MallocCfgP_ptr
- )];
- if ($define{'USE_ITHREADS'}) {
- emit_symbols [qw(
- PL_malloc_mutex
- )];
- }
- else {
- skip_symbols [qw(
- PL_malloc_mutex
- )];
+ ));
+ unless ($define{USE_ITHREADS}) {
+ ++$skip{PL_malloc_mutex}
}
}
else {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_malloc_mutex
Perl_dump_mstats
Perl_get_mstats
- Perl_malloced_size
- Perl_malloc_good_size
MallocCfg_ptr
MallocCfgP_ptr
- )];
+ );
}
if ($define{'PERL_USE_SAFE_PUTENV'}) {
- skip_symbols [qw(
- PL_use_safe_putenv
- )];
+ ++$skip{PL_use_safe_putenv};
}
unless ($define{'USE_ITHREADS'}) {
- skip_symbols [qw(
- PL_thr_key
- )];
+ ++$skip{PL_thr_key};
}
# USE_5005THREADS symbols. Kept as reference for easier removal
- skip_symbols [qw(
+++$skip{$_} foreach qw(
PL_sv_mutex
PL_strtab_mutex
PL_svref_mutex
@@ -828,20 +342,17 @@ unless ($define{'USE_ITHREADS'}) {
Perl_unlock_condpair
Perl_magic_mutexfree
Perl_sv_lock
- )];
+ );
unless ($define{'USE_ITHREADS'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_op_mutex
PL_regex_pad
PL_regex_padav
- PL_sharedsv_space
- PL_sharedsv_space_mutex
PL_dollarzero_mutex
PL_hints_mutex
PL_my_ctx_mutex
PL_perlio_mutex
- PL_regdupe
Perl_clone_params_del
Perl_clone_params_new
Perl_parser_dup
@@ -854,7 +365,6 @@ unless ($define{'USE_ITHREADS'}) {
Perl_gp_dup
Perl_he_dup
Perl_mg_dup
- Perl_mro_meta_dup
Perl_re_dup_guts
Perl_sv_dup
Perl_sv_dup_inc
@@ -863,21 +373,14 @@ unless ($define{'USE_ITHREADS'}) {
Perl_sys_intern_dup
perl_clone
perl_clone_using
- Perl_sharedsv_find
- Perl_sharedsv_init
- Perl_sharedsv_lock
- Perl_sharedsv_new
- Perl_sharedsv_thrcnt_dec
- Perl_sharedsv_thrcnt_inc
- Perl_sharedsv_unlock
Perl_stashpv_hvname_match
Perl_regdupe_internal
Perl_newPADOP
- )];
+ );
}
unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_my_cxt_index
PL_my_cxt_list
PL_my_cxt_size
@@ -897,188 +400,140 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
Perl_sv_setpvf_mg_nocontext
Perl_my_cxt_init
Perl_my_cxt_index
- )];
-}
-
-unless ($define{'PERL_IMPLICIT_SYS'}) {
- skip_symbols [qw(
- perl_alloc_using
- perl_clone_using
- )];
-}
-
-unless ($define{'FAKE_THREADS'}) {
- skip_symbols [qw(PL_curthr)];
+ );
}
unless ($define{'PL_OP_SLAB_ALLOC'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_OpPtr
PL_OpSlab
PL_OpSpace
Perl_Slab_Alloc
Perl_Slab_Free
- )];
+ );
}
unless ($define{'PERL_DEBUG_READONLY_OPS'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_slab_count
PL_slabs
- )];
+ );
}
unless ($define{'THREADS_HAVE_PIDS'}) {
- skip_symbols [qw(PL_ppid)];
+ ++$skip{PL_ppid};
}
unless ($define{'PERL_NEED_APPCTX'}) {
- skip_symbols [qw(
- PL_appctx
- )];
+ ++$skip{PL_appctx};
}
unless ($define{'PERL_NEED_TIMESBASE'}) {
- skip_symbols [qw(
- PL_timesbase
- )];
+ ++$skip{PL_timesbase};
}
unless ($define{'DEBUG_LEAKING_SCALARS'}) {
- skip_symbols [qw(
- PL_sv_serial
- )];
+ ++$skip{PL_sv_serial};
}
unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) {
- skip_symbols [qw(
- PL_dumper_fd
- )];
+ ++$skip{PL_dumper_fd};
}
+
unless ($define{'PERL_DONT_CREATE_GVSV'}) {
- skip_symbols [qw(
- Perl_gv_SVadd
- )];
+ ++$skip{Perl_gv_SVadd};
}
+
if ($define{'SPRINTF_RETURNS_STRLEN'}) {
- skip_symbols [qw(
- Perl_my_sprintf
- )];
+ ++$skip{Perl_my_sprintf};
}
+
unless ($define{'PERL_USES_PL_PIDSTATUS'}) {
- skip_symbols [qw(
- Perl_pidgone
- PL_pidstatus
- )];
+ ++$skip{PL_pidstatus};
}
unless ($define{'PERL_TRACK_MEMPOOL'}) {
- skip_symbols [qw(
- PL_memory_debug_header
- )];
+ ++$skip{PL_memory_debug_header};
}
-if ($define{'PERL_MAD'}) {
- skip_symbols [qw(
- PL_nextval
- PL_nexttype
- )];
-} else {
- skip_symbols [qw(
+unless ($define{PERL_MAD}) {
+ ++$skip{$_} foreach qw(
PL_madskills
PL_xmlfp
- PL_lasttoke
- PL_realtokenstart
- PL_faketokens
- PL_thismad
- PL_thistoken
- PL_thisopen
- PL_thisstuff
- PL_thisclose
- PL_thiswhite
- PL_nextwhite
- PL_skipwhite
- PL_endwhite
- PL_curforce
- Perl_pad_peg
- Perl_xmldump_indent
- Perl_xmldump_vindent
- Perl_xmldump_all
- Perl_xmldump_packsubs
- Perl_xmldump_sub
- Perl_xmldump_form
- Perl_xmldump_eval
- Perl_sv_catxmlsv
- Perl_sv_catxmlpvn
- Perl_sv_xmlpeek
- Perl_do_pmop_xmldump
- Perl_pmop_xmldump
- Perl_do_op_xmldump
- Perl_op_xmldump
- )];
+ );
}
unless ($define{'MULTIPLICITY'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_interp_size
PL_interp_size_5_16_0
- )];
+ );
}
unless ($define{'PERL_GLOBAL_STRUCT'}) {
- skip_symbols [qw(
- PL_global_struct_size
- )];
+ ++$skip{PL_global_struct_size};
}
unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) {
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PL_my_cxt_keys
Perl_my_cxt_index
- )];
+ );
}
-unless ($define{'d_mmap'}) {
- skip_symbols [qw(
- PL_mmap_page_size
- )];
+unless ($define{HAS_MMAP}) {
+ ++$skip{PL_mmap_page_size};
}
-if ($define{'d_sigaction'}) {
- skip_symbols [qw(
- PL_sig_trapped
- )];
+if ($define{HAS_SIGACTION}) {
+ ++$skip{PL_sig_trapped};
+
+ if ($ARGS{PLATFORM} eq 'vms') {
+ # FAKE_PERSISTENT_SIGNAL_HANDLERS defined as !defined(HAS_SIGACTION)
+ ++$skip{PL_sig_ignoring};
+ }
}
-if ($^O ne 'vms') {
- # VMS does its own thing for these symbols.
- skip_symbols [qw(PL_sig_handlers_initted
- PL_sig_ignoring
- PL_sig_defaulting)];
-}
+unless ($define{USE_LOCALE_COLLATE}) {
+ ++$skip{$_} foreach qw(
+ PL_collation_ix
+ PL_collation_name
+ PL_collation_standard
+ PL_collxfrm_base
+ PL_collxfrm_mult
+ Perl_sv_collxfrm
+ Perl_sv_collxfrm_flags
+ );
+}
-sub readvar {
- my $file = shift;
- my $proc = shift || sub { "PL_$_[2]" };
- open(VARS,$file) || die "Cannot open $file: $!\n";
- my @syms;
- while (<VARS>) {
- # All symbols have a Perl_ prefix because that's what embed.h
- # sticks in front of them. The A?I?S?C? is strictly speaking
- # wrong.
- push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/);
- }
- close(VARS);
- return \@syms;
+unless ($define{USE_LOCALE_NUMERIC}) {
+ ++$skip{$_} foreach qw(
+ PL_numeric_local
+ PL_numeric_name
+ PL_numeric_radix_sv
+ PL_numeric_standard
+ );
+}
+
+unless ($define{HAVE_INTERP_INTERN}) {
+ ++$skip{$_} foreach qw(
+ Perl_sys_intern_clear
+ Perl_sys_intern_dup
+ Perl_sys_intern_init
+ PL_sys_intern
+ );
+}
+
+if ($define{HAS_SIGNBIT}) {
+ ++$skip{Perl_signbit};
}
if ($define{'PERL_GLOBAL_STRUCT'}) {
- my $global = readvar($perlvars_h);
- skip_symbols $global;
- emit_symbol('Perl_GetVars');
- emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC';
+ readvar($perlvars_h, \%skip);
+ ++$export{Perl_GetVars};
+ try_symbols(qw(PL_Vars PL_VarsPtr)) unless $ARGS{CCTYPE} eq 'GCC';
} else {
- skip_symbols [qw(Perl_init_global_struct Perl_free_global_struct)];
+ ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct);
}
# functions from *.sym files
@@ -1162,7 +617,7 @@ my @layer_syms = qw(
Perl_PerlIO_unread
Perl_PerlIO_write
);
-if ($PLATFORM eq 'netware') {
+if ($ARGS{PLATFORM} eq 'netware') {
push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio');
}
@@ -1174,13 +629,13 @@ if ($define{'USE_PERLIO'}) {
# This part is then dependent on how the abstraction is implemented
if ($define{'USE_SFIO'}) {
# Old legacy non-stdio "PerlIO"
- skip_symbols \@layer_syms;
- skip_symbols [qw(perlsio_binmode)];
+ ++$skip{$_} foreach @layer_syms;
+ ++$skip{perlsio_binmode};
# SFIO defines most of the PerlIO routines as macros
# So undo most of what $perlio_sym has just done - d'oh !
# Perhaps it would be better to list the ones which do exist
# And emit them
- skip_symbols [qw(
+ ++$skip{$_} foreach qw(
PerlIO_canset_cnt
PerlIO_clearerr
PerlIO_close
@@ -1248,29 +703,18 @@ if ($define{'USE_PERLIO'}) {
PL_def_layerlist
PL_known_layers
PL_perlio
- )];
+ );
}
else {
# PerlIO with layers - export implementation
- emit_symbols \@layer_syms;
- emit_symbols [qw(perlsio_binmode)];
- }
- if ($define{'USE_ITHREADS'}) {
- emit_symbols [qw(
- PL_perlio_mutex
- )];
- }
- else {
- skip_symbols [qw(
- PL_perlio_mutex
- )];
+ try_symbols(@layer_syms, 'perlsio_binmode');
}
} else {
# -Uuseperlio
# Skip the PerlIO layer symbols - although
# nothing should have exported them anyway.
- skip_symbols \@layer_syms;
- skip_symbols [qw(
+ ++$skip{$_} foreach @layer_syms;
+ ++$skip{$_} foreach qw(
perlsio_binmode
PL_def_layerlist
PL_known_layers
@@ -1278,72 +722,76 @@ if ($define{'USE_PERLIO'}) {
PL_perlio_debug_fd
PL_perlio_fd_refcnt
PL_perlio_fd_refcnt_size
- )];
+ PL_perlio_mutex
+ );
# Also do NOT add abstraction symbols from $perlio_sym
# abstraction is done as #define to stdio
- # Remaining remnants that _may_ be functions
- # are handled in <DATA>
+ # Remaining remnants that _may_ be functions are handled below.
}
+###############################################################################
+
+# At this point all skip lists should be completed, as we are about to test
+# many symbols against them.
+
for my $syms (@syms) {
- open (GLOBAL, "<$syms") || die "failed to open $syms: $!\n";
- while (<GLOBAL>) {
- next if (!/^[A-Za-z]/);
- # Functions have a Perl_ prefix
- # Variables have a PL_ prefix
- chomp($_);
- my $symbol = ($syms =~ /var\.sym$/i ? "PL_" : "");
- $symbol .= $_;
- emit_symbol($symbol) unless exists $skip{$symbol};
+ open my $global, '<', $syms or die "failed to open $syms: $!\n";
+ # Functions already have a Perl_ prefix
+ # Variables need a PL_ prefix
+ my $prefix = $syms =~ /var\.sym$/i ? 'PL_' : '';
+ while (<$global>) {
+ next unless /^([A-Za-z].*)/;
+ my $symbol = "$prefix$1";
+ ++$export{$symbol} unless exists $skip{$symbol};
}
- close(GLOBAL);
}
# variables
if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) {
- for my $f ($perlvars_h) {
- my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
- emit_symbols $glob;
- }
+ readvar($perlvars_h, \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
# XXX AIX seems to want the perlvars.h symbols, for some reason
- if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key
- my $glob = readvar($perlvars_h);
- emit_symbols $glob;
+ if ($ARGS{PLATFORM} eq 'aix' or $ARGS{PLATFORM} eq 'os2') { # OS/2 needs PL_thr_key
+ readvar($perlvars_h, \%export);
}
}
else {
unless ($define{'PERL_GLOBAL_STRUCT'}) {
- my $glob = readvar($perlvars_h);
- emit_symbols $glob;
+ readvar($perlvars_h, \%export);
}
unless ($define{MULTIPLICITY}) {
- my $glob = readvar($intrpvar_h);
- emit_symbols $glob;
+ readvar($intrpvar_h, \%export);
}
}
-sub try_symbol {
- my $symbol = shift;
-
- return if $symbol !~ /^[A-Za-z_]/;
- return if $symbol =~ /^\#/;
- $symbol =~s/\r//g;
- chomp($symbol);
- return if exists $skip{$symbol};
- emit_symbol($symbol);
-}
-
-while (<DATA>) {
- try_symbol($_);
-}
-
-if ($PLATFORM =~ /^win(?:32|ce)$/) {
- foreach my $symbol (qw(
- setuid
- setgid
- boot_DynaLoader
+# Oddities from PerlIO
+# All have alternate implementations in perlio.c, so always exist.
+# Should they be considered to be part of the API?
+try_symbols(qw(
+ PerlIO_binmode
+ PerlIO_getpos
+ PerlIO_init
+ PerlIO_setpos
+ PerlIO_sprintf
+ PerlIO_tmpfile
+ PerlIO_vsprintf
+ ));
+
+if ($ARGS{PLATFORM} eq 'win32') {
+ try_symbols(qw(
+ setgid
+ setuid
+ win32_free_childdir
+ win32_free_childenv
+ win32_get_childdir
+ win32_get_childenv
+ win32_spawnvp
+ ));
+}
+
+if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+ try_symbols(qw(
Perl_init_os_extras
Perl_thread_create
Perl_win32_init
@@ -1371,7 +819,6 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) {
win32_isatty
win32_read
win32_write
- win32_spawnvp
win32_mkdir
win32_rmdir
win32_chdir
@@ -1457,11 +904,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) {
win32_getpid
win32_crypt
win32_dynaload
- win32_get_childenv
- win32_free_childenv
win32_clearenv
- win32_get_childdir
- win32_free_childdir
win32_stdin
win32_stdout
win32_stderr
@@ -1502,28 +945,167 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) {
win32_puts
win32_getchar
win32_putchar
- ))
- {
- try_symbol($symbol);
- }
- if ($CCTYPE eq "BORLAND") {
- try_symbol('_matherr');
+ ));
+ if ($ARGS{CCTYPE} eq "BORLAND") {
+ try_symbols('_matherr');
}
}
-elsif ($PLATFORM eq 'os2') {
- my (%mapped, @missing);
- open MAP, 'miniperl.map' or die 'Cannot read miniperl.map';
- /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach <MAP>;
- close MAP or die 'Cannot close miniperl.map';
-
- @missing = grep { !exists $mapped{$_} }
- keys %export;
- @missing = grep { !exists $exportperlmalloc{$_} } @missing;
- delete $export{$_} foreach @missing;
-}
-elsif ($PLATFORM eq 'netware') {
-foreach my $symbol (qw(
- boot_DynaLoader
+elsif ($ARGS{PLATFORM} eq 'vms') {
+ try_symbols(qw(
+ Perl_cando
+ Perl_cando_by_name
+ Perl_closedir
+ Perl_csighandler_init
+ Perl_do_rmdir
+ Perl_fileify_dirspec
+ Perl_fileify_dirspec_ts
+ Perl_fileify_dirspec_utf8
+ Perl_fileify_dirspec_utf8_ts
+ Perl_flex_fstat
+ Perl_flex_lstat
+ Perl_flex_stat
+ Perl_kill_file
+ Perl_my_chdir
+ Perl_my_chmod
+ Perl_my_crypt
+ Perl_my_endpwent
+ Perl_my_fclose
+ Perl_my_fdopen
+ Perl_my_fgetname
+ Perl_my_flush
+ Perl_my_fwrite
+ Perl_my_gconvert
+ Perl_my_getenv
+ Perl_my_getenv_len
+ Perl_my_getlogin
+ Perl_my_getpwnam
+ Perl_my_getpwuid
+ Perl_my_gmtime
+ Perl_my_kill
+ Perl_my_localtime
+ Perl_my_mkdir
+ Perl_my_sigaction
+ Perl_my_symlink
+ Perl_my_time
+ Perl_my_tmpfile
+ Perl_my_trnlnm
+ Perl_my_utime
+ Perl_my_waitpid
+ Perl_opendir
+ Perl_pathify_dirspec
+ Perl_pathify_dirspec_ts
+ Perl_pathify_dirspec_utf8
+ Perl_pathify_dirspec_utf8_ts
+ Perl_readdir
+ Perl_readdir_r
+ Perl_rename
+ Perl_rmscopy
+ Perl_rmsexpand
+ Perl_rmsexpand_ts
+ Perl_rmsexpand_utf8
+ Perl_rmsexpand_utf8_ts
+ Perl_seekdir
+ Perl_sig_to_vmscondition
+ Perl_telldir
+ Perl_tounixpath
+ Perl_tounixpath_ts
+ Perl_tounixpath_utf8
+ Perl_tounixpath_utf8_ts
+ Perl_tounixspec
+ Perl_tounixspec_ts
+ Perl_tounixspec_utf8
+ Perl_tounixspec_utf8_ts
+ Perl_tovmspath
+ Perl_tovmspath_ts
+ Perl_tovmspath_utf8
+ Perl_tovmspath_utf8_ts
+ Perl_tovmsspec
+ Perl_tovmsspec_ts
+ Perl_tovmsspec_utf8
+ Perl_tovmsspec_utf8_ts
+ Perl_trim_unixpath
+ Perl_vms_case_tolerant
+ Perl_vms_do_aexec
+ Perl_vms_do_exec
+ Perl_vms_image_init
+ Perl_vms_realpath
+ Perl_vmssetenv
+ Perl_vmssetuserlnm
+ Perl_vmstrnenv
+ PerlIO_openn
+ ));
+}
+elsif ($ARGS{PLATFORM} eq 'os2') {
+ try_symbols(qw(
+ ctermid
+ get_sysinfo
+ Perl_OS2_init
+ Perl_OS2_init3
+ Perl_OS2_term
+ OS2_Perl_data
+ dlopen
+ dlsym
+ dlerror
+ dlclose
+ dup2
+ dup
+ my_tmpfile
+ my_tmpnam
+ my_flock
+ my_rmdir
+ my_mkdir
+ my_getpwuid
+ my_getpwnam
+ my_getpwent
+ my_setpwent
+ my_endpwent
+ fork_with_resources
+ croak_with_os2error
+ setgrent
+ endgrent
+ getgrent
+ malloc_mutex
+ threads_mutex
+ nthreads
+ nthreads_cond
+ os2_cond_wait
+ os2_stat
+ os2_execname
+ async_mssleep
+ msCounter
+ InfoTable
+ pthread_join
+ pthread_create
+ pthread_detach
+ XS_Cwd_change_drive
+ XS_Cwd_current_drive
+ XS_Cwd_extLibpath
+ XS_Cwd_extLibpath_set
+ XS_Cwd_sys_abspath
+ XS_Cwd_sys_chdir
+ XS_Cwd_sys_cwd
+ XS_Cwd_sys_is_absolute
+ XS_Cwd_sys_is_relative
+ XS_Cwd_sys_is_rooted
+ XS_DynaLoader_mod2fname
+ XS_File__Copy_syscopy
+ Perl_Register_MQ
+ Perl_Deregister_MQ
+ Perl_Serve_Messages
+ Perl_Process_Messages
+ init_PMWIN_entries
+ PMWIN_entries
+ Perl_hab_GET
+ loadByOrdinal
+ pExtFCN
+ os2error
+ ResetWinError
+ CroakWinError
+ PL_do_undump
+ ));
+}
+elsif ($ARGS{PLATFORM} eq 'netware') {
+ try_symbols(qw(
Perl_init_os_extras
Perl_thread_create
Perl_nw5_init
@@ -1658,75 +1240,100 @@ foreach my $symbol (qw(
Perl_sv_2pv
nw_freeenviron
Remove_Thread_Ctx
- ))
- {
- try_symbol($symbol);
- }
+ ));
}
-# records of type boot_module for statically linked modules (except Dynaloader)
-$static_ext =~ s/\//__/g;
-$static_ext =~ s/\bDynaLoader\b//;
-my @stat_mods = map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext;
-foreach my $symbol (@stat_mods)
- {
- try_symbol($symbol);
- }
+# When added this code was only run for Win32 and WinCE
+# Currently only Win32 links static extensions into the shared library.
+# The WinCE makefile doesn't appear to support static extensions, so this code
+# can't have any effect there.
+# The NetWare Makefile doesn't support static extensions (and hardcodes the
+# list of dynamic extensions, and the rules to build them)
+# For *nix (and presumably OS/2) with a shared libperl, Makefile.SH compiles
+# static extensions with -fPIC, but links them to perl, not libperl.so
+# The VMS build scripts don't yet implement static extensions at all.
-try_symbol("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/;
+if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+ # records of type boot_module for statically linked modules (except Dynaloader)
+ my $static_ext = $Config{static_ext} // "";
+ $static_ext =~ s/\//__/g;
+ $static_ext =~ s/\bDynaLoader\b//;
+ try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext);
+ try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/;
+}
-# Now all symbols should be defined because
-# next we are going to output them.
+if ($ARGS{PLATFORM} eq 'os2') {
+ my (%mapped, @missing);
+ open MAP, 'miniperl.map' or die 'Cannot read miniperl.map';
+ /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach <MAP>;
+ close MAP or die 'Cannot close miniperl.map';
-foreach my $symbol (sort keys %export) {
- output_symbol($symbol);
+ @missing = grep { !exists $mapped{$_} }
+ keys %export;
+ @missing = grep { !exists $exportperlmalloc{$_} } @missing;
+ delete $export{$_} foreach @missing;
}
-if ($PLATFORM eq 'os2') {
- print <<EOP;
- dll_perlmain=main
- fill_extLibpath
- dir_subst
- Perl_OS2_handler_install
+###############################################################################
-; LAST_ORDINAL=$sym_ord
-EOP
-}
+# Now all symbols should be defined because next we are going to output them.
-sub emit_symbol {
- my $symbol = shift;
- chomp($symbol);
- $export{$symbol} = 1;
+# Start with platform specific headers:
+
+if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+ my $dll = $define{PERL_DLL} ? $define{PERL_DLL} =~ s/\.dll$//ir
+ : "perl$Config{api_revision}$Config{api_version}";
+ print "LIBRARY $dll\n";
+ # The DESCRIPTION module definition file statement is not supported
+ # by VC7 onwards.
+ if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC|BORLAND)$/) {
+ print "DESCRIPTION 'Perl interpreter'\n";
+ }
+ print "EXPORTS\n";
+}
+elsif ($ARGS{PLATFORM} eq 'os2') {
+ (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/;
+ $v .= '-thread' if $Config{archname} =~ /-thread/;
+ (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i;
+ $v .= "\@$Config{perl_patchlevel}" if $Config{perl_patchlevel};
+ my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $Config{config_args}'";
+ $d = substr($d, 0, 249) . "...'" if length $d > 253;
+ print <<"---EOP---";
+LIBRARY '$dll' INITINSTANCE TERMINSTANCE
+$d
+STACKSIZE 32768
+CODE LOADONCALL
+DATA LOADONCALL NONSHARED MULTIPLE
+EXPORTS
+---EOP---
+}
+elsif ($ARGS{PLATFORM} eq 'aix') {
+ my $OSVER = `uname -v`;
+ chop $OSVER;
+ my $OSREL = `uname -r`;
+ chop $OSREL;
+ if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) {
+ print "#! ..\n";
+ } else {
+ print "#!\n";
+ }
+}
+elsif ($ARGS{PLATFORM} eq 'netware') {
+ if ($ARGS{FILETYPE} eq 'def') {
+ print "LIBRARY perl$Config{api_revision}$Config{api_version}\n";
+ print "DESCRIPTION 'Perl interpreter for NetWare'\n";
+ print "EXPORTS\n";
+ }
}
-sub output_symbol {
- my $symbol = shift;
- if ($PLATFORM =~ /^win(?:32|ce)$/) {
- $symbol = "_$symbol" if $CCTYPE eq 'BORLAND';
+# Then the symbols
+
+foreach my $symbol (sort keys %export) {
+ if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+ $symbol = "_$symbol" if $ARGS{CCTYPE} eq 'BORLAND';
print "\t$symbol\n";
-# XXX: binary compatibility between compilers is an exercise
-# in frustration :-(
-# if ($CCTYPE eq "BORLAND") {
-# # workaround Borland quirk by exporting both the straight
-# # name and a name with leading underscore. Note the
-# # alias *must* come after the symbol itself, if both
-# # are to be exported. (Linker bug?)
-# print "\t_$symbol\n";
-# print "\t$symbol = _$symbol\n";
-# }
-# elsif ($CCTYPE eq 'GCC') {
-# # Symbols have leading _ whole process is $%@"% slow
-# # so skip aliases for now
-# nprint "\t$symbol\n";
-# }
-# else {
-# # for binary coexistence, export both the symbol and
-# # alias with leading underscore
-# print "\t$symbol\n";
-# print "\t_$symbol = $symbol\n";
-# }
}
- elsif ($PLATFORM eq 'os2') {
+ elsif ($ARGS{PLATFORM} eq 'os2') {
printf qq( %-31s \@%s\n),
qq("$symbol"), $ordinal{$symbol} || ++$sym_ord;
printf qq( %-31s \@%s\n),
@@ -1734,22 +1341,24 @@ sub output_symbol {
$ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord
if $exportperlmalloc and exists $exportperlmalloc{$symbol};
}
- elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'vms') {
+ elsif ($ARGS{PLATFORM} eq 'netware') {
+ print "\t$symbol,\n";
+ } else {
print "$symbol\n";
}
- elsif ($PLATFORM eq 'netware') {
- print "\t$symbol,\n";
- }
+}
+
+# Then platform specific footers.
+
+if ($ARGS{PLATFORM} eq 'os2') {
+ print <<EOP;
+ dll_perlmain=main
+ fill_extLibpath
+ dir_subst
+ Perl_OS2_handler_install
+
+; LAST_ORDINAL=$sym_ord
+EOP
}
1;
-__DATA__
-# Oddities from PerlIO
-PerlIO_binmode
-PerlIO_getpos
-PerlIO_init
-PerlIO_setpos
-PerlIO_sprintf
-PerlIO_sv_dup
-PerlIO_tmpfile
-PerlIO_vsprintf
diff --git a/metaconfig.h b/metaconfig.h
index 95aba26b87..d445b34391 100644
--- a/metaconfig.h
+++ b/metaconfig.h
@@ -35,6 +35,8 @@
* LOCALTIME_MAX
* LOCALTIME_MIN
* LOCALTIME_R_NEEDS_TZSET
+ * ST_INO_SIGN
+ * ST_INO_SIZE
* U16SIZE
* U32SIZE
* U64SIZE
diff --git a/mydtrace.h b/mydtrace.h
index a7a4e470c6..01732742e4 100644
--- a/mydtrace.h
+++ b/mydtrace.h
@@ -13,16 +13,39 @@
# include "perldtrace.h"
-# define ENTRY_PROBE(func, file, line, stash) \
+# if defined(STAP_PROBE_ADDR) && !defined(DEBUGGING)
+
+/* SystemTap 1.2 uses a construct that chokes on passing a char array
+ * as a char *, in this case hek_key in struct hek. Workaround it
+ * with a temporary.
+ */
+
+# define ENTRY_PROBE(func, file, line, stash) \
+ if (PERL_SUB_ENTRY_ENABLED()) { \
+ const char *tmp_func = func; \
+ PERL_SUB_ENTRY(tmp_func, file, line, stash); \
+ }
+
+# define RETURN_PROBE(func, file, line, stash) \
+ if (PERL_SUB_RETURN_ENABLED()) { \
+ const char *tmp_func = func; \
+ PERL_SUB_RETURN(tmp_func, file, line, stash); \
+ }
+
+# else
+
+# define ENTRY_PROBE(func, file, line, stash) \
if (PERL_SUB_ENTRY_ENABLED()) { \
PERL_SUB_ENTRY(func, file, line, stash); \
}
-# define RETURN_PROBE(func, file, line, stash) \
+# define RETURN_PROBE(func, file, line, stash) \
if (PERL_SUB_RETURN_ENABLED()) { \
PERL_SUB_RETURN(func, file, line, stash); \
}
+# endif
+
# define PHASE_CHANGE_PROBE(new_phase, old_phase) \
if (PERL_PHASE_CHANGE_ENABLED()) { \
PERL_PHASE_CHANGE(new_phase, old_phase); \
diff --git a/op.c b/op.c
index 915dd78907..b3c5f86f31 100644
--- a/op.c
+++ b/op.c
@@ -365,7 +365,7 @@ S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
}
STATIC void
-S_no_bareword_allowed(pTHX_ const OP *o)
+S_no_bareword_allowed(pTHX_ OP *o)
{
PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
@@ -374,6 +374,7 @@ S_no_bareword_allowed(pTHX_ const OP *o)
qerror(Perl_mess(aTHX_
"Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
SVfARG(cSVOPo_sv)));
+ o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
}
/* "register" allocation */
@@ -1445,14 +1446,15 @@ S_finalize_op(pTHX_ OP* o)
PL_curcop = ((COP*)o); /* for warnings */
break;
case OP_EXEC:
- if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
+ if ( o->op_sibling
+ && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
&& ckWARN(WARN_SYNTAX))
{
- if (o->op_next->op_sibling) {
- const OPCODE type = o->op_next->op_sibling->op_type;
+ if (o->op_sibling->op_sibling) {
+ const OPCODE type = o->op_sibling->op_sibling->op_type;
if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
const line_t oldline = CopLINE(PL_curcop);
- CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
+ CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
Perl_warner(aTHX_ packWARN(WARN_EXEC),
"Statement unlikely to be reached");
Perl_warner(aTHX_ packWARN(WARN_EXEC),
@@ -1478,6 +1480,9 @@ S_finalize_op(pTHX_ OP* o)
break;
case OP_CONST:
+ if (cSVOPo->op_private & OPpCONST_STRICT)
+ no_bareword_allowed(o);
+ /* FALLTHROUGH */
#ifdef USE_ITHREADS
case OP_HINTSEVAL:
case OP_METHOD_NAMED:
@@ -1700,7 +1705,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
break;
goto nomod;
case OP_ENTERSUB:
- if ((type == OP_UNDEF || type == OP_REFGEN) &&
+ if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
!(o->op_flags & OPf_STACKED)) {
o->op_type = OP_RV2CV; /* entersub => rv2cv */
/* Both ENTERSUB and RV2CV use this bit, but for different pur-
@@ -2011,14 +2016,6 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
return o;
}
-/* Do not use this. It will be removed after 5.14. */
-OP *
-Perl_mod(pTHX_ OP *o, I32 type)
-{
- return op_lvalue(o,type);
-}
-
-
STATIC bool
S_scalar_mod_type(const OP *o, I32 type)
{
@@ -2711,11 +2708,23 @@ Perl_newPROG(pTHX_ OP *o)
PERL_ARGS_ASSERT_NEWPROG;
if (PL_in_eval) {
+ PERL_CONTEXT *cx;
if (PL_eval_root)
return;
PL_eval_root = newUNOP(OP_LEAVEEVAL,
((PL_in_eval & EVAL_KEEPERR)
? OPf_SPECIAL : 0), o);
+
+ cx = &cxstack[cxstack_ix];
+ assert(CxTYPE(cx) == CXt_EVAL);
+
+ if ((cx->blk_gimme & G_WANT) == G_VOID)
+ scalarvoid(PL_eval_root);
+ else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
+ list(PL_eval_root);
+ else
+ scalar(PL_eval_root);
+
/* don't use LINKLIST, since PL_eval_root might indirect through
* a rather expensive function call and LINKLIST evaluates its
* argument more than once */
@@ -2724,6 +2733,8 @@ Perl_newPROG(pTHX_ OP *o)
OpREFCNT_set(PL_eval_root, 1);
PL_eval_root->op_next = 0;
CALL_PEEP(PL_eval_start);
+ finalize_optree(PL_eval_root);
+
}
else {
if (o->op_type == OP_STUB) {
@@ -4807,6 +4818,76 @@ S_is_list_assignment(pTHX_ register const OP *o)
}
/*
+ Helper function for newASSIGNOP to detection commonality between the
+ lhs and the rhs. Marks all variables with PL_generation. If it
+ returns TRUE the assignment must be able to handle common variables.
+*/
+PERL_STATIC_INLINE bool
+S_aassign_common_vars(pTHX_ OP* o)
+{
+ OP *curop;
+ for (curop = cUNOPo->op_first; curop; curop=curop->op_sibling) {
+ if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
+ if (curop->op_type == OP_GV) {
+ GV *gv = cGVOPx_gv(curop);
+ if (gv == PL_defgv
+ || (int)GvASSIGN_GENERATION(gv) == PL_generation)
+ return TRUE;
+ GvASSIGN_GENERATION_set(gv, PL_generation);
+ }
+ else if (curop->op_type == OP_PADSV ||
+ curop->op_type == OP_PADAV ||
+ curop->op_type == OP_PADHV ||
+ curop->op_type == OP_PADANY)
+ {
+ if (PAD_COMPNAME_GEN(curop->op_targ)
+ == (STRLEN)PL_generation)
+ return TRUE;
+ PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
+
+ }
+ else if (curop->op_type == OP_RV2CV)
+ return TRUE;
+ else if (curop->op_type == OP_RV2SV ||
+ curop->op_type == OP_RV2AV ||
+ curop->op_type == OP_RV2HV ||
+ curop->op_type == OP_RV2GV) {
+ if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */
+ return TRUE;
+ }
+ else if (curop->op_type == OP_PUSHRE) {
+#ifdef USE_ITHREADS
+ if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
+ GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
+ if (gv == PL_defgv
+ || (int)GvASSIGN_GENERATION(gv) == PL_generation)
+ return TRUE;
+ GvASSIGN_GENERATION_set(gv, PL_generation);
+ }
+#else
+ GV *const gv
+ = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
+ if (gv) {
+ if (gv == PL_defgv
+ || (int)GvASSIGN_GENERATION(gv) == PL_generation)
+ return TRUE;
+ GvASSIGN_GENERATION_set(gv, PL_generation);
+ }
+#endif
+ }
+ else
+ return TRUE;
+ }
+
+ if (curop->op_flags & OPf_KIDS) {
+ if (aassign_common_vars(curop))
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*
=for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
Constructs, checks, and returns an assignment op. I<left> and I<right>
@@ -4944,64 +5025,10 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
*/
if (maybe_common_vars) {
- OP *lastop = o;
PL_generation++;
- for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
- if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
- if (curop->op_type == OP_GV) {
- GV *gv = cGVOPx_gv(curop);
- if (gv == PL_defgv
- || (int)GvASSIGN_GENERATION(gv) == PL_generation)
- break;
- GvASSIGN_GENERATION_set(gv, PL_generation);
- }
- else if (curop->op_type == OP_PADSV ||
- curop->op_type == OP_PADAV ||
- curop->op_type == OP_PADHV ||
- curop->op_type == OP_PADANY)
- {
- if (PAD_COMPNAME_GEN(curop->op_targ)
- == (STRLEN)PL_generation)
- break;
- PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
-
- }
- else if (curop->op_type == OP_RV2CV)
- break;
- else if (curop->op_type == OP_RV2SV ||
- curop->op_type == OP_RV2AV ||
- curop->op_type == OP_RV2HV ||
- curop->op_type == OP_RV2GV) {
- if (lastop->op_type != OP_GV) /* funny deref? */
- break;
- }
- else if (curop->op_type == OP_PUSHRE) {
-#ifdef USE_ITHREADS
- if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
- GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
- if (gv == PL_defgv
- || (int)GvASSIGN_GENERATION(gv) == PL_generation)
- break;
- GvASSIGN_GENERATION_set(gv, PL_generation);
- }
-#else
- GV *const gv
- = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
- if (gv) {
- if (gv == PL_defgv
- || (int)GvASSIGN_GENERATION(gv) == PL_generation)
- break;
- GvASSIGN_GENERATION_set(gv, PL_generation);
- }
-#endif
- }
- else
- break;
- }
- lastop = curop;
- }
- if (curop != o)
+ if (aassign_common_vars(o))
o->op_private |= OPpASSIGN_COMMON;
+ LINKLIST(o);
}
if (right && right->op_type == OP_SPLIT && !PL_madskills) {
@@ -5542,6 +5569,12 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
+ /* check barewords before they might be optimized aways */
+ if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
+ no_bareword_allowed(left);
+ if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
+ no_bareword_allowed(right);
+
flip->op_next = o;
if (!flip->op_private || !flop->op_private)
LINKLIST(o); /* blow off optimizer unless constant */
@@ -6998,6 +7031,7 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
CvSTART(cv) = LINKLIST(CvROOT(cv));
CvROOT(cv)->op_next = 0;
CALL_PEEP(CvSTART(cv));
+ finalize_optree(CvROOT(cv));
#ifdef PERL_MAD
op_getmad(o,pegop,'n');
op_getmad_weak(block, pegop, 'b');
@@ -7907,7 +7941,6 @@ Perl_ck_glob(pTHX_ OP *o)
}
#if !defined(PERL_EXTERNAL_GLOB)
- /* XXX this can be tightened up and made more failsafe. */
if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
GV *glob_gv;
ENTER;
@@ -9188,6 +9221,95 @@ Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
return ck_entersub_args_list(entersubop);
}
+OP *
+Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
+{
+ int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
+ OP *aop = cUNOPx(entersubop)->op_first;
+
+ PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
+
+ if (!opnum) {
+ OP *prev, *cvop;
+ if (!aop->op_sibling)
+ aop = cUNOPx(aop)->op_first;
+ prev = aop;
+ aop = aop->op_sibling;
+ for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
+ if (PL_madskills) while (aop != cvop && aop->op_type == OP_STUB) {
+ aop = aop->op_sibling;
+ continue;
+ }
+ if (aop != cvop)
+ (void)too_many_arguments(entersubop, GvNAME(namegv));
+
+ op_free(entersubop);
+ switch(GvNAME(namegv)[2]) {
+ case 'F': return newSVOP(OP_CONST, 0,
+ newSVpv(CopFILE(PL_curcop),0));
+ case 'L': return newSVOP(
+ OP_CONST, 0,
+ Perl_newSVpvf(aTHX_
+ "%"IVdf, (IV)CopLINE(PL_curcop)
+ )
+ );
+ case 'P': return newSVOP(OP_CONST, 0,
+ (PL_curstash
+ ? newSVhek(HvNAME_HEK(PL_curstash))
+ : &PL_sv_undef
+ )
+ );
+ }
+ assert(0);
+ }
+ else {
+ OP *prev, *cvop;
+ U32 paren;
+#ifdef PERL_MAD
+ bool seenarg = FALSE;
+#endif
+ if (!aop->op_sibling)
+ aop = cUNOPx(aop)->op_first;
+
+ prev = aop;
+ aop = aop->op_sibling;
+ prev->op_sibling = NULL;
+ for (cvop = aop;
+ cvop->op_sibling;
+ prev=cvop, cvop = cvop->op_sibling)
+#ifdef PERL_MAD
+ if (PL_madskills && cvop->op_sibling
+ && cvop->op_type != OP_STUB) seenarg = TRUE
+#endif
+ ;
+ prev->op_sibling = NULL;
+ paren = OPf_SPECIAL * !(cvop->op_private & OPpENTERSUB_NOPAREN);
+ op_free(cvop);
+ if (aop == cvop) aop = NULL;
+ op_free(entersubop);
+
+ switch (PL_opargs[opnum] & OA_CLASS_MASK) {
+ case OA_UNOP:
+ case OA_BASEOP_OR_UNOP:
+ case OA_FILESTATOP:
+ return aop ? newUNOP(opnum,paren,aop) : newOP(opnum,paren);
+ case OA_BASEOP:
+ if (aop) {
+#ifdef PERL_MAD
+ if (!PL_madskills || seenarg)
+#endif
+ (void)too_many_arguments(aop, GvNAME(namegv));
+ op_free(aop);
+ }
+ return newOP(opnum,0);
+ default:
+ return convert(opnum,0,aop);
+ }
+ }
+ assert(0);
+ return entersubop;
+}
+
/*
=for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
@@ -9646,11 +9768,6 @@ Perl_rpeep(pTHX_ register OP *o)
}
break;
- case OP_CONST:
- if (cSVOPo->op_private & OPpCONST_STRICT)
- no_bareword_allowed(o);
- break;
-
case OP_CONCAT:
if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
if (o->op_next->op_private & OPpTARGET_MY) {
@@ -10216,77 +10333,72 @@ Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
=for apidoc core_prototype
This function assigns the prototype of the named core function to C<sv>, or
to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
-NULL if the core function has no prototype.
-
-If the C<name> is not a Perl keyword, it croaks if C<croak> is true, or
-returns NULL if C<croak> is false.
+NULL if the core function has no prototype. C<code> is a code as returned
+by C<keyword()>. It must be negative and unequal to -KEY_CORE.
=cut
*/
SV *
-Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
- const bool croak)
+Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
+ int * const opnum)
{
- const int code = keyword(name, len, 1);
int i = 0, n = 0, seen_question = 0, defgv = 0;
I32 oa;
#define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
+ bool nullret = FALSE;
PERL_ARGS_ASSERT_CORE_PROTOTYPE;
- if (!code) {
- if (croak)
- return (SV *)Perl_die(aTHX_
- "Can't find an opnumber for \"%s\"", name
- );
- return NULL;
- }
-
- if (code > 0) return NULL; /* Not overridable */
+ assert (code < 0 && code != -KEY_CORE);
if (!sv) sv = sv_newmortal();
-#define retsetpvs(x) sv_setpvs(sv, x); return sv
+#define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
switch (-code) {
case KEY_and : case KEY_chop: case KEY_chomp:
case KEY_cmp : case KEY_exec: case KEY_eq :
case KEY_ge : case KEY_gt : case KEY_le :
- case KEY_lstat : case KEY_lt : case KEY_ne : case KEY_or :
- case KEY_stat : case KEY_system: case KEY_x : case KEY_xor:
- return NULL;
- case KEY_keys: case KEY_values: case KEY_each:
- retsetpvs("+");
- case KEY_push: case KEY_unshift:
- retsetpvs("+@");
- case KEY_pop: case KEY_shift:
- retsetpvs(";+");
+ case KEY_lt : case KEY_ne : case KEY_or :
+ case KEY_select: case KEY_system: case KEY_x : case KEY_xor:
+ if (!opnum) return NULL; nullret = TRUE; goto findopnum;
+ case KEY_keys: retsetpvs("+", OP_KEYS);
+ case KEY_values: retsetpvs("+", OP_VALUES);
+ case KEY_each: retsetpvs("+", OP_EACH);
+ case KEY_push: retsetpvs("+@", OP_PUSH);
+ case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
+ case KEY_pop: retsetpvs(";+", OP_POP);
+ case KEY_shift: retsetpvs(";+", OP_SHIFT);
case KEY_splice:
- retsetpvs("+;$$@");
+ retsetpvs("+;$$@", OP_SPLICE);
case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
- retsetpvs("");
+ retsetpvs("", 0);
case KEY_readpipe:
name = "backtick";
}
#undef retsetpvs
+ findopnum:
while (i < MAXO) { /* The slow way. */
if (strEQ(name, PL_op_name[i])
|| strEQ(name, PL_op_desc[i]))
{
+ if (nullret) { assert(opnum); *opnum = i; return NULL; }
goto found;
}
i++;
}
- return NULL; /* Should not happen... */
+ assert(0); return NULL; /* Should not happen... */
found:
defgv = PL_opargs[i] & OA_DEFGV;
oa = PL_opargs[i] >> OASHIFT;
while (oa) {
- if (oa & OA_OPTIONAL && !seen_question && (!defgv || n)) {
+ if (oa & OA_OPTIONAL && !seen_question && (
+ !defgv || n || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
+ )) {
seen_question = 1;
str[n++] = ';';
}
@@ -10303,6 +10415,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
str[n++] = '$';
str[n++] = '@';
str[n++] = '%';
+ if (i == OP_LOCK) str[n++] = '&';
str[n++] = '*';
str[n++] = ']';
}
@@ -10313,6 +10426,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
str[0] = '_';
str[n++] = '\0';
sv_setpvn(sv, str, n - 1);
+ if (opnum) *opnum = i;
return sv;
}
diff --git a/op.h b/op.h
index cbcac7de2e..873dc497e0 100644
--- a/op.h
+++ b/op.h
@@ -156,12 +156,19 @@ Deprecated. Use C<GIMME_V> instead.
: G_SCALAR) \
: dowantarray())
+/* Lower bits of op_private often carry the number of arguments, as
+ * set by newBINOP, newUNOP and ck_fun */
+
/* NOTE: OP_NEXTSTATE and OP_DBSTATE (i.e. COPs) carry lower
* bits of PL_hints in op_private */
/* Private for lvalues */
#define OPpLVAL_INTRO 128 /* Lvalue must be localized or lvalue sub */
+/* Private for OPs with TARGLEX */
+ /* (lower bits may carry MAXARG) */
+#define OPpTARGET_MY 16 /* Target is PADMY. */
+
/* Private for OP_LEAVE, OP_LEAVESUB, OP_LEAVESUBLV and OP_LEAVEWRITE */
#define OPpREFCOUNTED 64 /* op_targ carries a refcount */
@@ -203,6 +210,7 @@ Deprecated. Use C<GIMME_V> instead.
#define OPpENTERSUB_NOMOD 64 /* Immune to op_lvalue() for :attrlist. */
#define OPpENTERSUB_INARGS 4 /* Lval used as arg to a sub. */
#define OPpENTERSUB_DEREF 1 /* Lval call that autovivifies. */
+/* used by HINT_STRICT_SUBS 2 */
/* Mask for OP_ENTERSUB flags, the absence of which must be propagated
in dynamic context */
#define OPpENTERSUB_LVAL_MASK (OPpLVAL_INTRO|OPpENTERSUB_INARGS)
@@ -230,10 +238,6 @@ Deprecated. Use C<GIMME_V> instead.
/* (Therefore will return whatever is currently in the symbol table, not
guaranteed to be a PVGV) */
-/* Private for OPs with TARGLEX */
- /* (lower bits may carry MAXARG) */
-#define OPpTARGET_MY 16 /* Target is PADMY. */
-
/* Private for OP_ENTERITER and OP_ITER */
#define OPpITER_REVERSED 4 /* for (reverse ...) */
#define OPpITER_DEF 8 /* for $_ or for my $_ */
diff --git a/opcode.h b/opcode.h
index fb64ae271b..73c81dd747 100644
--- a/opcode.h
+++ b/opcode.h
@@ -1939,8 +1939,8 @@ EXTCONST U32 PL_opargs[] = {
0x01116404, /* ssockopt */
0x00006b04, /* getsockname */
0x00006b04, /* getpeername */
- 0x00006c80, /* lstat */
- 0x00006c80, /* stat */
+ 0x0000ec80, /* lstat */
+ 0x0000ec80, /* stat */
0x00006c84, /* ftrread */
0x00006c84, /* ftrwrite */
0x00006c84, /* ftrexec */
diff --git a/perl.c b/perl.c
index 1f69e05de2..736a055355 100644
--- a/perl.c
+++ b/perl.c
@@ -3480,14 +3480,14 @@ S_init_interp(pTHX)
{
dVAR;
#ifdef MULTIPLICITY
-# define PERLVAR(var,type)
-# define PERLVARA(var,n,type)
+# define PERLVAR(prefix,var,type)
+# define PERLVARA(prefix,var,n,type)
# if defined(PERL_IMPLICIT_CONTEXT)
-# define PERLVARI(var,type,init) aTHX->var = init;
-# define PERLVARIC(var,type,init) aTHX->var = init;
+# define PERLVARI(prefix,var,type,init) aTHX->prefix##var = init;
+# define PERLVARIC(prefix,var,type,init) aTHX->prefix##var = init;
# else
-# define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
-# define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
+# define PERLVARI(prefix,var,type,init) PERL_GET_INTERP->var = init;
+# define PERLVARIC(prefix,var,type,init) PERL_GET_INTERP->var = init;
# endif
# include "intrpvar.h"
# undef PERLVAR
@@ -3495,10 +3495,10 @@ S_init_interp(pTHX)
# undef PERLVARI
# undef PERLVARIC
#else
-# define PERLVAR(var,type)
-# define PERLVARA(var,n,type)
-# define PERLVARI(var,type,init) PL_##var = init;
-# define PERLVARIC(var,type,init) PL_##var = init;
+# define PERLVAR(prefix,var,type)
+# define PERLVARA(prefix,var,n,type)
+# define PERLVARI(prefix,var,type,init) PL_##var = init;
+# define PERLVARIC(prefix,var,type,init) PL_##var = init;
# include "intrpvar.h"
# undef PERLVAR
# undef PERLVARA
diff --git a/perl.h b/perl.h
index 79989d9583..200e416dbd 100644
--- a/perl.h
+++ b/perl.h
@@ -4935,10 +4935,10 @@ struct interpreter {
*/
/* Set up PERLVAR macros for populating structs */
-# define PERLVAR(var,type) type var;
-# define PERLVARA(var,n,type) type var[n];
-# define PERLVARI(var,type,init) type var;
-# define PERLVARIC(var,type,init) type var;
+# define PERLVAR(prefix,var,type) type prefix##var;
+# define PERLVARA(prefix,var,n,type) type prefix##var[n];
+# define PERLVARI(prefix,var,type,init) type prefix##var;
+# define PERLVARIC(prefix,var,type,init) type prefix##var;
struct interpreter {
# include "intrpvar.h"
@@ -5037,10 +5037,10 @@ struct tempsym; /* defined in pp_pack.c */
* these include variables that would have been their struct-s
*/
-#define PERLVAR(var,type) EXT type PL_##var;
-#define PERLVARA(var,n,type) EXT type PL_##var[n];
-#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
-#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
+#define PERLVAR(prefix,var,type) EXT type PL_##var;
+#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n];
+#define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init);
+#define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init);
#if !defined(MULTIPLICITY)
START_EXTERN_C
diff --git a/perlapi.c b/perlapi.c
index 6eab07cbc1..78583377a2 100644
--- a/perlapi.c
+++ b/perlapi.c
@@ -34,17 +34,17 @@
START_EXTERN_C
#undef PERLVARI
-#define PERLVARI(v,t,i) PERLVAR(v,t)
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
#undef PERLVAR
#undef PERLVARA
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
+#define PERLVAR(p,v,t) t* Perl_##p##v##_ptr(pTHX) \
{ dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
+#define PERLVARA(p,v,n,t) PL_##v##_t* Perl_##p##v##_ptr(pTHX) \
{ dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
#undef PERLVARIC
-#define PERLVARIC(v,t,i) \
- const t* Perl_##v##_ptr(pTHX) \
+#define PERLVARIC(p,v,t,i) \
+ const t* Perl_##p##v##_ptr(pTHX) \
{ PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
#include "perlvars.h"
diff --git a/perlapi.h b/perlapi.h
index a48abed4a7..098bd915db 100644
--- a/perlapi.h
+++ b/perlapi.h
@@ -28,11 +28,11 @@ START_EXTERN_C
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
-#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
-#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
- EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
+#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX);
+#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \
+ EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
+#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
#include "perlvars.h"
@@ -62,10 +62,10 @@ EXTCONST void * const PL_force_link_funcs[] = {
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
-#define PERLVAR(v,t) (void*)Perl_##v##_ptr,
-#define PERLVARA(v,n,t) PERLVAR(v,t)
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
+#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr,
+#define PERLVARA(p,v,n,t) PERLVAR(p,v,t)
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
+#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t)
/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
* cannot cast between void pointers and function pointers without
diff --git a/perldtrace.d b/perldtrace.d
index f87a27adaf..95eb0664da 100644
--- a/perldtrace.d
+++ b/perldtrace.d
@@ -4,8 +4,8 @@
*/
provider perl {
- probe sub__entry(char *, char *, int, char *);
- probe sub__return(char *, char *, int, char *);
+ probe sub__entry(const char *, const char *, int, const char *);
+ probe sub__return(const char *, const char *, int, const char *);
probe phase__change(const char *, const char *);
};
diff --git a/perlvars.h b/perlvars.h
index 57bd5bd859..b046fade05 100644
--- a/perlvars.h
+++ b/perlvars.h
@@ -25,100 +25,102 @@
/* global state */
#if defined(USE_ITHREADS)
-PERLVAR(Gop_mutex, perl_mutex) /* Mutex for op refcounting */
+PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */
#endif
-PERLVAR(Gcurinterp, PerlInterpreter *)
+PERLVAR(G, curinterp, PerlInterpreter *)
/* currently running interpreter
* (initial parent interpreter under
* useithreads) */
#if defined(USE_ITHREADS)
-PERLVAR(Gthr_key, perl_key) /* key to retrieve per-thread struct */
+PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */
#endif
/* XXX does anyone even use this? */
-PERLVARI(Gdo_undump, bool, FALSE) /* -u or dump seen? */
+PERLVARI(G, do_undump, bool, FALSE) /* -u or dump seen? */
#ifndef PERL_USE_SAFE_PUTENV
-PERLVARI(Guse_safe_putenv, bool, TRUE)
+PERLVARI(G, use_safe_putenv, bool, TRUE)
#endif
#if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS)||defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
-PERLVARI(Gsig_handlers_initted, int, 0)
+PERLVARI(G, sig_handlers_initted, int, 0)
#endif
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
-PERLVARA(Gsig_ignoring, SIG_SIZE, int) /* which signals we are ignoring */
+PERLVARA(G, sig_ignoring, SIG_SIZE, int)
+ /* which signals we are ignoring */
#endif
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
-PERLVARA(Gsig_defaulting, SIG_SIZE, int)
+PERLVARA(G, sig_defaulting, SIG_SIZE, int)
#endif
/* XXX signals are process-wide anyway, so we
* ignore the implications of this for threading */
#ifndef HAS_SIGACTION
-PERLVARI(Gsig_trapped, int, 0)
+PERLVARI(G, sig_trapped, int, 0)
#endif
#ifndef PERL_MICRO
/* If Perl has to ignore SIGPFE, this is its saved state.
* See perl.h macros PERL_FPU_INIT and PERL_FPU_{PRE,POST}_EXEC. */
-PERLVAR(Gsigfpe_saved, Sighandler_t)
-PERLVARI(Gcsighandlerp, Sighandler_t, Perl_csighandler) /* Pointer to C-level sighandler */
+PERLVAR(G, sigfpe_saved, Sighandler_t)
+PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler)
+ /* Pointer to C-level sighandler */
#endif
/* This is constant on most architectures, a global on OS/2 */
#ifdef OS2
-PERLVARI(Gsh_path, char *, SH_PATH) /* full path of shell */
+PERLVARI(G, sh_path, char *, SH_PATH) /* full path of shell */
#endif
#ifdef USE_PERLIO
# if defined(USE_ITHREADS)
-PERLVAR(Gperlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */
+PERLVAR(G, perlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */
# endif
-PERLVARI(Gperlio_fd_refcnt, int*, 0) /* Pointer to array of fd refcounts. */
-PERLVARI(Gperlio_fd_refcnt_size, int, 0) /* Size of the array */
-PERLVARI(Gperlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */
+PERLVARI(G, perlio_fd_refcnt, int *, 0) /* Pointer to array of fd refcounts. */
+PERLVARI(G, perlio_fd_refcnt_size, int, 0) /* Size of the array */
+PERLVARI(G, perlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */
#endif
#ifdef HAS_MMAP
-PERLVARI(Gmmap_page_size, IV, 0)
+PERLVARI(G, mmap_page_size, IV, 0)
#endif
#if defined(USE_ITHREADS)
-PERLVAR(Ghints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */
+PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */
#endif
#ifdef DEBUGGING
-PERLVAR(Gwatch_pvx, char*)
+PERLVAR(G, watch_pvx, char *)
#endif
#ifdef PERL_GLOBAL_STRUCT
-PERLVAR(Gppaddr, Perl_ppaddr_t*) /* or opcode.h */
-PERLVAR(Gcheck, Perl_check_t *) /* or opcode.h */
-PERLVARA(Gfold_locale, 256, unsigned char) /* or perl.h */
+PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */
+PERLVAR(G, check, Perl_check_t *) /* or opcode.h */
+PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */
#endif
#ifdef PERL_NEED_APPCTX
-PERLVAR(Gappctx, void*) /* the application context */
+PERLVAR(G, appctx, void*) /* the application context */
#endif
#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
-PERLVAR(Gtimesbase, struct tms)
+PERLVAR(G, timesbase, struct tms)
#endif
/* allocate a unique index to every module that calls MY_CXT_INIT */
#ifdef PERL_IMPLICIT_CONTEXT
# ifdef USE_ITHREADS
-PERLVAR(Gmy_ctx_mutex, perl_mutex)
+PERLVAR(G, my_ctx_mutex, perl_mutex)
# endif
-PERLVARI(Gmy_cxt_index, int, 0)
+PERLVARI(G, my_cxt_index, int, 0)
#endif
/* this is currently set without MUTEX protection, so keep it a type which
* can be set atomically (ie not a bit field) */
-PERLVARI(Gveto_cleanup, int, FALSE) /* exit without cleanup */
+PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */
/*
=for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
@@ -173,19 +175,19 @@ the Perl core) will normally return C<KEYWORD_PLUGIN_DECLINE>.
=cut
*/
-PERLVARI(Gkeyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard)
+PERLVARI(G, keyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard)
-PERLVAR(Gop_sequence, HV*) /* dump.c */
-PERLVARI(Gop_seq, UV, 0) /* dump.c */
+PERLVAR(G, op_sequence, HV *) /* dump.c */
+PERLVARI(G, op_seq, UV, 0) /* dump.c */
#ifdef USE_ITHREADS
-PERLVAR(Gdollarzero_mutex, perl_mutex) /* Modifying $0 */
+PERLVAR(G, dollarzero_mutex, perl_mutex) /* Modifying $0 */
#endif
/* Restricted hashes placeholder value.
* The contents are never used, only the address. */
-PERLVAR(Gsv_placeholder, SV)
+PERLVAR(G, sv_placeholder, SV)
#if defined(MYMALLOC) && defined(USE_ITHREADS)
-PERLVAR(Gmalloc_mutex, perl_mutex) /* Mutex for malloc */
+PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */
#endif
diff --git a/perly.act b/perly.act
index bd3cffba68..aba008fe3c 100644
--- a/perly.act
+++ b/perly.act
@@ -1510,12 +1510,25 @@ case 2:
case 188:
#line 1236 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+ break;
+
+ case 189:
+#line 1238 "perly.y"
+ { (yyval.opval) = (ps[(1) - (3)].val.opval);
+ TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
+ TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
+ ;}
+ break;
+
+ case 190:
+#line 1243 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
scalar((ps[(1) - (1)].val.opval))); ;}
break;
- case 189:
-#line 1239 "perly.y"
+ case 191:
+#line 1246 "perly.y"
{ (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
: newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
@@ -1526,8 +1539,8 @@ case 2:
;}
break;
- case 190:
-#line 1248 "perly.y"
+ case 192:
+#line 1255 "perly.y"
{ (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -1535,16 +1548,16 @@ case 2:
;}
break;
- case 191:
-#line 1254 "perly.y"
+ case 193:
+#line 1261 "perly.y"
{ (yyval.opval) = pmruntime((ps[(1) - (4)].val.opval), (ps[(3) - (4)].val.opval), 1);
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 194:
-#line 1261 "perly.y"
+ case 196:
+#line 1268 "perly.y"
{
(yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -1552,8 +1565,8 @@ case 2:
;}
break;
- case 196:
-#line 1271 "perly.y"
+ case 198:
+#line 1278 "perly.y"
{ (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
DO_MAD(
token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
@@ -1563,47 +1576,37 @@ case 2:
;}
break;
- case 197:
-#line 1279 "perly.y"
+ case 199:
+#line 1286 "perly.y"
{ (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
;}
break;
- case 198:
-#line 1286 "perly.y"
+ case 200:
+#line 1293 "perly.y"
{ (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 199:
-#line 1291 "perly.y"
+ case 201:
+#line 1298 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST());
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 200:
-#line 1296 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
- break;
-
- case 201:
-#line 1298 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
- break;
-
case 202:
-#line 1300 "perly.y"
+#line 1303 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
case 203:
#line 1305 "perly.y"
- { (yyval.opval) = (OP*)NULL; ;}
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
case 204:
@@ -1612,94 +1615,104 @@ case 2:
break;
case 205:
-#line 1311 "perly.y"
+#line 1312 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
case 206:
-#line 1313 "perly.y"
+#line 1314 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
case 207:
-#line 1317 "perly.y"
- { (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;}
+#line 1318 "perly.y"
+ { (yyval.opval) = (OP*)NULL; ;}
break;
case 208:
-#line 1319 "perly.y"
- { munge_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;}
+#line 1320 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
case 209:
-#line 1321 "perly.y"
- { (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;}
+#line 1324 "perly.y"
+ { (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;}
break;
case 210:
-#line 1327 "perly.y"
- { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
+#line 1326 "perly.y"
+ { munge_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;}
break;
case 211:
-#line 1331 "perly.y"
+#line 1328 "perly.y"
+ { (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;}
+ break;
+
+ case 212:
+#line 1334 "perly.y"
+ { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
+ break;
+
+ case 213:
+#line 1338 "perly.y"
{ (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
;}
break;
- case 212:
-#line 1337 "perly.y"
+ case 214:
+#line 1344 "perly.y"
{ (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
;}
break;
- case 213:
-#line 1343 "perly.y"
+ case 215:
+#line 1350 "perly.y"
{ (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
;}
break;
- case 214:
-#line 1349 "perly.y"
+ case 216:
+#line 1356 "perly.y"
{ (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
;}
break;
- case 215:
-#line 1355 "perly.y"
+ case 217:
+#line 1362 "perly.y"
{ (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
;}
break;
- case 216:
-#line 1361 "perly.y"
+ case 218:
+#line 1368 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
;}
break;
- case 217:
-#line 1368 "perly.y"
+ case 219:
+#line 1375 "perly.y"
{ (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
break;
- case 218:
-#line 1370 "perly.y"
+ case 220:
+#line 1377 "perly.y"
{ (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
break;
- case 219:
-#line 1372 "perly.y"
+ case 221:
+#line 1379 "perly.y"
{ (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); ;}
break;
- case 220:
-#line 1375 "perly.y"
+ case 222:
+#line 1382 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
@@ -1710,6 +1723,6 @@ case 2:
/* Generated from:
- * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y
+ * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y
* 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl
* ex: set ro: */
diff --git a/perly.h b/perly.h
index 49a325e398..30f838e644 100644
--- a/perly.h
+++ b/perly.h
@@ -59,71 +59,72 @@
PMFUNC = 268,
PRIVATEREF = 269,
QWLIST = 270,
- FUNC0SUB = 271,
- UNIOPSUB = 272,
- LSTOPSUB = 273,
- PLUGEXPR = 274,
- PLUGSTMT = 275,
- LABEL = 276,
- FORMAT = 277,
- SUB = 278,
- ANONSUB = 279,
- PACKAGE = 280,
- USE = 281,
- WHILE = 282,
- UNTIL = 283,
- IF = 284,
- UNLESS = 285,
- ELSE = 286,
- ELSIF = 287,
- CONTINUE = 288,
- FOR = 289,
- GIVEN = 290,
- WHEN = 291,
- DEFAULT = 292,
- LOOPEX = 293,
- DOTDOT = 294,
- YADAYADA = 295,
- FUNC0 = 296,
- FUNC1 = 297,
- FUNC = 298,
- UNIOP = 299,
- LSTOP = 300,
- RELOP = 301,
- EQOP = 302,
- MULOP = 303,
- ADDOP = 304,
- DOLSHARP = 305,
- DO = 306,
- HASHBRACK = 307,
- NOAMP = 308,
- LOCAL = 309,
- MY = 310,
- MYSUB = 311,
- REQUIRE = 312,
- COLONATTR = 313,
- PREC_LOW = 314,
- DOROP = 315,
- OROP = 316,
- ANDOP = 317,
- NOTOP = 318,
- ASSIGNOP = 319,
- DORDOR = 320,
- OROR = 321,
- ANDAND = 322,
- BITOROP = 323,
- BITANDOP = 324,
- SHIFTOP = 325,
- MATCHOP = 326,
- REFGEN = 327,
- UMINUS = 328,
- POWOP = 329,
- POSTDEC = 330,
- POSTINC = 331,
- PREDEC = 332,
- PREINC = 333,
- ARROW = 334,
- PEG = 335
+ FUNC0OP = 271,
+ FUNC0SUB = 272,
+ UNIOPSUB = 273,
+ LSTOPSUB = 274,
+ PLUGEXPR = 275,
+ PLUGSTMT = 276,
+ LABEL = 277,
+ FORMAT = 278,
+ SUB = 279,
+ ANONSUB = 280,
+ PACKAGE = 281,
+ USE = 282,
+ WHILE = 283,
+ UNTIL = 284,
+ IF = 285,
+ UNLESS = 286,
+ ELSE = 287,
+ ELSIF = 288,
+ CONTINUE = 289,
+ FOR = 290,
+ GIVEN = 291,
+ WHEN = 292,
+ DEFAULT = 293,
+ LOOPEX = 294,
+ DOTDOT = 295,
+ YADAYADA = 296,
+ FUNC0 = 297,
+ FUNC1 = 298,
+ FUNC = 299,
+ UNIOP = 300,
+ LSTOP = 301,
+ RELOP = 302,
+ EQOP = 303,
+ MULOP = 304,
+ ADDOP = 305,
+ DOLSHARP = 306,
+ DO = 307,
+ HASHBRACK = 308,
+ NOAMP = 309,
+ LOCAL = 310,
+ MY = 311,
+ MYSUB = 312,
+ REQUIRE = 313,
+ COLONATTR = 314,
+ PREC_LOW = 315,
+ DOROP = 316,
+ OROP = 317,
+ ANDOP = 318,
+ NOTOP = 319,
+ ASSIGNOP = 320,
+ DORDOR = 321,
+ OROR = 322,
+ ANDAND = 323,
+ BITOROP = 324,
+ BITANDOP = 325,
+ SHIFTOP = 326,
+ MATCHOP = 327,
+ REFGEN = 328,
+ UMINUS = 329,
+ POWOP = 330,
+ POSTDEC = 331,
+ POSTINC = 332,
+ PREDEC = 333,
+ PREINC = 334,
+ ARROW = 335,
+ PEG = 336
};
#endif
/* Tokens. */
@@ -140,71 +141,72 @@
#define PMFUNC 268
#define PRIVATEREF 269
#define QWLIST 270
-#define FUNC0SUB 271
-#define UNIOPSUB 272
-#define LSTOPSUB 273
-#define PLUGEXPR 274
-#define PLUGSTMT 275
-#define LABEL 276
-#define FORMAT 277
-#define SUB 278
-#define ANONSUB 279
-#define PACKAGE 280
-#define USE 281
-#define WHILE 282
-#define UNTIL 283
-#define IF 284
-#define UNLESS 285
-#define ELSE 286
-#define ELSIF 287
-#define CONTINUE 288
-#define FOR 289
-#define GIVEN 290
-#define WHEN 291
-#define DEFAULT 292
-#define LOOPEX 293
-#define DOTDOT 294
-#define YADAYADA 295
-#define FUNC0 296
-#define FUNC1 297
-#define FUNC 298
-#define UNIOP 299
-#define LSTOP 300
-#define RELOP 301
-#define EQOP 302
-#define MULOP 303
-#define ADDOP 304
-#define DOLSHARP 305
-#define DO 306
-#define HASHBRACK 307
-#define NOAMP 308
-#define LOCAL 309
-#define MY 310
-#define MYSUB 311
-#define REQUIRE 312
-#define COLONATTR 313
-#define PREC_LOW 314
-#define DOROP 315
-#define OROP 316
-#define ANDOP 317
-#define NOTOP 318
-#define ASSIGNOP 319
-#define DORDOR 320
-#define OROR 321
-#define ANDAND 322
-#define BITOROP 323
-#define BITANDOP 324
-#define SHIFTOP 325
-#define MATCHOP 326
-#define REFGEN 327
-#define UMINUS 328
-#define POWOP 329
-#define POSTDEC 330
-#define POSTINC 331
-#define PREDEC 332
-#define PREINC 333
-#define ARROW 334
-#define PEG 335
+#define FUNC0OP 271
+#define FUNC0SUB 272
+#define UNIOPSUB 273
+#define LSTOPSUB 274
+#define PLUGEXPR 275
+#define PLUGSTMT 276
+#define LABEL 277
+#define FORMAT 278
+#define SUB 279
+#define ANONSUB 280
+#define PACKAGE 281
+#define USE 282
+#define WHILE 283
+#define UNTIL 284
+#define IF 285
+#define UNLESS 286
+#define ELSE 287
+#define ELSIF 288
+#define CONTINUE 289
+#define FOR 290
+#define GIVEN 291
+#define WHEN 292
+#define DEFAULT 293
+#define LOOPEX 294
+#define DOTDOT 295
+#define YADAYADA 296
+#define FUNC0 297
+#define FUNC1 298
+#define FUNC 299
+#define UNIOP 300
+#define LSTOP 301
+#define RELOP 302
+#define EQOP 303
+#define MULOP 304
+#define ADDOP 305
+#define DOLSHARP 306
+#define DO 307
+#define HASHBRACK 308
+#define NOAMP 309
+#define LOCAL 310
+#define MY 311
+#define MYSUB 312
+#define REQUIRE 313
+#define COLONATTR 314
+#define PREC_LOW 315
+#define DOROP 316
+#define OROP 317
+#define ANDOP 318
+#define NOTOP 319
+#define ASSIGNOP 320
+#define DORDOR 321
+#define OROR 322
+#define ANDAND 323
+#define BITOROP 324
+#define BITANDOP 325
+#define SHIFTOP 326
+#define MATCHOP 327
+#define REFGEN 328
+#define UMINUS 329
+#define POWOP 330
+#define POSTDEC 331
+#define POSTINC 332
+#define PREDEC 333
+#define PREINC 334
+#define ARROW 335
+#define PEG 336
@@ -240,6 +242,6 @@ typedef union YYSTYPE
/* Generated from:
- * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y
+ * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y
* 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl
* ex: set ro: */
diff --git a/perly.tab b/perly.tab
index ae983ba9b2..c8c757d2ce 100644
--- a/perly.tab
+++ b/perly.tab
@@ -6,20 +6,20 @@
#define YYFINAL 14
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2683
+#define YYLAST 2772
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 100
+#define YYNTOKENS 101
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 63
/* YYNRULES -- Number of rules. */
-#define YYNRULES 220
+#define YYNRULES 222
/* YYNRULES -- Number of states. */
-#define YYNSTATES 446
+#define YYNSTATES 449
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 335
+#define YYMAXUTOK 336
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -30,16 +30,16 @@ static const yytype_uint8 yytranslate[] =
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 87, 2, 2, 15, 17, 19, 2,
- 98, 97, 18, 14, 76, 13, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 79, 20,
- 2, 2, 2, 78, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 88, 2, 2, 15, 17, 19, 2,
+ 99, 98, 18, 14, 77, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 80, 20,
+ 2, 2, 2, 79, 16, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 11, 2, 12, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 9, 2, 10, 88, 2, 2, 2,
+ 2, 2, 2, 9, 2, 10, 89, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -58,9 +58,9 @@ static const yytype_uint8 yytranslate[] =
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 77,
- 80, 81, 82, 83, 84, 85, 86, 89, 90, 91,
- 92, 93, 94, 95, 96, 99
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 78, 81, 82, 83, 84, 85, 86, 87, 90, 91,
+ 92, 93, 94, 95, 96, 97, 100
};
#if YYDEBUG
@@ -87,92 +87,92 @@ static const yytype_uint16 yyprhs[] =
595, 599, 601, 604, 606, 608, 610, 612, 614, 616,
621, 627, 629, 631, 635, 640, 644, 646, 649, 652,
654, 657, 660, 662, 665, 667, 670, 672, 676, 678,
- 682, 687, 692, 694, 696, 698, 700, 704, 707, 711,
- 714, 716, 718, 720, 721, 723, 724, 726, 728, 729,
- 733, 735, 738, 741, 744, 747, 750, 753, 755, 757,
- 759
+ 682, 684, 688, 693, 698, 700, 702, 704, 706, 710,
+ 713, 717, 720, 722, 724, 726, 727, 729, 730, 732,
+ 734, 735, 739, 741, 744, 747, 750, 753, 756, 759,
+ 761, 763, 765
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int16 yyrhs[] =
{
- 101, 0, -1, -1, 3, 102, 109, 113, -1, -1,
- 4, 103, 152, -1, -1, 5, 104, 108, -1, -1,
- 6, 105, 116, -1, -1, 7, 106, 114, -1, -1,
- 8, 107, 113, -1, 9, 109, 113, 10, -1, -1,
- -1, 9, 112, 113, 10, -1, -1, -1, 113, 114,
- -1, 116, -1, 115, -1, 33, 116, -1, 33, 115,
- -1, 32, -1, 99, -1, 34, 132, 129, 108, -1,
- 35, 130, 133, 134, 135, 137, -1, 68, 130, 133,
- 134, 135, 137, -1, 37, 21, 21, 20, -1, -1,
- 38, 130, 117, 21, 21, 151, 20, -1, 41, 153,
- 109, 126, 97, 111, 120, -1, 42, 153, 109, 128,
- 97, 111, 120, -1, 47, 153, 109, 110, 126, 97,
- 111, -1, 48, 153, 109, 126, 97, 111, -1, 49,
- 108, -1, 39, 153, 109, 124, 97, 122, 111, 121,
- -1, 40, 153, 109, 125, 97, 122, 111, 121, -1,
- 46, 153, 109, 127, 20, 124, 20, 122, 127, 97,
- 111, -1, 46, 67, 109, 155, 153, 126, 97, 111,
- 121, -1, 46, 157, 153, 109, 126, 97, 111, 121,
- -1, 46, 153, 109, 126, 97, 111, 121, -1, 108,
- 121, -1, -1, 37, 21, 21, 9, 109, 118, 113,
- 10, -1, 119, 20, -1, 20, -1, 1, -1, 138,
- -1, 138, 41, 138, -1, 138, 42, 138, -1, 138,
- 39, 138, -1, 138, 40, 125, -1, 138, 46, 138,
- -1, 138, 48, 138, -1, -1, 43, 111, -1, 44,
- 153, 126, 97, 111, 120, -1, -1, 45, 108, -1,
- -1, -1, 119, -1, -1, 138, -1, 138, -1, 138,
- -1, 123, -1, 125, -1, 21, -1, -1, -1, -1,
- -1, 21, -1, -1, 24, -1, -1, 70, 24, -1,
- 70, -1, 70, 24, -1, 70, -1, 108, -1, 20,
- -1, 138, 74, 138, -1, 138, 73, 138, -1, 138,
- 72, 138, -1, 139, -1, 139, 76, -1, 139, 76,
- 148, -1, 148, -1, 57, 162, 139, -1, 55, 98,
- 162, 138, 97, -1, 148, 96, 142, 153, 152, 97,
- -1, 148, 96, 142, -1, 22, 162, 151, -1, 23,
- 162, 98, 152, 97, -1, 57, 151, -1, 55, 98,
- 152, 97, -1, -1, 30, 131, 108, 141, 151, -1,
- 22, -1, 157, -1, 161, 9, 138, 20, 10, -1,
- 157, 11, 138, 12, -1, 148, 96, 11, 138, 12,
- -1, 143, 11, 138, 12, -1, 157, 9, 138, 20,
- 10, -1, 148, 96, 9, 138, 20, 10, -1, 143,
- 9, 138, 20, 10, -1, 148, 96, 98, 97, -1,
- 148, 96, 98, 138, 97, -1, 143, 153, 138, 97,
- -1, 143, 153, 97, -1, 98, 138, 97, 11, 138,
- 12, -1, 27, 11, 138, 12, -1, 98, 97, 11,
- 138, 12, -1, 148, 77, 148, -1, 148, 91, 148,
- -1, 148, 60, 148, -1, 148, 61, 148, -1, 148,
- 85, 148, -1, 148, 58, 148, -1, 148, 59, 148,
- -1, 148, 84, 148, -1, 148, 83, 148, -1, 148,
- 51, 148, -1, 148, 82, 148, -1, 148, 81, 148,
- -1, 148, 80, 148, -1, 148, 86, 148, -1, 13,
- 148, -1, 14, 148, -1, 87, 148, -1, 88, 148,
- -1, 148, 93, -1, 148, 92, -1, 95, 148, -1,
- 94, 148, -1, 11, 138, 12, -1, 11, 12, -1,
- 64, 138, 20, 10, -1, 64, 20, 10, -1, 36,
- 131, 134, 135, 108, -1, 63, 148, -1, 63, 108,
- -1, 63, 21, 153, 97, -1, 63, 21, 153, 138,
- 97, -1, 63, 157, 153, 97, -1, 63, 157, 153,
- 138, 97, -1, 144, -1, 145, -1, 146, -1, 147,
- -1, 148, 78, 148, 79, 148, -1, 89, 148, -1,
- 149, -1, 66, 148, -1, 98, 138, 97, -1, 27,
- -1, 98, 97, -1, 157, -1, 161, -1, 159, -1,
- 158, -1, 160, -1, 143, -1, 158, 11, 138, 12,
- -1, 158, 9, 138, 20, 10, -1, 24, -1, 156,
- -1, 156, 153, 97, -1, 156, 153, 138, 97, -1,
- 65, 21, 151, -1, 50, -1, 50, 148, -1, 75,
- 139, -1, 56, -1, 56, 108, -1, 56, 148, -1,
- 69, -1, 69, 148, -1, 29, -1, 29, 148, -1,
- 53, -1, 53, 98, 97, -1, 28, -1, 54, 98,
- 97, -1, 54, 98, 138, 97, -1, 25, 98, 139,
- 97, -1, 21, -1, 140, -1, 52, -1, 31, -1,
- 67, 150, 136, -1, 67, 150, -1, 98, 138, 97,
- -1, 98, 97, -1, 157, -1, 159, -1, 158, -1,
- -1, 139, -1, -1, 138, -1, 98, -1, -1, 27,
- 154, 98, -1, 157, -1, 19, 162, -1, 15, 162,
- -1, 16, 162, -1, 17, 162, -1, 62, 162, -1,
- 18, 162, -1, 21, -1, 157, -1, 108, -1, 26,
- -1
+ 102, 0, -1, -1, 3, 103, 110, 114, -1, -1,
+ 4, 104, 153, -1, -1, 5, 105, 109, -1, -1,
+ 6, 106, 117, -1, -1, 7, 107, 115, -1, -1,
+ 8, 108, 114, -1, 9, 110, 114, 10, -1, -1,
+ -1, 9, 113, 114, 10, -1, -1, -1, 114, 115,
+ -1, 117, -1, 116, -1, 34, 117, -1, 34, 116,
+ -1, 33, -1, 100, -1, 35, 133, 130, 109, -1,
+ 36, 131, 134, 135, 136, 138, -1, 69, 131, 134,
+ 135, 136, 138, -1, 38, 21, 21, 20, -1, -1,
+ 39, 131, 118, 21, 21, 152, 20, -1, 42, 154,
+ 110, 127, 98, 112, 121, -1, 43, 154, 110, 129,
+ 98, 112, 121, -1, 48, 154, 110, 111, 127, 98,
+ 112, -1, 49, 154, 110, 127, 98, 112, -1, 50,
+ 109, -1, 40, 154, 110, 125, 98, 123, 112, 122,
+ -1, 41, 154, 110, 126, 98, 123, 112, 122, -1,
+ 47, 154, 110, 128, 20, 125, 20, 123, 128, 98,
+ 112, -1, 47, 68, 110, 156, 154, 127, 98, 112,
+ 122, -1, 47, 158, 154, 110, 127, 98, 112, 122,
+ -1, 47, 154, 110, 127, 98, 112, 122, -1, 109,
+ 122, -1, -1, 38, 21, 21, 9, 110, 119, 114,
+ 10, -1, 120, 20, -1, 20, -1, 1, -1, 139,
+ -1, 139, 42, 139, -1, 139, 43, 139, -1, 139,
+ 40, 139, -1, 139, 41, 126, -1, 139, 47, 139,
+ -1, 139, 49, 139, -1, -1, 44, 112, -1, 45,
+ 154, 127, 98, 112, 121, -1, -1, 46, 109, -1,
+ -1, -1, 120, -1, -1, 139, -1, 139, -1, 139,
+ -1, 124, -1, 126, -1, 21, -1, -1, -1, -1,
+ -1, 21, -1, -1, 24, -1, -1, 71, 24, -1,
+ 71, -1, 71, 24, -1, 71, -1, 109, -1, 20,
+ -1, 139, 75, 139, -1, 139, 74, 139, -1, 139,
+ 73, 139, -1, 140, -1, 140, 77, -1, 140, 77,
+ 149, -1, 149, -1, 58, 163, 140, -1, 56, 99,
+ 163, 139, 98, -1, 149, 97, 143, 154, 153, 98,
+ -1, 149, 97, 143, -1, 22, 163, 152, -1, 23,
+ 163, 99, 153, 98, -1, 58, 152, -1, 56, 99,
+ 153, 98, -1, -1, 31, 132, 109, 142, 152, -1,
+ 22, -1, 158, -1, 162, 9, 139, 20, 10, -1,
+ 158, 11, 139, 12, -1, 149, 97, 11, 139, 12,
+ -1, 144, 11, 139, 12, -1, 158, 9, 139, 20,
+ 10, -1, 149, 97, 9, 139, 20, 10, -1, 144,
+ 9, 139, 20, 10, -1, 149, 97, 99, 98, -1,
+ 149, 97, 99, 139, 98, -1, 144, 154, 139, 98,
+ -1, 144, 154, 98, -1, 99, 139, 98, 11, 139,
+ 12, -1, 27, 11, 139, 12, -1, 99, 98, 11,
+ 139, 12, -1, 149, 78, 149, -1, 149, 92, 149,
+ -1, 149, 61, 149, -1, 149, 62, 149, -1, 149,
+ 86, 149, -1, 149, 59, 149, -1, 149, 60, 149,
+ -1, 149, 85, 149, -1, 149, 84, 149, -1, 149,
+ 52, 149, -1, 149, 83, 149, -1, 149, 82, 149,
+ -1, 149, 81, 149, -1, 149, 87, 149, -1, 13,
+ 149, -1, 14, 149, -1, 88, 149, -1, 89, 149,
+ -1, 149, 94, -1, 149, 93, -1, 96, 149, -1,
+ 95, 149, -1, 11, 139, 12, -1, 11, 12, -1,
+ 65, 139, 20, 10, -1, 65, 20, 10, -1, 37,
+ 132, 135, 136, 109, -1, 64, 149, -1, 64, 109,
+ -1, 64, 21, 154, 98, -1, 64, 21, 154, 139,
+ 98, -1, 64, 158, 154, 98, -1, 64, 158, 154,
+ 139, 98, -1, 145, -1, 146, -1, 147, -1, 148,
+ -1, 149, 79, 149, 80, 149, -1, 90, 149, -1,
+ 150, -1, 67, 149, -1, 99, 139, 98, -1, 27,
+ -1, 99, 98, -1, 158, -1, 162, -1, 160, -1,
+ 159, -1, 161, -1, 144, -1, 159, 11, 139, 12,
+ -1, 159, 9, 139, 20, 10, -1, 24, -1, 157,
+ -1, 157, 154, 98, -1, 157, 154, 139, 98, -1,
+ 66, 21, 152, -1, 51, -1, 51, 149, -1, 76,
+ 140, -1, 57, -1, 57, 109, -1, 57, 149, -1,
+ 70, -1, 70, 149, -1, 30, -1, 30, 149, -1,
+ 54, -1, 54, 99, 98, -1, 28, -1, 28, 99,
+ 98, -1, 29, -1, 55, 99, 98, -1, 55, 99,
+ 139, 98, -1, 25, 99, 140, 98, -1, 21, -1,
+ 141, -1, 53, -1, 32, -1, 68, 151, 137, -1,
+ 68, 151, -1, 99, 139, 98, -1, 99, 98, -1,
+ 158, -1, 160, -1, 159, -1, -1, 140, -1, -1,
+ 139, -1, 99, -1, -1, 27, 155, 99, -1, 158,
+ -1, 19, 163, -1, 15, 163, -1, 16, 163, -1,
+ 17, 163, -1, 63, 163, -1, 18, 163, -1, 21,
+ -1, 158, -1, 109, -1, 26, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
@@ -196,11 +196,11 @@ static const yytype_uint16 yyrline[] =
1077, 1085, 1097, 1098, 1099, 1100, 1101, 1106, 1110, 1112,
1116, 1121, 1123, 1128, 1130, 1132, 1134, 1136, 1138, 1140,
1149, 1160, 1162, 1164, 1169, 1182, 1187, 1192, 1196, 1200,
- 1204, 1208, 1212, 1216, 1220, 1222, 1225, 1229, 1235, 1238,
- 1247, 1253, 1258, 1259, 1260, 1266, 1270, 1278, 1285, 1290,
- 1295, 1297, 1299, 1304, 1306, 1311, 1312, 1316, 1319, 1318,
- 1326, 1330, 1336, 1342, 1348, 1354, 1360, 1367, 1369, 1371,
- 1374
+ 1204, 1208, 1212, 1216, 1220, 1222, 1225, 1229, 1235, 1237,
+ 1242, 1245, 1254, 1260, 1265, 1266, 1267, 1273, 1277, 1285,
+ 1292, 1297, 1302, 1304, 1306, 1311, 1313, 1318, 1319, 1323,
+ 1326, 1325, 1333, 1337, 1343, 1349, 1355, 1361, 1367, 1374,
+ 1376, 1378, 1381
};
#endif
@@ -213,11 +213,11 @@ static const char *const yytname[] =
"GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "'{'", "'}'", "'['",
"']'", "'-'", "'+'", "'$'", "'@'", "'%'", "'*'", "'&'", "';'", "WORD",
"METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST",
- "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL",
- "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL", "IF",
- "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT",
- "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP",
- "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
+ "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT",
+ "LABEL", "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL",
+ "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN",
+ "DEFAULT", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC",
+ "UNIOP", "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
"HASHBRACK", "NOAMP", "LOCAL", "MY", "MYSUB", "REQUIRE", "COLONATTR",
"PREC_LOW", "DOROP", "OROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'",
"':'", "DORDOR", "OROR", "ANDAND", "BITOROP", "BITANDOP", "SHIFTOP",
@@ -248,38 +248,39 @@ static const yytype_uint16 yytoknum[] =
283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, 318, 44, 319, 63, 58,
- 320, 321, 322, 323, 324, 325, 326, 33, 126, 327,
- 328, 329, 330, 331, 332, 333, 334, 41, 40, 335
+ 313, 314, 315, 316, 317, 318, 319, 44, 320, 63,
+ 58, 321, 322, 323, 324, 325, 326, 327, 33, 126,
+ 328, 329, 330, 331, 332, 333, 334, 335, 41, 40,
+ 336
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 100, 102, 101, 103, 101, 104, 101, 105, 101,
- 106, 101, 107, 101, 108, 109, 110, 111, 112, 113,
- 113, 114, 114, 115, 115, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 118, 116, 116, 116, 119,
- 119, 119, 119, 119, 119, 119, 119, 120, 120, 120,
- 121, 121, 122, 123, 123, 124, 124, 125, 126, 127,
- 128, 129, 129, 130, 131, 132, 133, 134, 134, 135,
- 135, 135, 136, 136, 137, 137, 138, 138, 138, 138,
- 139, 139, 139, 140, 140, 140, 140, 140, 140, 140,
- 140, 141, 140, 142, 142, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 145, 145, 145, 145, 145, 145, 145,
- 145, 146, 146, 146, 146, 146, 147, 147, 147, 147,
- 147, 147, 148, 148, 148, 148, 148, 148, 148, 148,
- 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
- 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
- 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
- 148, 148, 148, 148, 148, 148, 149, 149, 150, 150,
- 150, 150, 150, 151, 151, 152, 152, 153, 154, 153,
- 155, 156, 157, 158, 159, 160, 161, 162, 162, 162,
- 162
+ 0, 101, 103, 102, 104, 102, 105, 102, 106, 102,
+ 107, 102, 108, 102, 109, 110, 111, 112, 113, 114,
+ 114, 115, 115, 116, 116, 117, 117, 117, 117, 117,
+ 117, 118, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 119, 117, 117, 117, 120,
+ 120, 120, 120, 120, 120, 120, 120, 121, 121, 121,
+ 122, 122, 123, 124, 124, 125, 125, 126, 127, 128,
+ 129, 130, 130, 131, 132, 133, 134, 135, 135, 136,
+ 136, 136, 137, 137, 138, 138, 139, 139, 139, 139,
+ 140, 140, 140, 141, 141, 141, 141, 141, 141, 141,
+ 141, 142, 141, 143, 143, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 146, 146, 146, 146, 146, 146, 146,
+ 146, 147, 147, 147, 147, 147, 148, 148, 148, 148,
+ 148, 148, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 150, 150,
+ 151, 151, 151, 151, 151, 152, 152, 153, 153, 154,
+ 155, 154, 156, 157, 158, 159, 160, 161, 162, 163,
+ 163, 163, 163
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -304,10 +305,10 @@ static const yytype_uint8 yyr2[] =
3, 1, 2, 1, 1, 1, 1, 1, 1, 4,
5, 1, 1, 3, 4, 3, 1, 2, 2, 1,
2, 2, 1, 2, 1, 2, 1, 3, 1, 3,
- 4, 4, 1, 1, 1, 1, 3, 2, 3, 2,
- 1, 1, 1, 0, 1, 0, 1, 1, 0, 3,
- 1, 2, 2, 2, 2, 2, 2, 1, 1, 1,
- 1
+ 1, 3, 4, 4, 1, 1, 1, 1, 3, 2,
+ 3, 2, 1, 1, 1, 0, 1, 0, 1, 1,
+ 0, 3, 1, 2, 2, 2, 2, 2, 2, 1,
+ 1, 1, 1
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -315,729 +316,747 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 2, 4, 6, 8, 10, 12, 0, 15, 205,
+ 0, 2, 4, 6, 8, 10, 12, 0, 15, 207,
0, 0, 0, 19, 1, 19, 0, 0, 0, 0,
- 0, 0, 0, 0, 192, 0, 0, 171, 0, 161,
- 188, 184, 74, 195, 74, 176, 194, 186, 0, 0,
- 179, 203, 0, 0, 0, 0, 0, 0, 182, 0,
- 0, 0, 0, 0, 0, 0, 206, 89, 193, 168,
- 152, 153, 154, 155, 92, 158, 5, 172, 163, 166,
- 165, 167, 164, 15, 7, 49, 48, 25, 75, 73,
- 0, 73, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 26, 60, 9, 0, 50, 0, 11, 22, 21,
- 0, 0, 142, 0, 133, 134, 217, 220, 219, 218,
- 212, 213, 214, 216, 211, 203, 0, 0, 0, 185,
- 0, 77, 177, 0, 0, 205, 180, 181, 217, 204,
- 99, 218, 0, 215, 192, 147, 146, 163, 0, 0,
- 203, 159, 0, 197, 200, 202, 201, 183, 178, 135,
- 136, 157, 140, 139, 162, 0, 0, 0, 0, 90,
- 0, 0, 208, 207, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 194, 0, 0, 171, 0, 161,
+ 188, 190, 184, 74, 197, 74, 176, 196, 186, 0,
+ 0, 179, 205, 0, 0, 0, 0, 0, 0, 182,
+ 0, 0, 0, 0, 0, 0, 0, 208, 89, 195,
+ 168, 152, 153, 154, 155, 92, 158, 5, 172, 163,
+ 166, 165, 167, 164, 15, 7, 49, 48, 25, 75,
+ 73, 0, 73, 0, 0, 0, 0, 0, 0, 0,
+ 0, 73, 26, 60, 9, 0, 50, 0, 11, 22,
+ 21, 0, 0, 142, 0, 133, 134, 219, 222, 221,
+ 220, 214, 215, 216, 218, 213, 205, 0, 0, 0,
+ 0, 185, 0, 77, 177, 0, 0, 207, 180, 181,
+ 219, 206, 99, 220, 0, 217, 194, 147, 146, 163,
+ 0, 0, 205, 159, 0, 199, 202, 204, 203, 183,
+ 178, 135, 136, 157, 140, 139, 162, 0, 0, 0,
+ 0, 90, 0, 0, 210, 209, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 138, 137, 0, 0, 0, 0, 0, 0, 0, 19,
- 72, 0, 0, 31, 15, 15, 15, 15, 15, 15,
- 0, 15, 15, 37, 0, 0, 44, 47, 0, 0,
- 0, 0, 0, 0, 24, 23, 20, 141, 97, 205,
- 0, 0, 101, 78, 79, 187, 189, 0, 0, 0,
- 93, 0, 0, 144, 0, 175, 199, 0, 83, 196,
- 0, 160, 88, 87, 86, 91, 0, 0, 0, 115,
- 0, 128, 124, 125, 121, 122, 119, 0, 131, 130,
- 129, 127, 126, 123, 132, 120, 0, 0, 103, 0,
- 96, 104, 173, 0, 0, 0, 0, 0, 0, 0,
- 71, 0, 76, 77, 0, 0, 65, 0, 0, 0,
- 0, 0, 15, 16, 0, 77, 61, 53, 54, 67,
- 51, 52, 55, 56, 0, 191, 117, 203, 81, 0,
- 190, 100, 0, 148, 0, 150, 0, 143, 198, 82,
- 0, 0, 0, 108, 209, 114, 0, 0, 0, 112,
- 0, 205, 174, 0, 106, 0, 169, 0, 14, 27,
- 79, 15, 30, 0, 0, 66, 0, 0, 68, 70,
- 0, 0, 210, 64, 69, 0, 0, 50, 0, 0,
- 0, 79, 98, 102, 80, 145, 94, 149, 151, 118,
- 0, 111, 156, 0, 107, 113, 0, 109, 170, 105,
- 0, 45, 203, 62, 62, 0, 0, 0, 0, 65,
- 0, 0, 0, 0, 116, 110, 95, 85, 84, 28,
- 19, 0, 0, 0, 18, 57, 57, 0, 60, 0,
- 0, 0, 36, 29, 0, 32, 60, 60, 19, 0,
- 0, 33, 34, 0, 43, 62, 60, 35, 46, 38,
- 39, 0, 58, 0, 60, 0, 42, 17, 0, 41,
- 0, 0, 0, 57, 40, 59
+ 0, 0, 138, 137, 0, 0, 0, 0, 0, 0,
+ 0, 19, 72, 0, 0, 31, 15, 15, 15, 15,
+ 15, 15, 0, 15, 15, 37, 0, 0, 44, 47,
+ 0, 0, 0, 0, 0, 0, 24, 23, 20, 141,
+ 97, 207, 0, 0, 189, 101, 78, 79, 187, 191,
+ 0, 0, 0, 93, 0, 0, 144, 0, 175, 201,
+ 0, 83, 198, 0, 160, 88, 87, 86, 91, 0,
+ 0, 0, 115, 0, 128, 124, 125, 121, 122, 119,
+ 0, 131, 130, 129, 127, 126, 123, 132, 120, 0,
+ 0, 103, 0, 96, 104, 173, 0, 0, 0, 0,
+ 0, 0, 0, 71, 0, 76, 77, 0, 0, 65,
+ 0, 0, 0, 0, 0, 15, 16, 0, 77, 61,
+ 53, 54, 67, 51, 52, 55, 56, 0, 193, 117,
+ 205, 81, 0, 192, 100, 0, 148, 0, 150, 0,
+ 143, 200, 82, 0, 0, 0, 108, 211, 114, 0,
+ 0, 0, 112, 0, 207, 174, 0, 106, 0, 169,
+ 0, 14, 27, 79, 15, 30, 0, 0, 66, 0,
+ 0, 68, 70, 0, 0, 212, 64, 69, 0, 0,
+ 50, 0, 0, 0, 79, 98, 102, 80, 145, 94,
+ 149, 151, 118, 0, 111, 156, 0, 107, 113, 0,
+ 109, 170, 105, 0, 45, 205, 62, 62, 0, 0,
+ 0, 0, 65, 0, 0, 0, 0, 116, 110, 95,
+ 85, 84, 28, 19, 0, 0, 0, 18, 57, 57,
+ 0, 60, 0, 0, 0, 36, 29, 0, 32, 60,
+ 60, 19, 0, 0, 33, 34, 0, 43, 62, 60,
+ 35, 46, 38, 39, 0, 58, 0, 60, 0, 42,
+ 17, 0, 41, 0, 0, 0, 57, 40, 59
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 7, 8, 9, 10, 11, 12, 13, 108, 15,
- 359, 405, 418, 100, 216, 98, 99, 285, 400, 94,
- 421, 206, 402, 354, 344, 298, 347, 356, 350, 281,
- 191, 120, 190, 283, 224, 309, 239, 399, 95, 57,
- 58, 307, 270, 59, 60, 61, 62, 63, 64, 65,
- 143, 130, 66, 164, 248, 351, 67, 68, 69, 70,
- 71, 72, 110
+ -1, 7, 8, 9, 10, 11, 12, 13, 109, 15,
+ 362, 408, 421, 101, 218, 99, 100, 288, 403, 95,
+ 424, 208, 405, 357, 347, 301, 350, 359, 353, 284,
+ 193, 122, 192, 286, 227, 312, 242, 402, 96, 58,
+ 59, 310, 273, 60, 61, 62, 63, 64, 65, 66,
+ 145, 132, 67, 166, 251, 354, 68, 69, 70, 71,
+ 72, 73, 111
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -374
+#define YYPACT_NINF -394
static const yytype_int16 yypact[] =
{
- 767, -374, -374, -374, -374, -374, -374, 43, -374, 2422,
- 38, 967, 876, -374, -374, -374, 1546, 2422, 2422, 667,
- 667, 667, 667, 667, -374, 667, 667, -374, -25, 85,
- -374, 2422, -374, -374, -374, 2422, -374, 3, 6, 16,
- 1370, 310, 667, 1458, 1632, 97, 2422, 68, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 1718, 160, 45, -374, 28,
- -374, -374, -374, -374, 2509, -374, -374, -12, 42, 56,
- -374, -374, 110, -374, -374, -374, -374, -374, -374, -374,
- 115, -374, -12, -12, -12, -12, 9, -12, -12, 38,
- -374, -374, 101, -374, 130, 1630, 876, -374, -374, -374,
- 421, 512, -374, 87, 335, 335, -374, -374, -374, -374,
- -374, -374, -374, -374, -374, 2422, 65, 2422, 2422, 327,
- 38, 141, 2509, 71, 1806, 310, -374, 327, 1281, 45,
- -374, 1206, 2422, -374, -12, -374, 327, 55, 163, 123,
- 2422, 327, 1894, 111, -374, -374, -374, 327, 45, 335,
- 335, 335, 224, 224, 177, 118, 2422, 2422, 2422, 2422,
- 2422, 2422, -374, -374, 1982, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- -374, -374, 59, 2070, 2422, 2422, 2422, 2422, 2422, -374,
- 172, 185, 192, -374, -374, -374, -374, -374, -374, -374,
- -12, -374, -374, -374, 185, 38, -374, -374, 2422, 2422,
- 2422, 2422, 2422, 2422, -374, -374, -374, -374, -374, 2422,
- -72, 98, -374, -374, 142, -374, -374, 271, 122, 2422,
- 45, 2158, 2246, -374, 211, -374, -374, 328, 206, -374,
- 2422, 227, 188, 188, -374, 2509, 167, 112, 161, -374,
- 407, 2587, 1531, 298, 409, 212, 2509, 2470, 1177, 1177,
- 1252, 1356, 1443, 1044, 335, 335, 2422, 2422, -374, 2334,
- -12, -374, -374, 420, 191, 144, 217, 152, 241, 603,
- -374, 38, -374, 141, 149, 245, 2422, 2422, 2422, 2422,
- 256, 1056, -374, -374, 2422, 141, -374, 160, -374, 160,
- 160, 160, 160, 160, 190, -374, -374, 2422, 264, 38,
- -374, -374, 425, -374, 498, -374, 511, -374, -374, -374,
- 155, 2422, 283, -374, -374, -374, 2422, 279, 196, -374,
- 518, 2422, -374, 284, -374, 285, -374, 286, -374, -374,
- 142, -374, -374, 281, 209, 160, 210, 233, 160, -374,
- 250, -12, -374, -374, -374, 251, 289, 1055, 2422, 2422,
- 257, 142, -374, -374, -374, -374, -374, -374, -374, -374,
- 202, -374, 2548, 351, -374, -374, 272, -374, -374, -374,
- 174, -374, 2422, -374, -374, 361, 361, 2422, 361, 2422,
- 274, 295, 361, 174, -374, -374, -374, -374, -374, -374,
- -374, 366, 361, 361, -374, 44, 44, 299, 101, 386,
- 361, 361, -374, -374, 694, -374, 101, 101, -374, 361,
- -12, -374, -374, 361, -374, -374, 101, -374, -374, -374,
- -374, 785, -374, 2422, 101, 1145, -374, -374, 312, -374,
- 313, 361, 361, 44, -374, -374
+ 683, -394, -394, -394, -394, -394, -394, 6, -394, 2536,
+ 16, 977, 885, -394, -394, -394, 1650, 2536, 2536, 220,
+ 220, 220, 220, 220, -394, 220, 220, -394, -97, 52,
+ -26, -394, 2536, -394, -394, -394, 2536, -394, -16, -2,
+ 10, 1472, 1383, 220, 1561, 1737, 13, 2536, 23, 2536,
+ 2536, 2536, 2536, 2536, 2536, 2536, 1824, 115, 39, -394,
+ 61, -394, -394, -394, -394, 2597, -394, -394, -12, 80,
+ 127, -394, -394, 111, -394, -394, -394, -394, -394, -394,
+ -394, 124, -394, -12, -12, -12, -12, 27, -12, -12,
+ 16, -394, -394, 102, -394, 132, 1559, 885, -394, -394,
+ -394, 424, 517, -394, 32, 681, 681, -394, -394, -394,
+ -394, -394, -394, -394, -394, -394, 2536, 59, 2536, 2536,
+ 64, 300, 16, 158, 2597, 85, 1913, 1383, -394, 300,
+ 1293, 39, -394, 1217, 2536, -394, -12, -394, 300, 73,
+ 185, 91, 2536, 300, 2002, 125, -394, -394, -394, 300,
+ 39, 681, 681, 681, 237, 237, 186, 112, 2536, 2536,
+ 2536, 2536, 2536, 2536, -394, -394, 2091, 2536, 2536, 2536,
+ 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+ 2536, 2536, -394, -394, 26, 2180, 2536, 2536, 2536, 2536,
+ 2536, -394, 177, 194, 195, -394, -394, -394, -394, -394,
+ -394, -394, -12, -394, -394, -394, 194, 16, -394, -394,
+ 2536, 2536, 2536, 2536, 2536, 2536, -394, -394, -394, -394,
+ -394, 2536, -17, 40, -394, -394, -394, 156, -394, -394,
+ 228, 133, 2536, 39, 2269, 2358, -394, 223, -394, -394,
+ 281, 206, -394, 2536, 225, 167, 167, -394, 2597, 180,
+ 54, 145, -394, 330, 2675, 246, 329, 505, 409, 2597,
+ 2558, 1055, 1055, 1264, 1369, 1457, 1013, 681, 681, 2536,
+ 2536, -394, 2447, -12, -394, -394, 333, 204, 96, 219,
+ 100, 238, 609, -394, 16, -394, 158, 60, 231, 2536,
+ 2536, 2536, 2536, 241, 1067, -394, -394, 2536, 158, -394,
+ 115, -394, 115, 115, 115, 115, 115, 159, -394, -394,
+ 2536, 235, 16, -394, -394, 336, -394, 410, -394, 503,
+ -394, -394, -394, 119, 2536, 252, -394, -394, -394, 2536,
+ 275, 144, -394, 516, 2536, -394, 258, -394, 260, -394,
+ 262, -394, -394, 156, -394, -394, 254, 178, 115, 192,
+ 193, 115, -394, 198, -12, -394, -394, -394, 218, 299,
+ 224, 2536, 2536, 226, 156, -394, -394, -394, -394, -394,
+ -394, -394, -394, 147, -394, 2636, 313, -394, -394, 244,
+ -394, -394, -394, 110, -394, 2536, -394, -394, 327, 327,
+ 2536, 327, 2536, 247, 248, 327, 110, -394, -394, -394,
+ -394, -394, -394, -394, 331, 327, 327, -394, 123, 123,
+ 249, 102, 358, 327, 327, -394, -394, 701, -394, 102,
+ 102, -394, 327, -12, -394, -394, 327, -394, -394, 102,
+ -394, -394, -394, -394, 793, -394, 2536, 102, 1157, -394,
+ -394, 282, -394, 284, 327, 327, 123, -394, -394
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -374, -374, -374, -374, -374, -374, -374, -374, 2, -57,
- -374, 2104, -374, -7, 369, 311, -6, -374, -374, -281,
- -372, -116, -373, -374, 25, -176, -253, -20, -374, -374,
- -1, 383, -374, 225, -239, -300, -374, 54, -9, -40,
- -374, -374, -374, -374, -374, -374, -374, -374, 77, -374,
- -374, -109, -122, -65, -374, -374, -374, 7, 417, 418,
- -374, -374, 37
+ -394, -394, -394, -394, -394, -394, -394, -394, 2, -57,
+ -394, -85, -394, -7, 372, 298, -1, -394, -394, -283,
+ -393, -102, -342, -394, 8, -169, -229, -39, -394, -394,
+ -15, 366, -394, 207, -196, -279, -394, 21, -9, -41,
+ -394, -394, -394, -394, -394, -394, -394, -394, 196, -394,
+ -394, -111, -123, -65, -394, -394, -394, 7, 354, 364,
+ -394, -394, 36
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -193
+#define YYTABLE_NINF -195
static const yytype_int16 yytable[] =
{
- 56, 129, 183, 228, 159, 93, 218, 103, 101, 148,
- 353, 403, 74, 92, 92, 162, 189, 194, 195, 196,
- 197, 199, 201, 202, 19, 305, 109, 109, 109, 109,
- 109, 235, 109, 109, 422, 139, 162, 160, 355, 161,
- 380, 360, 126, 14, 340, 135, 155, 73, 131, 109,
- 137, 184, 435, 185, 144, 162, 361, 111, 112, 113,
- 114, 393, 115, 116, 184, 186, 185, 187, 266, 231,
- 267, 445, 232, 117, 19, 129, 198, 220, 132, 133,
- 193, 268, 162, 19, 20, 21, 163, 419, 420, 204,
- 215, 203, 230, 200, 104, 105, 118, 304, 92, 217,
- 129, 123, 92, 92, 124, 390, 391, 163, 119, 221,
- 306, 346, 122, 349, 125, 227, 56, 127, 140, 188,
- 136, 159, 222, 141, 323, 147, 163, 149, 150, 151,
- 152, 153, 131, 237, 407, 292, 192, 286, 287, 288,
- 289, 290, 291, 234, 293, 294, 205, 242, 243, 244,
- 207, 246, 247, 163, 353, 250, 334, 269, 341, 156,
- 157, 158, 229, 219, 336, 223, 142, 369, 225, 342,
- 156, 157, 158, 233, 273, 274, 275, 276, 277, 278,
- 438, 238, 279, 73, 156, 157, 158, 322, 240, 271,
- 156, 157, 158, 280, 397, 156, 157, 158, 363, 297,
- 299, 300, 301, 302, 303, 331, 282, 296, 374, 376,
- 56, 333, 308, 284, 394, 241, 156, 157, 158, 311,
- 312, 317, 314, 316, 156, 157, 158, 156, 157, 158,
- 319, 320, 156, 157, 158, 358, 245, 335, 321, 156,
- 157, 158, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 327, 328, 324,
- 330, 337, 158, 156, 157, 158, 343, 129, 156, 157,
- 158, 19, 168, 401, 156, 157, 158, 345, 299, 348,
- 299, 92, 357, 339, 381, 348, 387, 362, 364, 156,
- 157, 158, 424, 371, 377, 378, 379, 352, 178, 373,
- 429, 430, 382, 179, 180, 181, 383, 384, 182, 389,
- 436, 365, 370, 156, 157, 158, -193, -193, 439, 73,
- 182, 16, 56, 17, 18, 19, 20, 21, 22, 23,
- 385, 128, 25, 26, 27, 28, 107, 29, 30, 31,
- 32, 33, 129, 156, 157, 158, 34, 386, 388, 348,
- 348, 156, 157, 158, 392, 433, 166, -193, 168, 169,
- 35, 395, 36, 37, 38, 39, 40, 41, 310, 396,
- 404, 410, 42, 43, 44, 45, 46, 47, 348, 48,
- 345, 97, 398, 177, 178, 49, 415, 168, 169, 179,
- 180, 181, 411, 414, 182, 398, 423, 50, 51, 52,
- 156, 157, 158, 372, 53, 54, 425, 214, 55, 441,
- 442, 431, 177, 178, 409, 440, 92, 121, 179, 180,
- 181, -13, 75, 182, 348, 318, 179, 180, 181, 295,
- 73, 182, 16, 92, 17, 18, 19, 20, 21, 22,
- 23, 76, 24, 25, 26, 27, 28, 413, 29, 30,
- 31, 32, 33, 77, 96, 78, 79, 34, 80, 81,
- 82, 83, 84, 85, 145, 146, 0, 86, 87, 88,
- 89, 35, 0, 36, 37, 38, 39, 40, 41, 156,
- 157, 158, 0, 42, 43, 44, 45, 46, 47, 90,
- 48, 0, 156, 157, 158, 178, 49, 156, 157, 158,
- 179, 180, 181, 0, 325, 182, 0, 0, 50, 51,
- 52, 0, -3, 75, 0, 53, 54, 332, 0, 55,
- 91, 73, 366, 16, 0, 17, 18, 19, 20, 21,
- 22, 23, 76, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 77, 96, 78, 79, 34, 80,
- 81, 82, 83, 84, 85, 0, 0, 0, 86, 87,
- 88, 89, 35, 0, 36, 37, 38, 39, 40, 41,
- 156, 157, 158, 0, 42, 43, 44, 45, 46, 47,
- 90, 48, 0, 156, 157, 158, 0, 49, 0, 0,
- 156, 157, 158, 0, 0, 367, 0, 0, 0, 50,
- 51, 52, 0, 0, 75, 0, 53, 54, 368, 0,
- 55, 91, 73, 338, 16, 375, 17, 18, 19, 20,
- 21, 22, 23, 76, 24, 25, 26, 27, 28, 0,
- 29, 30, 31, 32, 33, 77, 96, 78, 79, 34,
- 80, 81, 82, 83, 84, 85, 0, 0, 0, 86,
- 87, 88, 89, 35, 0, 36, 37, 38, 39, 40,
- 41, 0, 0, 0, 0, 42, 43, 44, 45, 46,
- 47, 90, 48, 0, 0, 0, 73, 0, 49, 0,
- 0, 0, 19, 0, 0, 0, 0, 0, 106, 0,
- 50, 51, 52, 107, 0, 75, 0, 53, 54, 0,
- 0, 55, 91, 73, 428, 16, 0, 17, 18, 19,
- 20, 21, 22, 23, 76, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 77, 96, 78, 79,
- 34, 80, 81, 82, 83, 84, 85, 0, 0, 0,
- 86, 87, 88, 89, 35, 0, 36, 37, 38, 39,
- 40, 41, 0, 0, 0, 0, 42, 43, 44, 45,
- 46, 47, 90, 48, 0, 0, 0, 0, 0, 49,
- 1, 2, 3, 4, 5, 6, 0, 0, 0, 0,
- 0, 50, 51, 52, 0, 0, 75, 0, 53, 54,
- 0, 0, 55, 91, 73, 437, 16, 0, 17, 18,
- 19, 20, 21, 22, 23, 76, 24, 25, 26, 27,
- 28, 0, 29, 30, 31, 32, 33, 77, 96, 78,
- 79, 34, 80, 81, 82, 83, 84, 85, 0, 0,
- 0, 86, 87, 88, 89, 35, 0, 36, 37, 38,
- 39, 40, 41, 0, 0, 0, 0, 42, 43, 44,
- 45, 46, 47, 90, 48, 0, 0, 0, 0, 0,
- 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 50, 51, 52, 0, 0, 75, 0, 53,
- 54, 0, 0, 55, 91, 73, 0, 16, 0, 17,
- 18, 19, 20, 21, 22, 23, 76, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 77, 96,
- 78, 79, 34, 80, 81, 82, 83, 84, 85, 0,
- 0, 0, 86, 87, 88, 89, 35, 0, 36, 37,
- 38, 39, 40, 41, 0, 0, 0, 0, 42, 43,
- 44, 45, 46, 47, 90, 48, 0, 0, 0, 0,
- 0, 49, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 50, 51, 52, 0, 0, 75, 0,
- 53, 54, 0, 0, 55, 91, 73, 0, 16, 0,
- 17, 18, 19, 20, 21, 22, 23, 76, 24, 25,
- 26, 27, 28, 0, 29, 30, 31, 32, 33, 77,
- 0, 78, 79, 34, 80, 81, 82, 83, 84, 85,
- 0, 0, 0, 86, 87, 88, 89, 35, 0, 36,
- 37, 38, 39, 40, 41, 0, 0, 0, 0, 42,
- 43, 44, 45, 46, 47, 90, 48, 0, 0, 0,
- 0, 0, 49, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 50, 51, 52, 75, 0, 0,
- 0, 53, 54, 0, 0, 55, 91, 16, 0, 17,
- 18, 19, 20, 21, 22, 23, -63, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 0, 0,
- 0, 0, 34, 0, 208, 209, 210, 211, 0, 0,
- 0, 212, 0, 213, 168, 169, 35, 0, 36, 37,
- 38, 39, 40, 41, 0, 0, 0, 0, 42, 43,
- 44, 45, 46, 47, 0, 48, 0, 156, 157, 158,
- 178, 49, 0, 0, 0, 179, 180, 181, 0, 0,
- 182, 0, 0, 50, 51, 52, 75, 0, 0, 0,
- 53, 54, -68, 0, 55, 0, 16, 0, 17, 18,
- 19, 20, 21, 22, 23, 0, 24, 25, 26, 27,
- 28, 0, 29, 30, 31, 32, 33, 0, 0, 0,
- 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 0, 36, 37, 38,
- 39, 40, 41, 0, 0, 0, -163, 42, 43, 44,
- 45, 46, 47, 0, 48, 184, 0, 185, -163, 0,
- 49, 0, 0, 0, 0, 0, -163, 0, 0, 0,
- 0, 0, 50, 51, 52, 166, 167, 168, 169, 53,
- 54, 0, -63, 55, 0, -163, -163, -163, -163, 0,
- 0, 0, -163, 0, -163, 0, 0, -163, 0, 174,
- 175, 176, 177, 178, -163, -163, -163, -163, 179, 180,
- 181, 0, 0, 182, 0, 0, 0, 0, -163, -163,
- -163, -192, -163, -163, -163, -163, -163, -163, -163, -163,
- -163, -163, -163, -192, 0, 0, 0, -163, -163, -163,
- 0, -192, -163, -163, 0, 0, 0, 0, 0, 0,
- 166, 167, 168, 169, 0, 0, 0, 0, 0, 0,
- -192, -192, -192, -192, 0, 0, 0, -192, 0, -192,
- 0, 0, -192, 0, 0, 175, 176, 177, 178, -192,
- -192, -192, -192, 179, 180, 181, 0, 0, 182, 0,
- 0, 0, 0, -192, -192, -192, 0, -192, -192, -192,
- -192, -192, -192, -192, -192, -192, -192, -192, 0, 0,
- 0, 0, -192, -192, -192, 0, 0, -192, -192, 73,
- 0, 16, 0, 17, 18, 19, 20, 21, 22, 23,
+ 57, 131, 118, 185, 231, 220, 14, 104, 102, 150,
+ 94, 356, 75, 93, 93, 164, 425, 191, 196, 197,
+ 198, 199, 201, 203, 204, 74, 110, 110, 110, 110,
+ 110, 238, 110, 110, 142, 269, 141, 270, 19, 20,
+ 21, 19, 19, 128, 219, 406, 137, 157, 271, 133,
+ 110, 139, 309, 448, 164, 146, 112, 113, 114, 115,
+ 161, 116, 117, 119, 383, 358, 326, 195, 363, 344,
+ 162, 234, 163, 120, 235, 131, 206, 222, 134, 135,
+ 345, 308, 186, 125, 187, 396, 438, 165, 164, 186,
+ 343, 187, 205, 233, 202, 200, 217, 126, 307, 93,
+ 164, 131, 364, 93, 93, 158, 159, 160, 337, 127,
+ 223, 237, 339, 158, 159, 160, 161, 230, 57, 74,
+ 190, 349, 144, 352, 225, 272, 165, 158, 159, 160,
+ 400, 372, 393, 394, 133, 240, 188, 295, 189, 289,
+ 290, 291, 292, 293, 294, 194, 296, 297, 207, 245,
+ 246, 247, 209, 249, 250, 356, 377, 253, 221, 397,
+ 165, 410, 224, 232, 158, 159, 160, 422, 423, 158,
+ 159, 160, 165, 158, 159, 160, 276, 277, 278, 279,
+ 280, 281, 226, 228, 282, 158, 159, 160, 158, 159,
+ 160, 274, 158, 159, 160, 236, 241, 243, 283, 366,
+ 325, 300, 302, 303, 304, 305, 306, 441, 334, 299,
+ 244, 379, 57, 105, 106, 285, 287, 158, 159, 160,
+ 158, 159, 160, 315, 336, 317, 319, 311, 121, 74,
+ 322, 314, 124, 320, 323, 19, 324, 129, 361, 338,
+ 138, 107, 160, 143, 327, 149, 108, 151, 152, 153,
+ 154, 155, 346, 158, 159, 160, 19, 365, 340, 367,
+ 330, 331, 374, 333, 210, 211, 212, 213, 380, 131,
+ 381, 214, 382, 215, 404, 385, 386, 158, 159, 160,
+ 348, 302, 351, 302, 93, 360, 342, 384, 351, 390,
+ 387, 388, 158, 159, 160, 376, 389, 158, 159, 160,
+ 355, 158, 159, 160, 409, -195, 411, 170, 171, 427,
+ 415, 158, 159, 160, 368, 373, 391, 432, 433, 392,
+ 419, 420, -68, 398, 395, 57, 313, 439, 429, 430,
+ -195, -195, 179, 180, 184, 442, 407, 435, 181, 182,
+ 183, 437, 399, 184, 131, 413, 414, 426, 158, 159,
+ 160, 418, 351, 351, 158, 159, 160, 248, 436, 446,
+ 447, 170, 171, 254, 255, 256, 257, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 428, 321,
+ 444, 351, 445, 348, 98, 401, 179, 180, 168, -195,
+ 170, 171, 181, 182, 183, 216, 417, 184, 401, 443,
+ 412, 123, 147, 158, 159, 160, 158, 159, 160, 158,
+ 159, 160, 148, 298, 434, 179, 180, 416, 0, 93,
+ 0, 181, 182, 183, -13, 76, 184, 351, 328, 0,
+ 0, 335, 0, 74, 369, 16, 93, 17, 18, 19,
+ 20, 21, 22, 23, 77, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 78, 97, 79,
+ 80, 35, 81, 82, 83, 84, 85, 86, 0, 0,
+ 170, 87, 88, 89, 90, 36, 0, 37, 38, 39,
+ 40, 41, 42, 158, 159, 160, 0, 43, 44, 45,
+ 46, 47, 48, 91, 49, 0, 180, 0, 0, 0,
+ 50, 181, 182, 183, 0, 0, 184, 0, 370, 0,
+ 0, 0, 51, 52, 53, 0, 0, -3, 76, 54,
+ 55, 0, 0, 56, 92, 375, 74, 0, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 77, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 78, 97, 79, 80, 35, 81, 82, 83, 84, 85,
+ 86, 0, 0, 0, 87, 88, 89, 90, 36, 0,
+ 37, 38, 39, 40, 41, 42, 158, 159, 160, 0,
+ 43, 44, 45, 46, 47, 48, 91, 49, 0, 158,
+ 159, 160, 180, 50, 0, 0, 0, 181, 182, 183,
+ 0, 371, 184, 0, 0, 51, 52, 53, 0, 0,
+ 76, 0, 54, 55, 378, 0, 56, 92, 74, 341,
+ 16, 0, 17, 18, 19, 20, 21, 22, 23, 77,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 78, 97, 79, 80, 35, 81, 82, 83,
+ 84, 85, 86, 0, 0, 0, 87, 88, 89, 90,
+ 36, 0, 37, 38, 39, 40, 41, 42, 0, 0,
+ 0, 0, 43, 44, 45, 46, 47, 48, 91, 49,
+ 0, 0, 0, 0, 0, 50, 1, 2, 3, 4,
+ 5, 6, 0, 0, 0, 0, 0, 51, 52, 53,
+ 0, 0, 76, 0, 54, 55, 0, 0, 56, 92,
+ 74, 431, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 77, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 78, 97, 79, 80, 35, 81,
+ 82, 83, 84, 85, 86, 0, 0, 0, 87, 88,
+ 89, 90, 36, 0, 37, 38, 39, 40, 41, 42,
+ 0, 0, 0, 0, 43, 44, 45, 46, 47, 48,
+ 91, 49, 0, 181, 182, 183, 0, 50, 184, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
+ 52, 53, 0, 0, 76, 0, 54, 55, 0, 0,
+ 56, 92, 74, 440, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 77, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 78, 97, 79, 80,
+ 35, 81, 82, 83, 84, 85, 86, 0, 0, 0,
+ 87, 88, 89, 90, 36, 0, 37, 38, 39, 40,
+ 41, 42, 0, 0, 0, 0, 43, 44, 45, 46,
+ 47, 48, 91, 49, 0, 0, 0, 0, 0, 50,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 51, 52, 53, 0, 0, 76, 0, 54, 55,
+ 0, 0, 56, 92, 74, 0, 16, 0, 17, 18,
+ 19, 20, 21, 22, 23, 77, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 78, 97,
+ 79, 80, 35, 81, 82, 83, 84, 85, 86, 0,
+ 0, 0, 87, 88, 89, 90, 36, 0, 37, 38,
+ 39, 40, 41, 42, 0, 0, 0, 0, 43, 44,
+ 45, 46, 47, 48, 91, 49, 0, 0, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 52, 53, 0, 0, 76, 0,
+ 54, 55, 0, 0, 56, 92, 74, 0, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 77, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 78, 0, 79, 80, 35, 81, 82, 83, 84, 85,
+ 86, 0, 0, 0, 87, 88, 89, 90, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
+ 43, 44, 45, 46, 47, 48, 91, 49, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 53, 76, 0,
+ 0, 0, 54, 55, 170, 171, 56, 92, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, -63, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 180, 0, 0, 0, 35, 181, 182, 183, 0, 0,
+ 184, 0, 0, 0, 168, 169, 170, 171, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
+ 43, 44, 45, 46, 47, 48, 0, 49, 176, 177,
+ 178, 179, 180, 50, 0, 0, 0, 181, 182, 183,
+ 0, 0, 184, 0, 0, 51, 52, 53, 76, 0,
+ 0, 0, 54, 55, 0, 0, 56, 0, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, -163, 0, 0,
+ 43, 44, 45, 46, 47, 48, 186, 49, 187, -163,
+ 0, 0, 0, 50, 0, 0, 0, -163, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 53, 0, 0,
+ 0, 0, 54, 55, 0, -63, 56, -163, -163, -163,
+ -163, 0, 0, 0, -163, 0, -163, 0, 0, -163,
+ 0, 0, 0, 0, 0, 0, -163, -163, -163, -163,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -163, -163, -163, -194, -163, -163, -163, -163, -163, -163,
+ -163, -163, -163, -163, -163, -194, 0, 0, 0, -163,
+ -163, -163, 0, -194, -163, -163, 0, 0, 0, 0,
+ 0, 0, 0, 168, 169, 170, 171, 0, 0, 0,
+ 0, 0, 0, -194, -194, -194, -194, 0, 0, 0,
+ -194, 0, -194, 0, 0, -194, 0, 0, 177, 178,
+ 179, 180, -194, -194, -194, -194, 181, 182, 183, 0,
+ 0, 184, 0, 0, 0, 0, -194, -194, -194, 0,
+ -194, -194, -194, -194, -194, -194, -194, -194, -194, -194,
+ -194, 0, 0, 0, 0, -194, -194, -194, 0, 0,
+ -194, -194, 74, 0, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 0, 130, 25, 26, 27, 28, 108,
+ 29, 30, 31, 32, 33, 34, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 0, 0, 168, 169,
+ 170, 171, 0, 0, 36, 0, 37, 38, 39, 40,
+ 41, 42, 0, 0, 0, 0, 43, 44, 45, 46,
+ 47, 48, 0, 49, 178, 179, 180, 0, 0, 50,
+ 0, 181, 182, 183, 0, 0, 184, 0, 0, 0,
+ 0, 51, 52, 53, 0, 0, 0, 0, 54, 55,
+ 0, 74, 56, 16, 0, 17, 18, 19, 20, 21,
+ 22, 23, 0, 24, 25, 26, 27, 28, 0, 29,
+ 30, 31, 32, 33, 34, 0, 0, 0, 0, 35,
+ 0, 0, 0, 0, 0, 0, 168, 169, 170, 171,
+ 0, 0, 0, 36, 0, 37, 38, 39, 40, 41,
+ 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
+ 48, 0, 49, 179, 180, 0, 0, 0, 50, 181,
+ 182, 183, 0, 0, 184, 0, 0, 0, 0, 0,
+ 51, 52, 53, 0, 0, 0, 0, 54, 55, 0,
+ 74, 56, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 0, 136, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 0, 0, 0, 0, 35, 210,
+ 211, 212, 213, 0, 0, 0, 214, 0, 215, 0,
+ 0, 0, 36, 0, 37, 38, 39, 40, 41, 42,
+ 0, 0, 0, 0, 43, 44, 45, 46, 47, 48,
+ 0, 49, 158, 159, 160, 0, 0, 50, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
+ 52, 53, 0, 0, 0, 0, 54, 55, 0, 0,
+ 56, 16, 103, 17, 18, 19, 20, 21, 22, 23,
0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 32, 33, 0, 0, 0, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 166, 167, 168, 169, 0, 0,
- 35, 0, 36, 37, 38, 39, 40, 41, 0, 0,
- 0, 0, 42, 43, 44, 45, 46, 47, 0, 48,
- 176, 177, 178, 0, 0, 49, 0, 179, 180, 181,
- 0, 0, 182, 0, 0, 0, 0, 50, 51, 52,
- 0, 0, 0, 0, 53, 54, 0, 73, 55, 16,
- 0, 17, 18, 19, 20, 21, 22, 23, 0, 134,
- 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 0, 166, 167, 168, 169, 0, 0, 0, 35, 0,
- 36, 37, 38, 39, 40, 41, 0, 0, 0, 0,
- 42, 43, 44, 45, 46, 47, 0, 48, 177, 178,
- 0, 0, 0, 49, 179, 180, 181, 0, 0, 182,
- 0, 0, 0, 0, 0, 50, 51, 52, 0, 0,
- 0, 0, 53, 54, 0, 0, 55, 16, 102, 17,
- 18, 19, 20, 21, 22, 23, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 0, 0,
- 0, 0, 34, 0, 0, 0, 0, 0, 0, -193,
- 0, 168, 169, 0, 0, 0, 35, 0, 36, 37,
- 38, 39, 40, 41, 0, 0, 0, 0, 42, 43,
- 44, 45, 46, 47, 0, 48, 177, 178, 0, 0,
- 0, 49, 179, 180, 181, 0, 0, 182, 0, 0,
- 0, 0, 0, 50, 51, 52, 0, 0, 0, 0,
- 53, 54, 0, 16, 55, 17, 18, 19, 20, 21,
- 22, 23, 138, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 0, 0, 0, 0, 34, 208,
- 209, 210, 211, 0, 0, 0, 212, 0, 213, 0,
- 0, 0, 35, 0, 36, 37, 38, 39, 40, 41,
- 0, 0, 0, 0, 42, 43, 44, 45, 46, 47,
- 0, 48, 156, 157, 158, 0, 0, 49, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
- 51, 52, 0, 0, 0, 0, 53, 54, 0, 16,
- 55, 17, 18, 19, 20, 21, 22, 23, 0, 24,
- 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
- 36, 37, 38, 39, 40, 41, 0, 0, 0, 0,
- 42, 43, 44, 45, 46, 47, 0, 48, 0, 0,
- 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 51, 52, 0, 0,
- 0, 0, 53, 54, 0, 154, 55, 16, 0, 17,
- 18, 19, 20, 21, 22, 23, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 0, 0,
- 0, 0, 34, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 0, 36, 37,
- 38, 39, 40, 41, 0, 0, 0, 0, 42, 43,
- 44, 45, 46, 47, 0, 48, 0, 0, 0, 0,
- 0, 49, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 50, 51, 52, 0, 0, 0, 0,
- 53, 54, 0, 226, 55, 16, 0, 17, 18, 19,
+ 32, 33, 34, 0, 0, 0, 0, 35, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 36, 0, 37, 38, 39, 40, 41, 42, 0,
+ 0, 0, 0, 43, 44, 45, 46, 47, 48, 0,
+ 49, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 51, 52,
+ 53, 0, 0, 0, 0, 54, 55, 0, 16, 56,
+ 17, 18, 19, 20, 21, 22, 23, 140, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
+ 43, 44, 45, 46, 47, 48, 0, 49, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 53, 0, 0,
+ 0, 0, 54, 55, 0, 16, 56, 17, 18, 19,
20, 21, 22, 23, 0, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 0, 0, 0, 0,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 35, 0, 36, 37, 38, 39,
- 40, 41, 0, 0, 0, 0, 42, 43, 44, 45,
- 46, 47, 0, 48, 0, 0, 0, 0, 0, 49,
+ 0, 29, 30, 31, 32, 33, 34, 0, 0, 0,
+ 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 36, 0, 37, 38, 39,
+ 40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
+ 46, 47, 48, 0, 49, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 51, 52, 53, 0, 0, 0, 0, 54,
+ 55, 0, 156, 56, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 0, 37, 38, 39, 40,
+ 41, 42, 0, 0, 0, 0, 43, 44, 45, 46,
+ 47, 48, 0, 49, 0, 0, 0, 0, 0, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 50, 51, 52, 0, 0, 0, 0, 53, 54,
- 0, 236, 55, 16, 0, 17, 18, 19, 20, 21,
+ 0, 51, 52, 53, 0, 0, 0, 0, 54, 55,
+ 0, 229, 56, 16, 0, 17, 18, 19, 20, 21,
22, 23, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 0, 0, 0, 0, 34, 0,
+ 30, 31, 32, 33, 34, 0, 0, 0, 0, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 36, 0, 37, 38, 39, 40, 41,
+ 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
+ 48, 0, 49, 0, 0, 0, 0, 0, 50, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 36, 37, 38, 39, 40, 41,
- 0, 0, 0, 0, 42, 43, 44, 45, 46, 47,
- 0, 48, 0, 0, 0, 0, 0, 49, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
- 51, 52, 0, 0, 0, 0, 53, 54, 0, 249,
- 55, 16, 0, 17, 18, 19, 20, 21, 22, 23,
+ 51, 52, 53, 0, 0, 0, 0, 54, 55, 0,
+ 239, 56, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 0, 0, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 36, 0, 37, 38, 39, 40, 41, 42,
+ 0, 0, 0, 0, 43, 44, 45, 46, 47, 48,
+ 0, 49, 0, 0, 0, 0, 0, 50, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
+ 52, 53, 0, 0, 0, 0, 54, 55, 0, 252,
+ 56, 16, 0, 17, 18, 19, 20, 21, 22, 23,
0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 32, 33, 0, 0, 0, 0, 34, 0, 0, 0,
+ 32, 33, 34, 0, 0, 0, 0, 35, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 36, 0, 37, 38, 39, 40, 41, 42, 0,
+ 0, 0, 0, 43, 44, 45, 46, 47, 48, 0,
+ 49, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 51, 52,
+ 53, 0, 0, 0, 0, 54, 55, 0, 275, 56,
+ 16, 0, 17, 18, 19, 20, 21, 22, 23, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 0, 0, 0, 0, 35, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 0, 36, 37, 38, 39, 40, 41, 0, 0,
- 0, 0, 42, 43, 44, 45, 46, 47, 0, 48,
- 0, 0, 0, 0, 0, 49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 50, 51, 52,
- 0, 0, 0, 0, 53, 54, 0, 272, 55, 16,
+ 36, 0, 37, 38, 39, 40, 41, 42, 0, 0,
+ 0, 0, 43, 44, 45, 46, 47, 48, 0, 49,
+ 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
+ 0, 0, 0, 0, 54, 55, 0, 316, 56, 16,
0, 17, 18, 19, 20, 21, 22, 23, 0, 24,
25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
- 36, 37, 38, 39, 40, 41, 0, 0, 0, 0,
- 42, 43, 44, 45, 46, 47, 0, 48, 0, 0,
- 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 51, 52, 0, 0,
- 0, 0, 53, 54, 0, 313, 55, 16, 0, 17,
+ 34, 0, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
+ 0, 37, 38, 39, 40, 41, 42, 0, 0, 0,
+ 0, 43, 44, 45, 46, 47, 48, 0, 49, 0,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 51, 52, 53, 0,
+ 0, 0, 0, 54, 55, 0, 318, 56, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
+ 43, 44, 45, 46, 47, 48, 0, 49, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 53, 0, 0,
+ 0, 0, 54, 55, 0, 332, 56, 16, 0, 17,
18, 19, 20, 21, 22, 23, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 0, 0,
- 0, 0, 34, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 0, 36, 37,
- 38, 39, 40, 41, 0, 0, 0, 0, 42, 43,
- 44, 45, 46, 47, 0, 48, 0, 0, 0, 0,
- 0, 49, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 50, 51, 52, 0, 0, 0, 0,
- 53, 54, 0, 315, 55, 16, 0, 17, 18, 19,
- 20, 21, 22, 23, 0, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 0, 0, 0, 0,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 35, 0, 36, 37, 38, 39,
- 40, 41, 0, 0, 0, 0, 42, 43, 44, 45,
- 46, 47, 0, 48, 0, 0, 0, 0, 0, 49,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 0,
+ 0, 0, 0, 35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 36, 0, 37,
+ 38, 39, 40, 41, 42, 0, 0, 0, 0, 43,
+ 44, 45, 46, 47, 48, 0, 49, 0, 0, 0,
+ 167, 0, 50, 0, 0, 0, 0, 168, 169, 170,
+ 171, 0, 0, 0, 51, 52, 53, 0, 0, 0,
+ 0, 54, 55, 0, 0, 56, 172, 173, 329, 174,
+ 175, 176, 177, 178, 179, 180, 0, 0, 0, 167,
+ 181, 182, 183, 0, 0, 184, 168, 169, 170, 171,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 50, 51, 52, 0, 0, 0, 0, 53, 54,
- 0, 329, 55, 16, 0, 17, 18, 19, 20, 21,
- 22, 23, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 0, 0, 0, 0, 34, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 36, 37, 38, 39, 40, 41,
- 0, 0, 0, 0, 42, 43, 44, 45, 46, 47,
- 406, 48, 408, 0, 0, 0, 412, 49, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 417, 0, 50,
- 51, 52, 0, 0, 426, 427, 53, 54, 0, 0,
- 55, 165, 0, 432, 0, 0, 0, 434, 166, 167,
- 168, 169, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 443, 444, 170, 171, 326,
- 172, 173, 174, 175, 176, 177, 178, 0, 0, 0,
- 165, 179, 180, 181, 0, 0, 182, 166, 167, 168,
- 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 170, 171, 0, 172,
- 173, 174, 175, 176, 177, 178, 0, 0, 0, 165,
- 179, 180, 181, 0, 0, 182, 166, 167, 168, 169,
+ 0, 0, 0, 0, 0, 172, 173, 0, 174, 175,
+ 176, 177, 178, 179, 180, 0, 0, 0, 167, 181,
+ 182, 183, 0, 0, 184, 168, 169, 170, 171, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 171, 0, 172, 173,
- 174, 175, 176, 177, 178, 0, 0, 0, -193, 179,
- 180, 181, 0, 0, 182, 166, 167, 168, 169, 0,
+ 0, 0, 0, 0, 0, 173, 0, 174, 175, 176,
+ 177, 178, 179, 180, 0, 0, 0, -195, 181, 182,
+ 183, 0, 0, 184, 168, 169, 170, 171, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 172, 173, 174,
- 175, 176, 177, 178, 0, 0, 0, 0, 179, 180,
- 181, 0, 0, 182
+ 0, 0, 0, 0, 0, 0, 174, 175, 176, 177,
+ 178, 179, 180, 0, 0, 0, 0, 181, 182, 183,
+ 0, 0, 184
};
static const yytype_int16 yycheck[] =
{
- 9, 41, 67, 125, 76, 11, 115, 16, 15, 49,
- 291, 384, 10, 11, 12, 27, 73, 82, 83, 84,
- 85, 86, 87, 88, 15, 97, 19, 20, 21, 22,
- 23, 140, 25, 26, 406, 44, 27, 9, 291, 11,
- 340, 294, 40, 0, 283, 43, 55, 9, 41, 42,
- 43, 9, 425, 11, 47, 27, 295, 20, 21, 22,
- 23, 361, 25, 26, 9, 9, 11, 11, 9, 134,
- 11, 443, 137, 98, 15, 115, 67, 117, 41, 42,
- 81, 22, 27, 15, 16, 17, 98, 43, 44, 90,
- 96, 89, 132, 86, 17, 18, 11, 219, 96, 12,
- 140, 98, 100, 101, 98, 358, 359, 98, 31, 118,
- 12, 287, 35, 289, 98, 124, 125, 40, 21, 9,
- 43, 76, 120, 46, 12, 48, 98, 50, 51, 52,
- 53, 54, 125, 142, 387, 200, 21, 194, 195, 196,
- 197, 198, 199, 20, 201, 202, 45, 156, 157, 158,
- 20, 160, 161, 98, 435, 164, 12, 98, 9, 72,
- 73, 74, 125, 98, 12, 24, 98, 12, 97, 20,
- 72, 73, 74, 10, 183, 184, 185, 186, 187, 188,
- 433, 70, 189, 9, 72, 73, 74, 20, 11, 182,
- 72, 73, 74, 21, 20, 72, 73, 74, 307, 208,
- 209, 210, 211, 212, 213, 270, 21, 205, 12, 331,
- 219, 20, 70, 21, 12, 97, 72, 73, 74, 97,
- 229, 10, 231, 232, 72, 73, 74, 72, 73, 74,
- 24, 240, 72, 73, 74, 292, 159, 20, 11, 72,
- 73, 74, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 266, 267, 98,
- 269, 20, 74, 72, 73, 74, 21, 307, 72, 73,
- 74, 15, 60, 382, 72, 73, 74, 286, 287, 288,
- 289, 279, 291, 281, 341, 294, 351, 97, 24, 72,
- 73, 74, 408, 10, 10, 10, 10, 290, 86, 20,
- 416, 417, 21, 91, 92, 93, 97, 97, 96, 20,
- 426, 309, 321, 72, 73, 74, 92, 93, 434, 9,
- 96, 11, 331, 13, 14, 15, 16, 17, 18, 19,
- 97, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 382, 72, 73, 74, 36, 97, 97, 358,
- 359, 72, 73, 74, 97, 420, 58, 59, 60, 61,
- 50, 10, 52, 53, 54, 55, 56, 57, 97, 97,
- 9, 97, 62, 63, 64, 65, 66, 67, 387, 69,
- 389, 12, 380, 85, 86, 75, 20, 60, 61, 91,
- 92, 93, 97, 400, 96, 393, 97, 87, 88, 89,
- 72, 73, 74, 326, 94, 95, 20, 96, 98, 97,
- 97, 418, 85, 86, 389, 435, 414, 34, 91, 92,
- 93, 0, 1, 96, 433, 97, 91, 92, 93, 204,
- 9, 96, 11, 431, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 393, 27, 28,
+ 9, 42, 99, 68, 127, 116, 0, 16, 15, 50,
+ 11, 294, 10, 11, 12, 27, 409, 74, 83, 84,
+ 85, 86, 87, 88, 89, 9, 19, 20, 21, 22,
+ 23, 142, 25, 26, 21, 9, 45, 11, 15, 16,
+ 17, 15, 15, 41, 12, 387, 44, 56, 22, 42,
+ 43, 44, 12, 446, 27, 48, 20, 21, 22, 23,
+ 77, 25, 26, 11, 343, 294, 12, 82, 297, 9,
+ 9, 136, 11, 99, 139, 116, 91, 118, 42, 43,
+ 20, 98, 9, 99, 11, 364, 428, 99, 27, 9,
+ 286, 11, 90, 134, 87, 68, 97, 99, 221, 97,
+ 27, 142, 298, 101, 102, 73, 74, 75, 12, 99,
+ 119, 20, 12, 73, 74, 75, 77, 126, 127, 9,
+ 9, 290, 99, 292, 122, 99, 99, 73, 74, 75,
+ 20, 12, 361, 362, 127, 144, 9, 202, 11, 196,
+ 197, 198, 199, 200, 201, 21, 203, 204, 46, 158,
+ 159, 160, 20, 162, 163, 438, 12, 166, 99, 12,
+ 99, 390, 98, 127, 73, 74, 75, 44, 45, 73,
+ 74, 75, 99, 73, 74, 75, 185, 186, 187, 188,
+ 189, 190, 24, 98, 191, 73, 74, 75, 73, 74,
+ 75, 184, 73, 74, 75, 10, 71, 11, 21, 310,
+ 20, 210, 211, 212, 213, 214, 215, 436, 273, 207,
+ 98, 334, 221, 17, 18, 21, 21, 73, 74, 75,
+ 73, 74, 75, 232, 20, 234, 235, 71, 32, 9,
+ 24, 98, 36, 10, 243, 15, 11, 41, 295, 20,
+ 44, 21, 75, 47, 99, 49, 26, 51, 52, 53,
+ 54, 55, 21, 73, 74, 75, 15, 98, 20, 24,
+ 269, 270, 10, 272, 40, 41, 42, 43, 10, 310,
+ 10, 47, 10, 49, 385, 21, 98, 73, 74, 75,
+ 289, 290, 291, 292, 282, 294, 284, 344, 297, 354,
+ 98, 98, 73, 74, 75, 20, 98, 73, 74, 75,
+ 293, 73, 74, 75, 389, 59, 391, 61, 62, 411,
+ 395, 73, 74, 75, 312, 324, 98, 419, 420, 20,
+ 405, 406, 98, 10, 98, 334, 98, 429, 413, 414,
+ 93, 94, 86, 87, 97, 437, 9, 422, 92, 93,
+ 94, 426, 98, 97, 385, 98, 98, 98, 73, 74,
+ 75, 20, 361, 362, 73, 74, 75, 161, 423, 444,
+ 445, 61, 62, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 20, 98,
+ 98, 390, 98, 392, 12, 383, 86, 87, 59, 60,
+ 61, 62, 92, 93, 94, 97, 403, 97, 396, 438,
+ 392, 35, 48, 73, 74, 75, 73, 74, 75, 73,
+ 74, 75, 48, 206, 421, 86, 87, 396, -1, 417,
+ -1, 92, 93, 94, 0, 1, 97, 436, 98, -1,
+ -1, 98, -1, 9, 98, 11, 434, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ -1, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, -1, -1,
+ 61, 47, 48, 49, 50, 51, -1, 53, 54, 55,
+ 56, 57, 58, 73, 74, 75, -1, 63, 64, 65,
+ 66, 67, 68, 69, 70, -1, 87, -1, -1, -1,
+ 76, 92, 93, 94, -1, -1, 97, -1, 98, -1,
+ -1, -1, 88, 89, 90, -1, -1, 0, 1, 95,
+ 96, -1, -1, 99, 100, 329, 9, -1, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, -1, -1, -1, 47, 48, 49, 50, 51, -1,
+ 53, 54, 55, 56, 57, 58, 73, 74, 75, -1,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 73,
+ 74, 75, 87, 76, -1, -1, -1, 92, 93, 94,
+ -1, 98, 97, -1, -1, 88, 89, 90, -1, -1,
+ 1, -1, 95, 96, 98, -1, 99, 100, 9, 10,
+ 11, -1, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, -1, -1, -1, 47, 48, 49, 50,
+ 51, -1, 53, 54, 55, 56, 57, 58, -1, -1,
+ -1, -1, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, -1, -1, -1, -1, 76, 3, 4, 5, 6,
+ 7, 8, -1, -1, -1, -1, -1, 88, 89, 90,
+ -1, -1, 1, -1, 95, 96, -1, -1, 99, 100,
+ 9, 10, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, -1, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 47, 47, -1, 46, 47, 48,
- 49, 50, -1, 52, 53, 54, 55, 56, 57, 72,
- 73, 74, -1, 62, 63, 64, 65, 66, 67, 68,
- 69, -1, 72, 73, 74, 86, 75, 72, 73, 74,
- 91, 92, 93, -1, 97, 96, -1, -1, 87, 88,
- 89, -1, 0, 1, -1, 94, 95, 97, -1, 98,
- 99, 9, 97, 11, -1, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, -1, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, -1, -1, -1, 46, 47,
- 48, 49, 50, -1, 52, 53, 54, 55, 56, 57,
- 72, 73, 74, -1, 62, 63, 64, 65, 66, 67,
- 68, 69, -1, 72, 73, 74, -1, 75, -1, -1,
- 72, 73, 74, -1, -1, 97, -1, -1, -1, 87,
- 88, 89, -1, -1, 1, -1, 94, 95, 97, -1,
- 98, 99, 9, 10, 11, 97, 13, 14, 15, 16,
+ 39, 40, 41, 42, 43, -1, -1, -1, 47, 48,
+ 49, 50, 51, -1, 53, 54, 55, 56, 57, 58,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, 70, -1, 92, 93, 94, -1, 76, 97, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 88,
+ 89, 90, -1, -1, 1, -1, 95, 96, -1, -1,
+ 99, 100, 9, 10, 11, -1, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, -1, -1, -1, 46,
- 47, 48, 49, 50, -1, 52, 53, 54, 55, 56,
- 57, -1, -1, -1, -1, 62, 63, 64, 65, 66,
- 67, 68, 69, -1, -1, -1, 9, -1, 75, -1,
- -1, -1, 15, -1, -1, -1, -1, -1, 21, -1,
- 87, 88, 89, 26, -1, 1, -1, 94, 95, -1,
- -1, 98, 99, 9, 10, 11, -1, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- -1, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, -1, -1, -1,
- 46, 47, 48, 49, 50, -1, 52, 53, 54, 55,
- 56, 57, -1, -1, -1, -1, 62, 63, 64, 65,
- 66, 67, 68, 69, -1, -1, -1, -1, -1, 75,
- 3, 4, 5, 6, 7, 8, -1, -1, -1, -1,
- -1, 87, 88, 89, -1, -1, 1, -1, 94, 95,
- -1, -1, 98, 99, 9, 10, 11, -1, 13, 14,
+ 37, 38, 39, 40, 41, 42, 43, -1, -1, -1,
+ 47, 48, 49, 50, 51, -1, 53, 54, 55, 56,
+ 57, 58, -1, -1, -1, -1, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, -1, -1, -1, -1, 76,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 88, 89, 90, -1, -1, 1, -1, 95, 96,
+ -1, -1, 99, 100, 9, -1, 11, -1, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, -1, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, -1, -1,
- -1, 46, 47, 48, 49, 50, -1, 52, 53, 54,
- 55, 56, 57, -1, -1, -1, -1, 62, 63, 64,
- 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
- 75, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 87, 88, 89, -1, -1, 1, -1, 94,
- 95, -1, -1, 98, 99, 9, -1, 11, -1, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, -1, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, -1,
- -1, -1, 46, 47, 48, 49, 50, -1, 52, 53,
- 54, 55, 56, 57, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, 68, 69, -1, -1, -1, -1,
- -1, 75, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 87, 88, 89, -1, -1, 1, -1,
- 94, 95, -1, -1, 98, 99, 9, -1, 11, -1,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, -1,
+ -1, -1, 47, 48, 49, 50, 51, -1, 53, 54,
+ 55, 56, 57, 58, -1, -1, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
+ -1, 76, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 88, 89, 90, -1, -1, 1, -1,
+ 95, 96, -1, -1, 99, 100, 9, -1, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ 33, -1, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, -1, -1, -1, 47, 48, 49, 50, 51, -1,
+ 53, 54, 55, 56, 57, 58, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, -1,
+ -1, -1, -1, 76, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 88, 89, 90, 1, -1,
+ -1, -1, 95, 96, 61, 62, 99, 100, 11, -1,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- -1, -1, -1, 46, 47, 48, 49, 50, -1, 52,
- 53, 54, 55, 56, 57, -1, -1, -1, -1, 62,
- 63, 64, 65, 66, 67, 68, 69, -1, -1, -1,
- -1, -1, 75, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 87, 88, 89, 1, -1, -1,
- -1, 94, 95, -1, -1, 98, 99, 11, -1, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, -1, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, 36, -1, 39, 40, 41, 42, -1, -1,
- -1, 46, -1, 48, 60, 61, 50, -1, 52, 53,
- 54, 55, 56, 57, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, -1, 69, -1, 72, 73, 74,
- 86, 75, -1, -1, -1, 91, 92, 93, -1, -1,
- 96, -1, -1, 87, 88, 89, 1, -1, -1, -1,
- 94, 95, 97, -1, 98, -1, 11, -1, 13, 14,
- 15, 16, 17, 18, 19, -1, 21, 22, 23, 24,
- 25, -1, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, 36, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 50, -1, 52, 53, 54,
- 55, 56, 57, -1, -1, -1, 0, 62, 63, 64,
- 65, 66, 67, -1, 69, 9, -1, 11, 12, -1,
- 75, -1, -1, -1, -1, -1, 20, -1, -1, -1,
- -1, -1, 87, 88, 89, 58, 59, 60, 61, 94,
- 95, -1, 97, 98, -1, 39, 40, 41, 42, -1,
- -1, -1, 46, -1, 48, -1, -1, 51, -1, 82,
- 83, 84, 85, 86, 58, 59, 60, 61, 91, 92,
- 93, -1, -1, 96, -1, -1, -1, -1, 72, 73,
- 74, 0, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 12, -1, -1, -1, 91, 92, 93,
- -1, 20, 96, 97, -1, -1, -1, -1, -1, -1,
- 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
- 39, 40, 41, 42, -1, -1, -1, 46, -1, 48,
- -1, -1, 51, -1, -1, 83, 84, 85, 86, 58,
- 59, 60, 61, 91, 92, 93, -1, -1, 96, -1,
- -1, -1, -1, 72, 73, 74, -1, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, -1, -1,
- -1, -1, 91, 92, 93, -1, -1, 96, 97, 9,
- -1, 11, -1, 13, 14, 15, 16, 17, 18, 19,
+ 87, -1, -1, -1, 37, 92, 93, 94, -1, -1,
+ 97, -1, -1, -1, 59, 60, 61, 62, 51, -1,
+ 53, 54, 55, 56, 57, 58, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, -1, 70, 83, 84,
+ 85, 86, 87, 76, -1, -1, -1, 92, 93, 94,
+ -1, -1, 97, -1, -1, 88, 89, 90, 1, -1,
+ -1, -1, 95, 96, -1, -1, 99, -1, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ -1, -1, -1, -1, 37, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 51, -1,
+ 53, 54, 55, 56, 57, 58, -1, 0, -1, -1,
+ 63, 64, 65, 66, 67, 68, 9, 70, 11, 12,
+ -1, -1, -1, 76, -1, -1, -1, 20, -1, -1,
+ -1, -1, -1, -1, -1, 88, 89, 90, -1, -1,
+ -1, -1, 95, 96, -1, 98, 99, 40, 41, 42,
+ 43, -1, -1, -1, 47, -1, 49, -1, -1, 52,
+ -1, -1, -1, -1, -1, -1, 59, 60, 61, 62,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 73, 74, 75, 0, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 12, -1, -1, -1, 92,
+ 93, 94, -1, 20, 97, 98, -1, -1, -1, -1,
+ -1, -1, -1, 59, 60, 61, 62, -1, -1, -1,
+ -1, -1, -1, 40, 41, 42, 43, -1, -1, -1,
+ 47, -1, 49, -1, -1, 52, -1, -1, 84, 85,
+ 86, 87, 59, 60, 61, 62, 92, 93, 94, -1,
+ -1, 97, -1, -1, -1, -1, 73, 74, 75, -1,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, -1, -1, -1, -1, 92, 93, 94, -1, -1,
+ 97, 98, 9, -1, 11, -1, 13, 14, 15, 16,
+ 17, 18, 19, -1, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, -1, -1, -1, -1,
+ 37, -1, -1, -1, -1, -1, -1, -1, 59, 60,
+ 61, 62, -1, -1, 51, -1, 53, 54, 55, 56,
+ 57, 58, -1, -1, -1, -1, 63, 64, 65, 66,
+ 67, 68, -1, 70, 85, 86, 87, -1, -1, 76,
+ -1, 92, 93, 94, -1, -1, 97, -1, -1, -1,
+ -1, 88, 89, 90, -1, -1, -1, -1, 95, 96,
+ -1, 9, 99, 11, -1, 13, 14, 15, 16, 17,
+ 18, 19, -1, 21, 22, 23, 24, 25, -1, 27,
+ 28, 29, 30, 31, 32, -1, -1, -1, -1, 37,
+ -1, -1, -1, -1, -1, -1, 59, 60, 61, 62,
+ -1, -1, -1, 51, -1, 53, 54, 55, 56, 57,
+ 58, -1, -1, -1, -1, 63, 64, 65, 66, 67,
+ 68, -1, 70, 86, 87, -1, -1, -1, 76, 92,
+ 93, 94, -1, -1, 97, -1, -1, -1, -1, -1,
+ 88, 89, 90, -1, -1, -1, -1, 95, 96, -1,
+ 9, 99, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, 32, -1, -1, -1, -1, 37, 40,
+ 41, 42, 43, -1, -1, -1, 47, -1, 49, -1,
+ -1, -1, 51, -1, 53, 54, 55, 56, 57, 58,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ -1, 70, 73, 74, 75, -1, -1, 76, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 88,
+ 89, 90, -1, -1, -1, -1, 95, 96, -1, -1,
+ 99, 11, 12, 13, 14, 15, 16, 17, 18, 19,
-1, 21, 22, 23, 24, 25, -1, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, 36, -1, -1, -1,
- -1, -1, -1, -1, 58, 59, 60, 61, -1, -1,
- 50, -1, 52, 53, 54, 55, 56, 57, -1, -1,
- -1, -1, 62, 63, 64, 65, 66, 67, -1, 69,
- 84, 85, 86, -1, -1, 75, -1, 91, 92, 93,
- -1, -1, 96, -1, -1, -1, -1, 87, 88, 89,
- -1, -1, -1, -1, 94, 95, -1, 9, 98, 11,
- -1, 13, 14, 15, 16, 17, 18, 19, -1, 21,
- 22, 23, 24, 25, -1, 27, 28, 29, 30, 31,
- -1, -1, -1, -1, 36, -1, -1, -1, -1, -1,
- -1, 58, 59, 60, 61, -1, -1, -1, 50, -1,
- 52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
- 62, 63, 64, 65, 66, 67, -1, 69, 85, 86,
- -1, -1, -1, 75, 91, 92, 93, -1, -1, 96,
- -1, -1, -1, -1, -1, 87, 88, 89, -1, -1,
- -1, -1, 94, 95, -1, -1, 98, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, -1, 21, 22, 23,
- 24, 25, -1, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, 36, -1, -1, -1, -1, -1, -1, 58,
- -1, 60, 61, -1, -1, -1, 50, -1, 52, 53,
- 54, 55, 56, 57, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, -1, 69, 85, 86, -1, -1,
- -1, 75, 91, 92, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, 87, 88, 89, -1, -1, -1, -1,
- 94, 95, -1, 11, 98, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, -1, 27,
- 28, 29, 30, 31, -1, -1, -1, -1, 36, 39,
- 40, 41, 42, -1, -1, -1, 46, -1, 48, -1,
- -1, -1, 50, -1, 52, 53, 54, 55, 56, 57,
- -1, -1, -1, -1, 62, 63, 64, 65, 66, 67,
- -1, 69, 72, 73, 74, -1, -1, 75, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
- 88, 89, -1, -1, -1, -1, 94, 95, -1, 11,
- 98, 13, 14, 15, 16, 17, 18, 19, -1, 21,
- 22, 23, 24, 25, -1, 27, 28, 29, 30, 31,
- -1, -1, -1, -1, 36, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 50, -1,
- 52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
- 62, 63, 64, 65, 66, 67, -1, 69, -1, -1,
- -1, -1, -1, 75, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 87, 88, 89, -1, -1,
- -1, -1, 94, 95, -1, 97, 98, 11, -1, 13,
- 14, 15, 16, 17, 18, 19, -1, 21, 22, 23,
- 24, 25, -1, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, 36, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 50, -1, 52, 53,
- 54, 55, 56, 57, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, -1, 69, -1, -1, -1, -1,
- -1, 75, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 87, 88, 89, -1, -1, -1, -1,
- 94, 95, -1, 97, 98, 11, -1, 13, 14, 15,
+ 30, 31, 32, -1, -1, -1, -1, 37, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 51, -1, 53, 54, 55, 56, 57, 58, -1,
+ -1, -1, -1, 63, 64, 65, 66, 67, 68, -1,
+ 70, -1, -1, -1, -1, -1, 76, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, 89,
+ 90, -1, -1, -1, -1, 95, 96, -1, 11, 99,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ -1, -1, -1, -1, 37, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 51, -1,
+ 53, 54, 55, 56, 57, 58, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, -1, 70, -1, -1,
+ -1, -1, -1, 76, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 88, 89, 90, -1, -1,
+ -1, -1, 95, 96, -1, 11, 99, 13, 14, 15,
16, 17, 18, 19, -1, 21, 22, 23, 24, 25,
- -1, 27, 28, 29, 30, 31, -1, -1, -1, -1,
- 36, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 50, -1, 52, 53, 54, 55,
- 56, 57, -1, -1, -1, -1, 62, 63, 64, 65,
- 66, 67, -1, 69, -1, -1, -1, -1, -1, 75,
+ -1, 27, 28, 29, 30, 31, 32, -1, -1, -1,
+ -1, 37, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 51, -1, 53, 54, 55,
+ 56, 57, 58, -1, -1, -1, -1, 63, 64, 65,
+ 66, 67, 68, -1, 70, -1, -1, -1, -1, -1,
+ 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, 89, 90, -1, -1, -1, -1, 95,
+ 96, -1, 98, 99, 11, -1, 13, 14, 15, 16,
+ 17, 18, 19, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, 32, -1, -1, -1, -1,
+ 37, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 51, -1, 53, 54, 55, 56,
+ 57, 58, -1, -1, -1, -1, 63, 64, 65, 66,
+ 67, 68, -1, 70, -1, -1, -1, -1, -1, 76,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 87, 88, 89, -1, -1, -1, -1, 94, 95,
- -1, 97, 98, 11, -1, 13, 14, 15, 16, 17,
+ -1, 88, 89, 90, -1, -1, -1, -1, 95, 96,
+ -1, 98, 99, 11, -1, 13, 14, 15, 16, 17,
18, 19, -1, 21, 22, 23, 24, 25, -1, 27,
- 28, 29, 30, 31, -1, -1, -1, -1, 36, -1,
+ 28, 29, 30, 31, 32, -1, -1, -1, -1, 37,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 50, -1, 52, 53, 54, 55, 56, 57,
- -1, -1, -1, -1, 62, 63, 64, 65, 66, 67,
- -1, 69, -1, -1, -1, -1, -1, 75, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
- 88, 89, -1, -1, -1, -1, 94, 95, -1, 97,
- 98, 11, -1, 13, 14, 15, 16, 17, 18, 19,
+ -1, -1, -1, 51, -1, 53, 54, 55, 56, 57,
+ 58, -1, -1, -1, -1, 63, 64, 65, 66, 67,
+ 68, -1, 70, -1, -1, -1, -1, -1, 76, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, 89, 90, -1, -1, -1, -1, 95, 96, -1,
+ 98, 99, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, 32, -1, -1, -1, -1, 37, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 51, -1, 53, 54, 55, 56, 57, 58,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ -1, 70, -1, -1, -1, -1, -1, 76, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 88,
+ 89, 90, -1, -1, -1, -1, 95, 96, -1, 98,
+ 99, 11, -1, 13, 14, 15, 16, 17, 18, 19,
-1, 21, 22, 23, 24, 25, -1, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, 36, -1, -1, -1,
+ 30, 31, 32, -1, -1, -1, -1, 37, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 51, -1, 53, 54, 55, 56, 57, 58, -1,
+ -1, -1, -1, 63, 64, 65, 66, 67, 68, -1,
+ 70, -1, -1, -1, -1, -1, 76, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, 89,
+ 90, -1, -1, -1, -1, 95, 96, -1, 98, 99,
+ 11, -1, 13, 14, 15, 16, 17, 18, 19, -1,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, 32, -1, -1, -1, -1, 37, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 50, -1, 52, 53, 54, 55, 56, 57, -1, -1,
- -1, -1, 62, 63, 64, 65, 66, 67, -1, 69,
- -1, -1, -1, -1, -1, 75, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 87, 88, 89,
- -1, -1, -1, -1, 94, 95, -1, 97, 98, 11,
+ 51, -1, 53, 54, 55, 56, 57, 58, -1, -1,
+ -1, -1, 63, 64, 65, 66, 67, 68, -1, 70,
+ -1, -1, -1, -1, -1, 76, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 88, 89, 90,
+ -1, -1, -1, -1, 95, 96, -1, 98, 99, 11,
-1, 13, 14, 15, 16, 17, 18, 19, -1, 21,
22, 23, 24, 25, -1, 27, 28, 29, 30, 31,
- -1, -1, -1, -1, 36, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 50, -1,
- 52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
- 62, 63, 64, 65, 66, 67, -1, 69, -1, -1,
- -1, -1, -1, 75, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 87, 88, 89, -1, -1,
- -1, -1, 94, 95, -1, 97, 98, 11, -1, 13,
+ 32, -1, -1, -1, -1, 37, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 51,
+ -1, 53, 54, 55, 56, 57, 58, -1, -1, -1,
+ -1, 63, 64, 65, 66, 67, 68, -1, 70, -1,
+ -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, 89, 90, -1,
+ -1, -1, -1, 95, 96, -1, 98, 99, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ -1, -1, -1, -1, 37, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 51, -1,
+ 53, 54, 55, 56, 57, 58, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, -1, 70, -1, -1,
+ -1, -1, -1, 76, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 88, 89, 90, -1, -1,
+ -1, -1, 95, 96, -1, 98, 99, 11, -1, 13,
14, 15, 16, 17, 18, 19, -1, 21, 22, 23,
- 24, 25, -1, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, 36, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 50, -1, 52, 53,
- 54, 55, 56, 57, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, -1, 69, -1, -1, -1, -1,
- -1, 75, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 87, 88, 89, -1, -1, -1, -1,
- 94, 95, -1, 97, 98, 11, -1, 13, 14, 15,
- 16, 17, 18, 19, -1, 21, 22, 23, 24, 25,
- -1, 27, 28, 29, 30, 31, -1, -1, -1, -1,
- 36, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 50, -1, 52, 53, 54, 55,
- 56, 57, -1, -1, -1, -1, 62, 63, 64, 65,
- 66, 67, -1, 69, -1, -1, -1, -1, -1, 75,
+ 24, 25, -1, 27, 28, 29, 30, 31, 32, -1,
+ -1, -1, -1, 37, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 51, -1, 53,
+ 54, 55, 56, 57, 58, -1, -1, -1, -1, 63,
+ 64, 65, 66, 67, 68, -1, 70, -1, -1, -1,
+ 52, -1, 76, -1, -1, -1, -1, 59, 60, 61,
+ 62, -1, -1, -1, 88, 89, 90, -1, -1, -1,
+ -1, 95, 96, -1, -1, 99, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, -1, -1, -1, 52,
+ 92, 93, 94, -1, -1, 97, 59, 60, 61, 62,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 87, 88, 89, -1, -1, -1, -1, 94, 95,
- -1, 97, 98, 11, -1, 13, 14, 15, 16, 17,
- 18, 19, -1, 21, 22, 23, 24, 25, -1, 27,
- 28, 29, 30, 31, -1, -1, -1, -1, 36, -1,
+ -1, -1, -1, -1, -1, 78, 79, -1, 81, 82,
+ 83, 84, 85, 86, 87, -1, -1, -1, 52, 92,
+ 93, 94, -1, -1, 97, 59, 60, 61, 62, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 50, -1, 52, 53, 54, 55, 56, 57,
- -1, -1, -1, -1, 62, 63, 64, 65, 66, 67,
- 386, 69, 388, -1, -1, -1, 392, 75, -1, -1,
- -1, -1, -1, -1, -1, -1, 402, 403, -1, 87,
- 88, 89, -1, -1, 410, 411, 94, 95, -1, -1,
- 98, 51, -1, 419, -1, -1, -1, 423, 58, 59,
- 60, 61, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 441, 442, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, -1, -1, -1,
- 51, 91, 92, 93, -1, -1, 96, 58, 59, 60,
- 61, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 77, 78, -1, 80,
- 81, 82, 83, 84, 85, 86, -1, -1, -1, 51,
- 91, 92, 93, -1, -1, 96, 58, 59, 60, 61,
+ -1, -1, -1, -1, -1, 79, -1, 81, 82, 83,
+ 84, 85, 86, 87, -1, -1, -1, 52, 92, 93,
+ 94, -1, -1, 97, 59, 60, 61, 62, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 78, -1, 80, 81,
- 82, 83, 84, 85, 86, -1, -1, -1, 51, 91,
- 92, 93, -1, -1, 96, 58, 59, 60, 61, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 80, 81, 82,
- 83, 84, 85, 86, -1, -1, -1, -1, 91, 92,
- 93, -1, -1, 96
+ -1, -1, -1, -1, -1, -1, 81, 82, 83, 84,
+ 85, 86, 87, -1, -1, -1, -1, 92, 93, 94,
+ -1, -1, 97
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 3, 4, 5, 6, 7, 8, 101, 102, 103,
- 104, 105, 106, 107, 0, 109, 11, 13, 14, 15,
+ 0, 3, 4, 5, 6, 7, 8, 102, 103, 104,
+ 105, 106, 107, 108, 0, 110, 11, 13, 14, 15,
16, 17, 18, 19, 21, 22, 23, 24, 25, 27,
- 28, 29, 30, 31, 36, 50, 52, 53, 54, 55,
- 56, 57, 62, 63, 64, 65, 66, 67, 69, 75,
- 87, 88, 89, 94, 95, 98, 138, 139, 140, 143,
- 144, 145, 146, 147, 148, 149, 152, 156, 157, 158,
- 159, 160, 161, 9, 108, 1, 20, 32, 34, 35,
- 37, 38, 39, 40, 41, 42, 46, 47, 48, 49,
- 68, 99, 108, 116, 119, 138, 33, 114, 115, 116,
- 113, 113, 12, 138, 148, 148, 21, 26, 108, 157,
- 162, 162, 162, 162, 162, 162, 162, 98, 11, 148,
- 131, 131, 148, 98, 98, 98, 108, 148, 21, 139,
- 151, 157, 162, 162, 21, 108, 148, 157, 20, 138,
- 21, 148, 98, 150, 157, 158, 159, 148, 139, 148,
- 148, 148, 148, 148, 97, 138, 72, 73, 74, 76,
- 9, 11, 27, 98, 153, 51, 58, 59, 60, 61,
- 77, 78, 80, 81, 82, 83, 84, 85, 86, 91,
- 92, 93, 96, 153, 9, 11, 9, 11, 9, 109,
- 132, 130, 21, 130, 153, 153, 153, 153, 67, 153,
- 157, 153, 153, 108, 130, 45, 121, 20, 39, 40,
- 41, 42, 46, 48, 115, 116, 114, 12, 151, 98,
- 139, 138, 108, 24, 134, 97, 97, 138, 152, 162,
- 139, 153, 153, 10, 20, 151, 97, 138, 70, 136,
- 11, 97, 138, 138, 138, 148, 138, 138, 154, 97,
- 138, 148, 148, 148, 148, 148, 148, 148, 148, 148,
- 148, 148, 148, 148, 148, 148, 9, 11, 22, 98,
- 142, 157, 97, 138, 138, 138, 138, 138, 138, 113,
- 21, 129, 21, 133, 21, 117, 109, 109, 109, 109,
- 109, 109, 153, 109, 109, 133, 108, 138, 125, 138,
- 138, 138, 138, 138, 152, 97, 12, 141, 70, 135,
- 97, 97, 138, 97, 138, 97, 138, 10, 97, 24,
- 138, 11, 20, 12, 98, 97, 79, 138, 138, 97,
- 138, 153, 97, 20, 12, 20, 12, 20, 10, 108,
- 134, 9, 20, 21, 124, 138, 125, 126, 138, 125,
- 128, 155, 157, 119, 123, 126, 127, 138, 109, 110,
- 126, 134, 97, 151, 24, 108, 97, 97, 97, 12,
- 138, 10, 148, 20, 12, 97, 152, 10, 10, 10,
- 135, 109, 21, 97, 97, 97, 97, 153, 97, 20,
- 126, 126, 97, 135, 12, 10, 97, 20, 108, 137,
- 118, 151, 122, 122, 9, 111, 111, 126, 111, 124,
- 97, 97, 111, 137, 113, 20, 111, 111, 112, 43,
- 44, 120, 120, 97, 121, 20, 111, 111, 10, 121,
- 121, 113, 111, 153, 111, 122, 121, 10, 126, 121,
- 127, 97, 97, 111, 111, 120
+ 28, 29, 30, 31, 32, 37, 51, 53, 54, 55,
+ 56, 57, 58, 63, 64, 65, 66, 67, 68, 70,
+ 76, 88, 89, 90, 95, 96, 99, 139, 140, 141,
+ 144, 145, 146, 147, 148, 149, 150, 153, 157, 158,
+ 159, 160, 161, 162, 9, 109, 1, 20, 33, 35,
+ 36, 38, 39, 40, 41, 42, 43, 47, 48, 49,
+ 50, 69, 100, 109, 117, 120, 139, 34, 115, 116,
+ 117, 114, 114, 12, 139, 149, 149, 21, 26, 109,
+ 158, 163, 163, 163, 163, 163, 163, 163, 99, 11,
+ 99, 149, 132, 132, 149, 99, 99, 99, 109, 149,
+ 21, 140, 152, 158, 163, 163, 21, 109, 149, 158,
+ 20, 139, 21, 149, 99, 151, 158, 159, 160, 149,
+ 140, 149, 149, 149, 149, 149, 98, 139, 73, 74,
+ 75, 77, 9, 11, 27, 99, 154, 52, 59, 60,
+ 61, 62, 78, 79, 81, 82, 83, 84, 85, 86,
+ 87, 92, 93, 94, 97, 154, 9, 11, 9, 11,
+ 9, 110, 133, 131, 21, 131, 154, 154, 154, 154,
+ 68, 154, 158, 154, 154, 109, 131, 46, 122, 20,
+ 40, 41, 42, 43, 47, 49, 116, 117, 115, 12,
+ 152, 99, 140, 139, 98, 109, 24, 135, 98, 98,
+ 139, 153, 163, 140, 154, 154, 10, 20, 152, 98,
+ 139, 71, 137, 11, 98, 139, 139, 139, 149, 139,
+ 139, 155, 98, 139, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 9,
+ 11, 22, 99, 143, 158, 98, 139, 139, 139, 139,
+ 139, 139, 114, 21, 130, 21, 134, 21, 118, 110,
+ 110, 110, 110, 110, 110, 154, 110, 110, 134, 109,
+ 139, 126, 139, 139, 139, 139, 139, 153, 98, 12,
+ 142, 71, 136, 98, 98, 139, 98, 139, 98, 139,
+ 10, 98, 24, 139, 11, 20, 12, 99, 98, 80,
+ 139, 139, 98, 139, 154, 98, 20, 12, 20, 12,
+ 20, 10, 109, 135, 9, 20, 21, 125, 139, 126,
+ 127, 139, 126, 129, 156, 158, 120, 124, 127, 128,
+ 139, 110, 111, 127, 135, 98, 152, 24, 109, 98,
+ 98, 98, 12, 139, 10, 149, 20, 12, 98, 153,
+ 10, 10, 10, 136, 110, 21, 98, 98, 98, 98,
+ 154, 98, 20, 127, 127, 98, 136, 12, 10, 98,
+ 20, 109, 138, 119, 152, 123, 123, 9, 112, 112,
+ 127, 112, 125, 98, 98, 112, 138, 114, 20, 112,
+ 112, 113, 44, 45, 121, 121, 98, 122, 20, 112,
+ 112, 10, 122, 122, 114, 112, 154, 112, 123, 122,
+ 10, 127, 122, 128, 98, 98, 112, 112, 121
};
typedef enum {
@@ -1051,11 +1070,11 @@ static const toketypes yy_type_tab[] =
toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_p_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
@@ -1074,6 +1093,6 @@ static const toketypes yy_type_tab[] =
};
/* Generated from:
- * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y
+ * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y
* 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl
* ex: set ro: */
diff --git a/perly.y b/perly.y
index 9c308a3853..ec030b9933 100644
--- a/perly.y
+++ b/perly.y
@@ -74,7 +74,7 @@
%token <i_tkval> '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';'
%token <opval> WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF QWLIST
-%token <opval> FUNC0SUB UNIOPSUB LSTOPSUB
+%token <opval> FUNC0OP FUNC0SUB UNIOPSUB LSTOPSUB
%token <opval> PLUGEXPR PLUGSTMT
%token <p_tkval> LABEL
%token <i_tkval> FORMAT SUB ANONSUB PACKAGE USE
@@ -1232,6 +1232,13 @@ term : termbinop
TOKEN_GETMAD($2,$$,'(');
TOKEN_GETMAD($3,$$,')');
}
+ | FUNC0OP /* Same as above, but op created in toke.c */
+ { $$ = $1; }
+ | FUNC0OP '(' ')'
+ { $$ = $1;
+ TOKEN_GETMAD($2,$$,'(');
+ TOKEN_GETMAD($3,$$,')');
+ }
| FUNC0SUB /* Sub treated as nullop */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
scalar($1)); }
diff --git a/plan9/config_sh.sample b/plan9/config_sh.sample
index 79d8f555f5..f560115b3e 100644
--- a/plan9/config_sh.sample
+++ b/plan9/config_sh.sample
@@ -948,6 +948,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
diff --git a/pod.lst b/pod.lst
index 43327c7f08..f7c65b4ec0 100644
--- a/pod.lst
+++ b/pod.lst
@@ -97,8 +97,6 @@ g perlmodlib Perl modules: how to write and use
perlutil utilities packaged with the Perl distribution
- perlcompile Perl compiler suite intro
-
perlfilter Perl source filters
perldtrace Perl's support for DTrace
@@ -196,6 +194,8 @@ h Miscellaneous
perl5005delta Perl changes in version 5.005
perl5004delta Perl changes in version 5.004
+ perlexperiment A listing of experimental features in Perl
+
perlartistic Perl Artistic License
perlgpl GNU General Public License
diff --git a/pod/buildtoc b/pod/buildtoc
index b0968f1f82..68f75b3e24 100644
--- a/pod/buildtoc
+++ b/pod/buildtoc
@@ -586,24 +586,6 @@ sub generate_roffitall {
)
}
-sub generate_descrip_mms_1 {
- local $Text::Wrap::columns = 150;
- my $count = 0;
- my @lines = map {"pod" . $count++ . " = $_"}
- split /\n/, wrap('', '', join " ", map "[.lib.pods]$_.pod",
- sort grep { $_ !~ m{/} } keys %Pods, keys %Readmepods);
- @lines, "pod = " . join ' ', map {"\$(pod$_)"} 0 .. $count - 1;
-}
-
-sub generate_descrip_mms_2 {
- map {<<"SNIP"}
-[.lib.pods]$_.pod : [.pod]$_.pod
- \@ If F\$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log \$(MMS\$SOURCE) [.lib.pods]
-SNIP
- sort grep { $_ !~ m{/} } keys %Pods, keys %Readmepods;
-}
-
sub generate_nmake_1 {
# XXX Fix this with File::Spec
(map {sprintf "\tcopy ..\\README.%-8s ..\\pod\\perl$_.pod\n", $_}
@@ -698,11 +680,6 @@ sub do_podmak {
sub do_vms {
my ($name, $makefile) = @_;
- $makefile =~ s/\npod\d* =[^\n]*/\0/gs;
- verify_contiguous($name, $makefile, 'pod assignments');
- $makefile =~ s/\0+/join "\n", '', &generate_descrip_mms_1/se;
-
- my_die "$name contains NUL bytes" if $makefile =~ /\0/;
# Looking for the macro defining the current perldelta:
#PERLDELTA_CURRENT = [.pod]perl5139delta.pod
@@ -712,18 +689,6 @@ sub do_vms {
verify_contiguous($name, $makefile, 'current perldelta macro');
$makefile =~ s/\0+/join "\n", '', "PERLDELTA_CURRENT = [.pod]$delta_target", ''/se;
-# Looking for rules like this
-# [.lib.pods]perl.pod : [.pod]perl.pod
-# @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
-# Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
- $makefile =~ s/\n\Q[.lib.pods]\Eperl[^\n\.]*\.pod[^\n]+\n
- [^\n]+\n # Another line
- [^\n]+\Q[.lib.pods]\E\n # ends [.lib.pods]
- /\0/gsx;
- verify_contiguous($name, $makefile, 'copy rules');
- $makefile =~ s/\0+/join "\n", '', &generate_descrip_mms_2/se;
-
$makefile;
}
diff --git a/pod/perl.pod b/pod/perl.pod
index b6fa987a62..25e9996585 100644
--- a/pod/perl.pod
+++ b/pod/perl.pod
@@ -120,8 +120,6 @@ For ease of access, the Perl manual has been split up into several sections.
perlutil utilities packaged with the Perl distribution
- perlcompile Perl compiler suite intro
-
perlfilter Perl source filters
perldtrace Perl's support for DTrace
@@ -218,6 +216,8 @@ For ease of access, the Perl manual has been split up into several sections.
perl5005delta Perl changes in version 5.005
perl5004delta Perl changes in version 5.004
+ perlexperiment A listing of experimental features in Perl
+
perlartistic Perl Artistic License
perlgpl GNU General Public License
diff --git a/pod/perl5100delta.pod b/pod/perl5100delta.pod
index e93c316954..4e5c6d3a2b 100644
--- a/pod/perl5100delta.pod
+++ b/pod/perl5100delta.pod
@@ -844,7 +844,7 @@ of C<CPANPLUS>.
=item *
C<Archive::Extract> is a generic archive extraction mechanism
-for F<.tar> (plain, gziped or bzipped) or F<.zip> files.
+for F<.tar> (plain, gzipped or bzipped) or F<.zip> files.
=item *
diff --git a/pod/perl51311delta.pod b/pod/perl51311delta.pod
index 976eba3fcf..812af75134 100644
--- a/pod/perl51311delta.pod
+++ b/pod/perl51311delta.pod
@@ -233,7 +233,7 @@ C<Test::Simple> has been upgraded from version 0.97_01 to 0.98
C<Tie::Hash::NamedCapture> has been upgraded from version 0.07 to 0.08.
-Some of the Perl code has been converted to XS for efficency's sake.
+Some of the Perl code has been converted to XS for efficiency's sake.
=item *
diff --git a/pod/perl5140delta.pod b/pod/perl5140delta.pod
index 17faea868c..51060aca52 100644
--- a/pod/perl5140delta.pod
+++ b/pod/perl5140delta.pod
@@ -2888,7 +2888,7 @@ When C<perlio> became the default and C<unix> became the default bottom layer,
the most common path for creating files from Perl became C<PerlIOUnix_open>,
which has always explicitly used C<0666> as the permission mask. This prevents
inheriting permissions from RMS defaults and ACLs, so to avoid that problem,
-we now pass C<0777> to open(). In theVMS CRTL, C<0777> has a special
+we now pass C<0777> to open(). In the VMS CRTL, C<0777> has a special
meaning over and above intersecting with the current umask; specifically, it
allows Unix syscalls to preserve native default permissions (5.12.3).
diff --git a/pod/perl5150delta.pod b/pod/perl5150delta.pod
index c783b495a9..4966207c1d 100644
--- a/pod/perl5150delta.pod
+++ b/pod/perl5150delta.pod
@@ -1184,7 +1184,7 @@ L<YAML::Syck> has (undiagnosed) test failures.
=head1 Acknowledgements
-Perl 5.15.0 represents approximatly five weeks of development since Perl
+Perl 5.15.0 represents approximately five weeks of development since Perl
5.14.0 and contains approximately 54,000 lines of changes across 618
files from 57 authors.
diff --git a/pod/perl5151delta.pod b/pod/perl5151delta.pod
index 861f5cf662..f9ae49f399 100644
--- a/pod/perl5151delta.pod
+++ b/pod/perl5151delta.pod
@@ -430,7 +430,7 @@ L<RT #87322|https://rt.perl.org/rt3/Public/Bug/Display.html?id=87322>.
=item *
-The expermental C<fetch_cop_label> function has been renamed to
+The experimental C<fetch_cop_label> function has been renamed to
C<cop_fetch_label>.
=item *
diff --git a/pod/perl595delta.pod b/pod/perl595delta.pod
index 246b2cc747..097b6b4dc7 100644
--- a/pod/perl595delta.pod
+++ b/pod/perl595delta.pod
@@ -362,7 +362,7 @@ of C<CPANPLUS>.
=item *
C<Archive::Extract> is a generic archive extraction mechanism
-for F<.tar> (plain, gziped or bzipped) or F<.zip> files.
+for F<.tar> (plain, gzipped or bzipped) or F<.zip> files.
=item *
diff --git a/pod/perlcompile.pod b/pod/perlcompile.pod
deleted file mode 100644
index dc829f45ef..0000000000
--- a/pod/perlcompile.pod
+++ /dev/null
@@ -1,293 +0,0 @@
-=head1 NAME
-
-perlcompile - Introduction to the Perl Compiler-Translator
-
-=head1 DESCRIPTION
-
-Perl has always had a compiler: your source is compiled into an
-internal form (a parse tree) which is then optimized before being
-run. Since version 5.005, Perl has shipped with a module
-capable of inspecting the optimized parse tree (C<B>), and this has
-been used to write many useful utilities, including a module that lets
-you turn your Perl into C source code that can be compiled into a
-native executable.
-
-The C<B> module provides access to the parse tree, and other modules
-("back ends") do things with the tree. Some write it out as
-semi-human-readable text. Another traverses the parse tree to build a
-cross-reference of which subroutines, formats, and variables are used
-where. Another checks your code for dubious constructs. Yet another back
-end dumps the parse tree back out as Perl source, acting as a source code
-beautifier or deobfuscator.
-
-Because its original purpose was to be a way to produce C code
-corresponding to a Perl program, and in turn a native executable, the
-C<B> module and its associated back ends are known as "the
-compiler", even though they don't really compile anything.
-Different parts of the compiler are more accurately a "translator",
-or an "inspector", but people want Perl to have a "compiler
-option" not an "inspector gadget". What can you do?
-
-This document covers the use of the Perl compiler: which modules
-it comprises, how to use the most important of the back end modules,
-what problems there are, and how to work around them.
-
-=head2 Layout
-
-The compiler back ends are in the C<B::> hierarchy, and the front-end
-(the module that you, the user of the compiler, will sometimes
-interact with) is the O module.
-
-Here are the important back ends to know about, with their status
-expressed as a number from 0 (outline for later implementation) to
-10 (if there's a bug in it, we're very surprised):
-
-=over 4
-
-=item B::Lint
-
-Complains if it finds dubious constructs in your source code. Status:
-6 (it works adequately, but only has a very limited number of areas
-that it checks).
-
-=item B::Deparse
-
-Recreates the Perl source, making an attempt to format it coherently.
-Status: 8 (it works nicely, but a few obscure things are missing).
-
-=item B::Xref
-
-Reports on the declaration and use of subroutines and variables.
-Status: 8 (it works nicely, but still has a few lingering bugs).
-
-=back
-
-=head1 Using The Back Ends
-
-The following sections describe how to use the various compiler back
-ends. They're presented roughly in order of maturity, so that the
-most stable and proven back ends are described first, and the most
-experimental and incomplete back ends are described last.
-
-The O module automatically enabled the B<-c> flag to Perl, which
-prevents Perl from executing your code once it has been compiled.
-This is why all the back ends print:
-
- myperlprogram syntax OK
-
-before producing any other output.
-
-=head2 The Cross-Referencing Back End
-
-The cross-referencing back end (B::Xref) produces a report on your program,
-breaking down declarations and uses of subroutines and variables (and
-formats) by file and subroutine. For instance, here's part of the
-report from the I<pod2man> program that comes with Perl:
-
- Subroutine clear_noremap
- Package (lexical)
- $ready_to_print i1069, 1079
- Package main
- $& 1086
- $. 1086
- $0 1086
- $1 1087
- $2 1085, 1085
- $3 1085, 1085
- $ARGV 1086
- %HTML_Escapes 1085, 1085
-
-This shows the variables used in the subroutine C<clear_noremap>. The
-variable C<$ready_to_print> is a my() (lexical) variable,
-B<i>ntroduced (first declared with my()) on line 1069, and used on
-line 1079. The variable C<$&> from the main package is used on 1086,
-and so on.
-
-A line number may be prefixed by a single letter:
-
-=over 4
-
-=item i
-
-Lexical variable introduced (declared with my()) for the first time.
-
-=item &
-
-Subroutine or method call.
-
-=item s
-
-Subroutine defined.
-
-=item r
-
-Format defined.
-
-=back
-
-The most useful option the cross referencer has is to save the report
-to a separate file. For instance, to save the report on
-I<myperlprogram> to the file I<report>:
-
- $ perl -MO=Xref,-oreport myperlprogram
-
-=head2 The Decompiling Back End
-
-The Deparse back end turns your Perl source back into Perl source. It
-can reformat along the way, making it useful as a deobfuscator. The
-most basic way to use it is:
-
- $ perl -MO=Deparse myperlprogram
-
-You'll notice immediately that Perl has no idea of how to paragraph
-your code. You'll have to separate chunks of code from each other
-with newlines by hand. However, watch what it will do with
-one-liners:
-
- $ perl -MO=Deparse -e '$op=shift||die "usage: $0
- code [...]";chomp(@ARGV=<>)unless@ARGV; for(@ARGV){$was=$_;eval$op;
- die$@ if$@; rename$was,$_ unless$was eq $_}'
- -e syntax OK
- $op = shift @ARGV || die("usage: $0 code [...]");
- chomp(@ARGV = <ARGV>) unless @ARGV;
- foreach $_ (@ARGV) {
- $was = $_;
- eval $op;
- die $@ if $@;
- rename $was, $_ unless $was eq $_;
- }
-
-The decompiler has several options for the code it generates. For
-instance, you can set the size of each indent from 4 (as above) to
-2 with:
-
- $ perl -MO=Deparse,-si2 myperlprogram
-
-The B<-p> option adds parentheses where normally they are omitted:
-
- $ perl -MO=Deparse -e 'print "Hello, world\n"'
- -e syntax OK
- print "Hello, world\n";
- $ perl -MO=Deparse,-p -e 'print "Hello, world\n"'
- -e syntax OK
- print("Hello, world\n");
-
-See L<B::Deparse> for more information on the formatting options.
-
-=head2 The Lint Back End
-
-The lint back end (B::Lint) inspects programs for poor style. One
-programmer's bad style is another programmer's useful tool, so options
-let you select what is complained about.
-
-To run the style checker across your source code:
-
- $ perl -MO=Lint myperlprogram
-
-To disable context checks and undefined subroutines:
-
- $ perl -MO=Lint,-context,-undefined-subs myperlprogram
-
-See L<B::Lint> for information on the options.
-
-=head1 Module List for the Compiler Suite
-
-=over 4
-
-=item B
-
-This module is the introspective ("reflective" in Java terms)
-module, which allows a Perl program to inspect its innards. The
-back end modules all use this module to gain access to the compiled
-parse tree. You, the user of a back end module, will not need to
-interact with B.
-
-=item O
-
-This module is the front-end to the compiler's back ends. Normally
-called something like this:
-
- $ perl -MO=Deparse myperlprogram
-
-This is like saying C<use O 'Deparse'> in your Perl program.
-
-=item B::Concise
-
-This module prints a concise (but complete) version of the Perl parse
-tree. Its output is more customizable than the one of B::Terse or
-B::Debug (and it can emulate them). This module is useful for people who
-are writing their own back end, or who are learning about the Perl
-internals. It's not useful to the average programmer.
-
-=item B::Debug
-
-This module dumps the Perl parse tree in verbose detail to STDOUT.
-It's useful for people who are writing their own back end, or who
-are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Deparse
-
-This module produces Perl source code from the compiled parse tree.
-It is useful in debugging and deconstructing other people's code,
-also as a pretty-printer for your own source. See
-L</"The Decompiling Back End"> for details about usage.
-
-=item B::Lint
-
-This module inspects the compiled form of your source code for things
-which, while some people frown on them, aren't necessarily bad enough
-to justify a warning. For instance, use of an array in scalar context
-without explicitly saying C<scalar(@array)> is something that Lint
-can identify. See L</"The Lint Back End"> for details about usage.
-
-=item B::Showlex
-
-This module prints out the my() variables used in a function or a
-file. To get a list of the my() variables used in the subroutine
-mysub() defined in the file myperlprogram:
-
- $ perl -MO=Showlex,mysub myperlprogram
-
-To get a list of the my() variables used in the file myperlprogram:
-
- $ perl -MO=Showlex myperlprogram
-
-[BROKEN]
-
-=item B::Terse
-
-This module prints the contents of the parse tree, but without as much
-information as B::Debug. For comparison, C<print "Hello, world.">
-produced 96 lines of output from B::Debug, but only 6 from B::Terse.
-
-This module is useful for people who are writing their own back end,
-or who are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Xref
-
-This module prints a report on where the variables, subroutines, and
-formats are defined and used within a program and the modules it
-loads. See L</"The Cross-Referencing Back End"> for details about
-usage.
-
-=back
-
-=head1 KNOWN PROBLEMS
-
-BEGIN{} blocks are executed while compiling your code. Any external
-state that is initialized in BEGIN{}, such as opening files, initiating
-database connections etc., do not behave properly. To work around
-this, Perl has an INIT{} block that corresponds to code being executed
-before your program begins running but after your program has finished
-being compiled. Execution order: BEGIN{}, (possible save of state
-through compiler back-end), INIT{}, program runs, END{}.
-
-=head1 AUTHOR
-
-This document was originally written by Nathan Torkington, and is now
-maintained by the perl5-porters mailing list
-I<perl5-porters@perl.org>.
-
-=cut
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index a333d24f57..2309a09ad7 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -28,6 +28,27 @@ here, but most should go in the L</Performance Enhancements> section.
[ List each enhancement as a =head2 entry ]
+=head2 Subroutines in the CORE namespace
+
+Many Perl keywords are now available as subroutines in the CORE namespace.
+These cannot be called through references or via C<&foo> syntax yet, but
+must be called as barewords. In other words, you can now do this:
+
+ BEGIN { *entangle = \&CORE::tie }
+ entangle $variable, $package, @args;
+
+This currently works for overridable keywords other than C<not>, C<dump>,
+C<getprotobynumber> and the infix operators.
+
+Work is under way to allow these subroutines to be called through
+references.
+
+=head2 C<__FILE__()> Syntax
+
+The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written
+with an empty pair of parentheses after them. This makes them parse the
+same way as C<time>, C<fork> and other built-in functions.
+
=head1 Security
XXX Any security-related notices go here. In particular, any security
@@ -105,12 +126,45 @@ XXX
=item *
+L<B> has been upgraded from version 1.30 to version 1.31
+
+The XS code has changed slightly, as it was too tightly coupled to
+the contents of the header F<embedvar.h>. Documentation in L<B::Terse>
+and L<B::Xref> has been improved, hence their versions have been increased.
+
+=item *
+
+L<CPAN> has been upgraded from version 1.9600 to version 1.9800
+
+=item *
+
L<CPANPLUS> has been upgraded from version 0.9108 to version 0.9109
Fixed support for v-strings and x.y.z versions with v5.8.4
=item *
+L<CPAN::Meta> has been upgraded from version 2.110930_001 to version 2.112150
+
+Stringify any objects encountered during conversion.
+
+Clarified that file paths in the 'provides' section must be in
+Unix-style (i.e. forward slashes)
+
+=item *
+
+L<DB_File> has been upgraded from version 1.822 to version 1.824
+
+Will now croak if attempt to freeze/thaw DB_File object [RT #69985]
+
+=item *
+
+L<Encode> has been upgraded from version 2.43 to version 2.44
+
+Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs
+
+=item *
+
L<ExtUtils::Install> has been upgraded from version 1.56 to version 1.57.
There is no change to ExtUtils::Install other than the version number
@@ -119,6 +173,10 @@ to version 1.999002 and a new C<skip_cwd> attribute has been added.
=item *
+L<ExtUtils::MakeMaker> has been upgraded from version 6.58 to version 6.59
+
+=item *
+
L<IPC::Open3> has been upgraded from version 1.11 to 1.12.
C<open3> with "-" for the program name works once more. This was broken in
@@ -134,7 +192,17 @@ Also fixes some minor bugs. [rt.cpan.org #68585] [rt.cpan.org #67893]
=item *
-L<Params::Check> has been upgraded from version 0.28 to version 0.30
+L<Module::Load> has been upgraded from version 0.18 to version 0.20
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000004 to version 1.000005
+
+Added C<new_from_handle()> method.
+
+=item *
+
+L<Params::Check> has been upgraded from version 0.28 to version 0.32
=item *
@@ -226,7 +294,15 @@ XXX Newly added diagnostic messages go here
=item *
-XXX L<message|perldiag/"message">
+L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly">
+
+(F) You tried to call a subroutine in the C<CORE::> namespace
+with C<&foo> syntax or through a reference. The subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. Something like this will work:
+
+ BEGIN { *shove = \&CORE::push; }
+ shove @array, 1,2,3; # pushes on to @array
=back
@@ -290,7 +366,8 @@ L</Platform Support> section, instead.
=item *
-XXX
+F<makedef.pl> has been refactored. This should have no noticeable affect on
+any of the platforms that use it as part of their build (AIX, VMS, Win32).
=back
@@ -319,6 +396,15 @@ XXX Any changes to platform support should be listed in the sections below.
[ Within the sections, list each platform as a =item entry with specific
changes as paragraphs below it. ]
+=over 4
+
+=item HP-UX PA-RISC/64 now supports gcc-4.x
+
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds.
+
+=back
+
=head2 New Platforms
XXX List any platforms that this version of perl compiles on, that previous
@@ -373,7 +459,12 @@ be noted as well.
=item *
-XXX
+F<embedvar.h> has been simplified, and one level of macro indirection for
+PL_* variables has been removed for the default (non-multiplicity)
+configuration. PERLVAR*() macros now directly expand their arguments to
+tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with
+F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code
+which has unwarranted chumminess with the implementation may need updating.
=back
@@ -389,21 +480,18 @@ L</Modules and Pragmata>.
=item *
-Locking an lvalue subroutine (via C<lock &lvsub>) now locks the return
-value, instead of trying to lock the sub (which has no effect). It also no
-longer tries to return the sub as a scalar, resulting in strange side
-effects like C<ref \$_> returning "CODE" in some instances.
+Locking a subroutine (via C<lock &sub>) is no longer a compile-time error
+for regular subs. For lvalue subroutines, it no longer tries to return the
+sub as a scalar, resulting in strange side effects like C<ref \$_>
+returning "CODE" in some instances.
-=item *
-
-C<lock>'s prototype has been corrected to C<(\[$@%*])> from C<(\$)>, which
-was just wrong.
+C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a
+no-op otherwise), but that may be rectified in a future version.
=item *
-The prototypes for the core functions C<stat> and C<lstat> have been
-removed, as they were incorrect, because their syntax cannot be replicated
-by Perl subroutines.
+C<lock>'s prototype has been corrected to C<(\[$@%&*])> from C<(\$)>, which
+was just wrong.
=item *
@@ -426,6 +514,22 @@ A panic involving the combination of the regular expression modifiers
C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been
fixed [perl #95964].
+=item *
+
+stat() would always return the inode number as an IV, even when the
+original was unsigned, or too large to fit in an IV. stat() now
+returns the inode number as the type that would best preserve the
+original value. [perl #84590]
+
+=item *
+
+The combination of the regular expression modifiers C</aa> and the C<\b>
+and C<\B> escape sequences did not work properly on UTF-8 encoded
+strings. All non-ASCII characters under C</aa> should be treated as
+non-word characters, but what was happening was that Unicode rules were
+used to determine wordness/non-wordness for non-ASCII characters. This
+is now fixed [perl #95968].
+
=back
=head1 Known Problems
diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index 2c675fdc94..61d1ee8805 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -104,7 +104,7 @@ really meant to multiply a glob by the result of calling a function.
(W ambiguous) You wrote something like C<@{foo}>, which might be
asking for the variable C<@foo>, or it might be calling a function
named foo, and dereferencing it as an array reference. If you wanted
-the varable, you can just write C<@foo>. If you wanted to call the
+the variable, you can just write C<@foo>. If you wanted to call the
function, write C<@{foo()}> ... or you could just not have a variable
and a function with the same name, and save yourself a lot of trouble.
@@ -1475,6 +1475,16 @@ workarounds.
(F) The method which overloads "=" is buggy. See
L<overload/Copy Constructor>.
+=item &CORE::%s cannot be called directly
+
+(F) You tried to call a subroutine in the C<CORE::> namespace
+with C<&foo> syntax or through a reference. The subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. Something like this will work:
+
+ BEGIN { *shove = \&CORE::push; }
+ shove @array, 1,2,3; # pushes on to @array
+
=item CORE::%s is not a keyword
(F) The CORE:: namespace is reserved for Perl keywords.
@@ -1517,21 +1527,26 @@ array is empty, just use C<if (@array) { # not empty }> for example.
=item defined(%hash) is deprecated
-(D deprecated) C<defined()> is not usually useful on hashes, because it
-is not a reliable check for anything. Sometimes it returns true on
-an empty hash, and sometimes false. If a non-empty check is what you
-want then just use:
+(D deprecated) C<defined()> is not usually right on hashes and has been
+discouraged since 5.004.
+
+Although C<defined %hash> is false on a plain not-yet-used hash, it
+becomes true in several non-obvious circumstances, including iterators,
+weak references, stash names, even remaining true after C<undef %hash>.
+These things make C<defined %hash> fairly useless in practice.
+
+If a check for non-empty is what you wanted then just put it in boolean
+context (see L<perldata/Scalar values>):
if (%hash) {
# not empty
}
-If you had C<defined(%Foo::Bar::QUUX)> to check whether such a
-package variable exists, then it has never actually done that,
-but instead creates the hash if necessary (autovivification)
-then tests for non-empty. If you really want to check
-existence of a package variable then look at the glob slot
-with C<defined *Foo::Bar::QUUX{HASH}> (see L<perlref>).
+If you had C<defined %Foo::Bar::QUUX> to check whether such a package
+variable exists then that's never really been reliable, and isn't
+a good way to enquire about the features of a package, or whether
+it's loaded, etc.
+
=item (?(DEFINE)....) does not allow branches in regex; marked by <-- HERE in m/%s/
@@ -1959,14 +1974,14 @@ earlier in the line, and you really meant a "less than".
(W overflow) You called C<gmtime> with a number that was larger than
it can reliably handle and C<gmtime> probably returned the wrong
-date. This warning is also triggered with nan (the special
+date. This warning is also triggered with NaN (the special
not-a-number value).
=item gmtime(%f) too small
(W overflow) You called C<gmtime> with a number that was smaller than
it can reliably handle and C<gmtime> probably returned the wrong
-date. This warning is also triggered with nan (the special
+date. This warning is also triggered with NaN (the special
not-a-number value).
=item Got an error from DosAllocMem
@@ -2461,14 +2476,14 @@ L<perlfunc/listen>.
(W overflow) You called C<localtime> with a number that was larger
than it can reliably handle and C<localtime> probably returned the
-wrong date. This warning is also triggered with nan (the special
+wrong date. This warning is also triggered with NaN (the special
not-a-number value).
=item localtime(%f) too small
(W overflow) You called C<localtime> with a number that was smaller
than it can reliably handle and C<localtime> probably returned the
-wrong date. This warning is also triggered with nan (the special
+wrong date. This warning is also triggered with NaN (the special
not-a-number value).
=item Lookbehind longer than %d not implemented in regex m/%s/
diff --git a/pod/perlexperiment.pod b/pod/perlexperiment.pod
new file mode 100644
index 0000000000..f304120bc6
--- /dev/null
+++ b/pod/perlexperiment.pod
@@ -0,0 +1,305 @@
+=head1 NAME
+
+perlexperiment - A listing of experimental features in Perl
+
+=head1 DESCRIPTION
+
+This document lists the current and past experimental features in the perl
+core. Although all of these are documented with their appropriate topics,
+this succinct listing gives you an overview and basic facts about their
+status.
+
+So far I've merely tried to find and list the experimental features and infer
+their inception, versions, etc. There's a lot of speculation here.
+
+=head2 Current experiments
+
+=over 8
+
+=item fork() emulation
+
+Introduced in Perl 5.6.1
+
+See also L<perlfork>
+
+=item Weak references
+
+Introduced in Perl 5.6.0
+
+=item Internal file glob
+
+Introduced in Perl 5.6.0
+
+Accepted in XXX
+
+=item 64-bit support
+
+Introduced in Perl 5.005
+
+Accepted in XXX
+
+=item die accepts a reference
+
+Introduced in Perl 5.005
+
+Accepted in Perl XXX
+
+=item Unicode support
+
+Introduced in Perl 5.6.0
+
+Accepted in Perl 5.8.0 XXX
+
+=item -Dusemultiplicity -Dusethreads
+
+Introduced in Perl 5.6.0
+
+=item Long Doubles Still Don't Work In Solaris
+
+Introduced in Perl 5.7.0
+
+=item GetOpt::Long Options can now take multiple values at once (experimental)
+
+C<Getopt::Long> upgraded to version 2.35
+
+Removed in Perl 5.8.8
+
+=item 5.005-style threading
+
+Introduced in Perl 5.005
+
+Removed in Perl 5.10 XXX
+
+=item Test::Harness::Straps
+
+Removed in Perl 5.10.1
+
+=item perlcc
+
+Introduced in Perl 5.005
+
+Removed in Perl 5.9.0
+
+=item C<our> can now have an experimental optional attribute C<unique>
+
+Introduced in Perl 5.8.0
+
+Deprecated in Perl 5.10.0
+
+=item Assertions
+
+The C<-A> command line switch
+
+Introduced in Perl 5.9.0
+
+Removed in Perl 5.9.5
+
+=item Linux abstract Unix domain sockets
+
+Introduced in Perl 5.9.2
+
+See also L<Socket>
+
+=item L<Pod::HTML2Pod|Pod::HTML2Pod>
+
+=item L<Pod::PXML|Pod::PXML>
+
+=item threads
+
+=item The <:pop> IO pseudolayer
+
+See also L<perlrun>
+
+=item The <:win32> IO pseudolayer
+
+See also L<perlrun>
+
+=item MLDBM
+
+See also L<perldsc>
+
+=item internal functions with M flag
+
+See also L<perlguts>
+
+=item lex_start API
+
+Introduced in Perl 5.13.7
+
+=item internal API for C<%H>
+
+Introduced in Perl 5.13.7
+
+See also C<cophh_> in L<perlapi>.
+
+=item av_create_and_push
+
+=item av_create_and_unshift_one
+
+=item av_create_and_unshift_one
+
+=item PL_keyword_plugin
+
+=item hv_iternext_flags
+
+=item lex_bufutf8
+
+=item lex_discard_to
+
+=item lex_grow_linestr
+
+=item lex_next_chunk
+
+=item lex_peek_unichar
+
+=item lex_read_space
+
+=item lex_read_to
+
+=item lex_read_unichar
+
+=item lex_stuff_pv
+
+=item lex_stuff_pvn
+
+=item lex_stuff_pvs
+
+=item lex_stuff_sv
+
+=item lex_unstuff
+
+=item parse_fullstmt
+
+=item parse_stmtseq
+
+=item PL_parser-E<gt>bufend
+
+=item PL_parser-E<gt>bufptr
+
+=item PL_parser-E<gt>linestart
+
+=item PL_parser-E<gt>linestr
+
+=item Perl_signbit
+
+=item pad_findmy
+
+=item sv_utf8_decode
+
+=item sv_utf8_downgrade
+
+=item bytes_from_utf8
+
+=item bytes_to_utf8
+
+=item utf8_to_bytes
+
+=item DB module
+
+Introduced in Perl 5.6.0
+
+See also L<perldebug>, L<perldebtut>
+
+=item The pseudo-hash data type
+
+Introduced in Perl 5.6.0
+
+=item Lvalue subroutines
+
+Introduced in Perl 5.6.0
+
+See also L<perlsub>
+
+=item There is an C<installhtml> target in the Makefile.
+
+=item Unicode in Perl on EBCDIC
+
+=item C<(?{code})>
+
+See also L<perlre>
+
+=item C<(??{ code })>
+
+See also L<perlre>
+
+=item Backtracking control verbs
+
+C<(*ACCEPT)>
+
+Introduced in: Perl 5.10
+
+See also: L<perlre/"Special Backtracking Control Verbs">
+
+=item Code expressions, conditional expressions, and independent expressions in regexes
+
+=item The C<\N> regex character class
+
+The C<\N> character class, not to be confused with the named character
+sequence C<\N{NAME}>, denotes any non-newline character in a regular
+expression.
+
+Introduced in: Perl 5.12
+
+See also:
+
+=item gv_try_downgrade
+
+See also L<perlintern>
+
+=item Experimental Support for Sun Studio Compilers for Linux OS
+
+See also L<perllinux>
+
+=item Pluggable keywords
+
+See L<perlapi/PL_keyword_plugin> for the mechanism.
+
+Introduced in: Perl 5.11.2
+
+=back
+
+=head2 Accepted features
+
+These features were so wildly successful and played so well with others that
+we decided to remove their experimental status and admit them as full, stable
+features in the world of Perl, lavishing all the benefits and luxuries thereof.
+They are also awarded +5 Stability and +3 Charisma.
+
+=over 8
+
+=item (none yet identified)
+
+=back
+
+=head2 Removed features
+
+These features are no longer considered experimental and their functionality
+has disappeared. It's your own fault if you wrote production programs using
+these features after we explicitly told you not to (see L<perlpolicy>).
+
+=over 8
+
+=item C<legacy>
+
+The experimental C<legacy> pragma was swallowed by the C<feature> pragma.
+
+Introduced in: 5.11.2
+
+Removed in: 5.11.3
+
+=back
+
+=head1 AUTHORS
+
+brian d foy C<< <brian.d.foy@gmail.com> >>
+
+=head1 COPYRIGHT
+
+Copyright 2010, brian d foy C<< <brian.d.foy@gmail.com> >>
+
+=head1 LICENSE
+
+You can use and redistribute this document under the same terms as Perl
+itself.
+
+=cut
diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod
index 5255c4183a..04c6a05bf9 100644
--- a/pod/perlfunc.pod
+++ b/pod/perlfunc.pod
@@ -162,7 +162,8 @@ C<umask>, C<unlink>, C<utime>
X<control flow>
C<caller>, C<continue>, C<die>, C<do>, C<dump>, C<eval>, C<exit>,
-C<goto>, C<last>, C<next>, C<redo>, C<return>, C<sub>, C<wantarray>
+C<__FILE__>, C<goto>, C<last>, C<__LINE__>, C<next>, C<__PACKAGE__>,
+C<redo>, C<return>, C<sub>, C<wantarray>,
=item Keywords related to the switch feature
@@ -1625,7 +1626,7 @@ In the first form, the return value of EXPR is parsed and executed as if it
were a little Perl program. The value of the expression (which is itself
determined within scalar context) is first parsed, and if there were no
errors, executed as a block within the lexical context of the current Perl
-program. This means, that in particular, any outer lexical variables are
+program. This means, that in particular, any outer lexical variables are
visible to it, and any package variable settings or subroutine and format
definitions remain afterwards.
@@ -1656,8 +1657,9 @@ or an empty list--or, for syntax errors, a list containing a single
undefined value--in list context, and C<$@> is set to the error
message. The discrepancy in the return values in list context is
considered a bug by some, and will probably be fixed in a future
-release. If there was no error, C<$@> is guaranteed to be the empty
-string. Beware that using C<eval> neither silences Perl from printing
+release. If there was no error, C<$@> is set to the empty string. A
+control flow operator like C<last> or C<goto> can bypass the setting of
+C<$@>. Beware that using C<eval> neither silences Perl from printing
warnings to STDERR, nor does it stuff the text of warning messages into C<$@>.
To do either of those, you have to use the C<$SIG{__WARN__}> facility, or
turn off warnings inside the BLOCK or EXPR using S<C<no warnings 'all'>>.
@@ -1670,7 +1672,7 @@ the die operator is used to raise exceptions.
If you want to trap errors when loading an XS module, some problems with
the binary interface (such as Perl version skew) may be fatal even with
-C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
+C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
If the code to be executed doesn't vary, you may use the eval-BLOCK
form to trap run-time errors without incurring the penalty of
@@ -1758,7 +1760,7 @@ C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
An C<eval ''> executed within the C<DB> package doesn't see the usual
surrounding lexical scope, but rather the scope of the first non-DB piece
-of code that called it. You don't normally need to worry about this unless
+of code that called it. You don't normally need to worry about this unless
you are writing a Perl debugger.
=item exec LIST
@@ -1982,6 +1984,11 @@ on your own, though.
Portability issues: L<perlport/fcntl>.
+=item __FILE__
+X<__FILE__>
+
+A special token that returns the name of the file in which it occurs.
+
=item fileno FILEHANDLE
X<fileno>
@@ -2966,6 +2973,11 @@ characters, not physical bytes. For how many bytes a string encoded as
UTF-8 would take up, use C<length(Encode::encode_utf8(EXPR))> (you'll have
to C<use Encode> first). See L<Encode> and L<perlunicode>.
+=item __LINE__
+X<__LINE__>
+
+A special token that compiles to the current line number.
+
=item link OLDFILE,NEWFILE
X<link>
@@ -3083,7 +3095,7 @@ This function places an advisory lock on a shared variable or referenced
object contained in I<THING> until the lock goes out of scope.
The value returned is the scalar itself, if the argument is a scalar, or a
-reference, if the argument is a hash or array.
+reference, if the argument is a hash, array or subroutine.
lock() is a "weak keyword" : this means that if you've defined a function
by this name (before any calls to it), that function will be called
@@ -4014,7 +4026,7 @@ count. A numeric repeat count may optionally be enclosed in brackets, as
in C<pack("C[80]", @arr)>. The repeat count gobbles that many values from
the LIST when used with all format types other than C<a>, C<A>, C<Z>, C<b>,
C<B>, C<h>, C<H>, C<@>, C<.>, C<x>, C<X>, and C<P>, where it means
-something else, dscribed below. Supplying a C<*> for the repeat count
+something else, described below. Supplying a C<*> for the repeat count
instead of a number means to use however many items are left, except for:
=over
@@ -4576,6 +4588,11 @@ On systems that support a close-on-exec flag on files, that flag is set
on all newly opened file descriptors whose C<fileno>s are I<higher> than
the current value of $^F (by default 2 for C<STDERR>). See L<perlvar/$^F>.
+=item __PACKAGE__
+X<__PACKAGE__>
+
+A special token that returns the name of the package in which it occurs.
+
=item pop ARRAY
X<pop> X<stack>
@@ -6006,7 +6023,7 @@ sometimes saying the opposite, for example) the results are not
well-defined.
Because C<< <=> >> returns C<undef> when either operand is C<NaN>
-(not-a-number), and laso because C<sort> raises an exception unless the
+(not-a-number), and also because C<sort> raises an exception unless the
result of a comparison is defined, be careful when sorting with a
comparison function like C<< $a <=> $b >> any lists that might contain a
C<NaN>. The following example takes advantage that C<NaN != NaN> to
@@ -6094,7 +6111,7 @@ specified.
A pattern matching the empty string (not to be confused with
an empty pattern C<//>, which is just one member of the set of patterns
-matching the epmty string), splits EXPR into individual
+matching the empty string), splits EXPR into individual
characters. For example:
print join(':', split(/ */, 'hi there')), "\n";
@@ -6358,7 +6375,7 @@ For example:
printf '<%.1e>', 10; # prints "<1.0e+01>"
For "g" and "G", this specifies the maximum number of digits to show,
-including thoe prior to the decimal point and those after it; for
+including those prior to the decimal point and those after it; for
example:
# These examples are subject to system-specific variation.
diff --git a/pod/perlgit.pod b/pod/perlgit.pod
index eef06dab6d..a316e7bf97 100644
--- a/pod/perlgit.pod
+++ b/pod/perlgit.pod
@@ -51,7 +51,7 @@ branches in the repository:
The branches that begin with "origin" correspond to the "git remote"
that you cloned from (which is named "origin"). Each branch on the
-remote will be exactly tracked by theses branches. You should NEVER do
+remote will be exactly tracked by these branches. You should NEVER do
work on these remote tracking branches. You only ever do work in a
local branch. Local branches can be configured to automerge (on pull)
from a designated remote tracking branch. This is the case with the
@@ -720,7 +720,7 @@ repository is "p5p"):
$ git rebase p5p/blead
You will see your commits being re-applied, and you will then be able to
-push safetly. More information about rebasing can be found in the
+push safely. More information about rebasing can be found in the
documentation for the git-rebase(1) command.
For larger sets of commits that only make sense together, or that would
diff --git a/pod/perlglossary.pod b/pod/perlglossary.pod
index 2389872ca1..4d8bf00e44 100644
--- a/pod/perlglossary.pod
+++ b/pod/perlglossary.pod
@@ -507,7 +507,7 @@ the class (its L<objects|/object>). See also L</inheritance>.
=item class method
-A L</method> whose L</invocand> is a L</package> name, not an
+A L</method> whose L</invocant> is a L</package> name, not an
L</object> reference. A method associated with the class as a whole.
=item client
@@ -1470,7 +1470,7 @@ Perl, C<print STDOUT "$foo\n";> can be understood as "verb
indirect-object object" where L</STDOUT> is the recipient of the
L<print|perlfunc/print> action, and C<"$foo"> is the object being
printed. Similarly, when invoking a L</method>, you might place the
-invocand between the method and its arguments:
+invocant between the method and its arguments:
$gollum = new Pathetic::Creature "Smeagol";
give $gollum "Fisssssh!";
@@ -1548,11 +1548,11 @@ of compiler that takes a program and turns it into a more executable
form (L<syntax trees|/syntax tree>) within the I<perl> process itself,
which the Perl L</run time> system then interprets.
-=item invocand
+=item invocant
The agent on whose behalf a L</method> is invoked. In a L</class>
-method, the invocand is a package name. In an L</instance> method,
-the invocand is an object reference.
+method, the invocant is a package name. In an L</instance> method,
+the invocant is an object reference.
=item invocation
diff --git a/pod/perlhack.pod b/pod/perlhack.pod
index 3364d3259d..1bf2b882b8 100644
--- a/pod/perlhack.pod
+++ b/pod/perlhack.pod
@@ -1080,7 +1080,7 @@ each file's purpose. Perl instead begins each with a literary allusion
to that file's purpose.
Like chapters in many books, all top-level Perl source files (along
-with a few others here and there) begin with an epigramic inscription
+with a few others here and there) begin with an epigrammatic inscription
that alludes, indirectly and metaphorically, to the material you're
about to read.
diff --git a/pod/perlmod.pod b/pod/perlmod.pod
index eb66216916..f02193324f 100644
--- a/pod/perlmod.pod
+++ b/pod/perlmod.pod
@@ -575,7 +575,7 @@ like for example handle the cloning of non-Perl data, if necessary.
C<CLONE> will be called once as a class method for every package that has it
defined (or inherits it). It will be called in the context of the new thread,
so all modifications are made in the new area. Currently CLONE is called with
-no parameters other than the invocand package name, but code should not assume
+no parameters other than the invocant package name, but code should not assume
that this will remain unchanged, as it is likely that in future extra parameters
will be passed in to give more information about the state of cloning.
@@ -597,7 +597,7 @@ to make use of the objects, then a more sophisticated approach is
needed.
Like C<CLONE>, C<CLONE_SKIP> is currently called with no parameters other
-than the invocand package name, although that may change. Similarly, to
+than the invocant package name, although that may change. Similarly, to
allow for future expansion, the return value should be a single C<0> or
C<1> value.
diff --git a/pod/perlop.pod b/pod/perlop.pod
index f9d80d324c..9e83c52f82 100644
--- a/pod/perlop.pod
+++ b/pod/perlop.pod
@@ -1308,8 +1308,10 @@ in C<m/PATTERN/>. If "'" is used as the delimiter, no interpolation
is done. Returns a Perl value which may be used instead of the
corresponding C</STRING/msixpodual> expression. The returned value is a
normalized version of the original pattern. It magically differs from
-a string containing the same characters: C<ref(qr/x/)> returns "Regexp",
-even though dereferencing the result returns undef.
+a string containing the same characters: C<ref(qr/x/)> returns "Regexp";
+however, dereferencing it is not well defined (you currently get the
+normalized version of the original pattern, but this may change).
+
For example,
diff --git a/pod/perlperf.pod b/pod/perlperf.pod
index 4751e3591c..007a02bc87 100644
--- a/pod/perlperf.pod
+++ b/pod/perlperf.pod
@@ -597,7 +597,7 @@ the code.
C<NYTProf> will generate a report database into the file F<nytprof.out> by
default. Human readable reports can be generated from here by using the
supplied C<nytprofhtml> (HTML output) and C<nytprofcsv> (CSV output) programs.
-We've used the Unix sytem C<html2text> utility to convert the
+We've used the Unix system C<html2text> utility to convert the
F<nytprof/index.html> file for convenience here.
$> html2text nytprof/index.html
diff --git a/pod/perlpod.pod b/pod/perlpod.pod
index 068afe4177..0491dec1b7 100644
--- a/pod/perlpod.pod
+++ b/pod/perlpod.pod
@@ -238,7 +238,7 @@ region.
That is, with "=for", you can have only one paragraph's worth
of text (i.e., the text in "=foo targetname text..."), but with
"=begin targetname" ... "=end targetname", you can have any amount
-of stuff inbetween. (Note that there still must be a blank line
+of stuff in between. (Note that there still must be a blank line
after the "=begin" command and a blank line before the "=end"
command.
diff --git a/pod/perlreapi.pod b/pod/perlreapi.pod
index be75c84a06..e2a48e34d3 100644
--- a/pod/perlreapi.pod
+++ b/pod/perlreapi.pod
@@ -586,7 +586,7 @@ Substring data about strings that must appear in the final match. This
is currently only used internally by perl's engine for but might be
used in the future for all engines for optimisations.
-=head2 C<nparens>, C<lasparen>, and C<lastcloseparen>
+=head2 C<nparens>, C<lastparen>, and C<lastcloseparen>
These fields are used to keep track of how many paren groups could be matched
in the pattern, which was the last open paren to be entered, and which was
diff --git a/pod/perlrecharclass.pod b/pod/perlrecharclass.pod
index c79d1e6505..0e583fd902 100644
--- a/pod/perlrecharclass.pod
+++ b/pod/perlrecharclass.pod
@@ -423,7 +423,7 @@ Examples:
-------
* There is an exception to a bracketed character class matching a
-single character only. When the class is to match caselessely under C</i>
+single character only. When the class is to match caselessly under C</i>
matching rules, and a character inside the class matches a
multiple-character sequence caselessly under Unicode rules, the class
(when not L<inverted|/Negation>) will also match that sequence. For
diff --git a/pod/perlretut.pod b/pod/perlretut.pod
index af7ac32836..218e6b30dc 100644
--- a/pod/perlretut.pod
+++ b/pod/perlretut.pod
@@ -781,7 +781,7 @@ so may lead to surprising and unsatisfactory results.
=head2 Relative backreferences
Counting the opening parentheses to get the correct number for a
-backreference is errorprone as soon as there is more than one
+backreference is error-prone as soon as there is more than one
capturing group. A more convenient technique became available
with Perl 5.10: relative backreferences. To refer to the immediately
preceding capture group one now may write C<\g{-1}>, the next but
@@ -1537,7 +1537,7 @@ the regexp in the I<last successful match> is used instead. So we have
=head3 Global matching
-The final two modifiers we will disccuss here,
+The final two modifiers we will discuss here,
C<//g> and C<//c>, concern multiple matches.
The modifier C<//g> stands for global matching and allows the
matching operator to match within a string as many times as possible.
@@ -1870,7 +1870,7 @@ substituted.
C<\Q>, C<\L>, C<\l>, C<\U>, C<\u> and C<\E> are actually part of
double-quotish syntax, and not part of regexp syntax proper. They will
-work if they appear in a regular expression embeddded directly in a
+work if they appear in a regular expression embedded directly in a
program, but not when contained in a string that is interpolated in a
pattern.
@@ -2731,7 +2731,7 @@ groups or produce results, it may be necessary to use this in
combination with embedded code.
%count = ();
- "supercalifragilisticexpialidoceous" =~
+ "supercalifragilisticexpialidocious" =~
/([aeiou])(?{ $count{$1}++; })(*FAIL)/i;
printf "%3d '%s'\n", $count{$_}, $_ for (sort keys %count);
@@ -2744,7 +2744,7 @@ for another vowel. Thus, match or no match makes no difference, and the
regexp engine proceeds until the entire string has been inspected.
(It's remarkable that an alternative solution using something like
- $count{lc($_)}++ for split('', "supercalifragilisticexpialidoceous");
+ $count{lc($_)}++ for split('', "supercalifragilisticexpialidocious");
printf "%3d '%s'\n", $count2{$_}, $_ for ( qw{ a e i o u } );
is considerably slower.)
diff --git a/pod/perlsub.pod b/pod/perlsub.pod
index 4cc0b9c5e7..d344c4745c 100644
--- a/pod/perlsub.pod
+++ b/pod/perlsub.pod
@@ -1309,8 +1309,10 @@ built-in name with the special package qualifier C<CORE::>. For example,
saying C<CORE::open()> always refers to the built-in C<open()>, even
if the current package has imported some other subroutine called
C<&open()> from elsewhere. Even though it looks like a regular
-function call, it isn't: you can't take a reference to it, such as
-the incorrect C<\&CORE::open> might appear to produce.
+function call, it isn't: the CORE:: prefix in that case is part of Perl's
+syntax, and works for any keyword, regardless of what is in the CORE
+package. Taking a reference to it, that is, C<\&CORE::open>, only works
+for some keywords. See L<CORE>.
Library modules should not in general export built-in names like C<open>
or C<chdir> as part of their default C<@EXPORT> list, because these may
diff --git a/pod/perlvms.pod b/pod/perlvms.pod
index 241a66c39a..d88e6b14be 100644
--- a/pod/perlvms.pod
+++ b/pod/perlvms.pod
@@ -409,7 +409,7 @@ internal Perl problems that would cause such a condition.
This allows the programmer to look at the execution stack and variables to
find out the cause of the exception. As the debugger is being invoked as
the Perl interpreter is about to do a fatal exit, continuing the execution
-in debug mode is usally not practical.
+in debug mode is usually not practical.
Starting Perl in the VMS debugger may change the program execution
profile in a way that such problems are not reproduced.
diff --git a/pp.c b/pp.c
index 8649bec3cd..3421d9701d 100644
--- a/pp.c
+++ b/pp.c
@@ -438,8 +438,13 @@ PP(pp_prototype)
if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
const char * s = SvPVX_const(TOPs);
if (strnEQ(s, "CORE::", 6)) {
- SV *const sv = core_prototype(NULL, s + 6, SvCUR(TOPs) - 6, 1);
- if (sv) ret = sv;
+ const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
+ if (!code || code == -KEY_CORE)
+ DIE(aTHX_ "Can't find an opnumber for \"%s\"", s+6);
+ if (code < 0) { /* Overridable. */
+ SV * const sv = core_prototype(NULL, s + 6, code, NULL);
+ if (sv) ret = sv;
+ }
goto set;
}
}
@@ -5909,9 +5914,9 @@ PP(pp_lock)
dSP;
dTOPss;
SV *retsv = sv;
- assert(SvTYPE(retsv) != SVt_PVCV);
SvLOCK(sv);
- if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV) {
+ if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
+ || SvTYPE(retsv) == SVt_PVCV) {
retsv = refto(retsv);
}
SETs(retsv);
diff --git a/pp_ctl.c b/pp_ctl.c
index f226e0d940..c0a16e4e42 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3471,6 +3471,7 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
CvEVAL_on(PL_compcv);
assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
+ cxstack[cxstack_ix].blk_gimme = gimme;
CvOUTSIDE_SEQ(PL_compcv) = seq;
CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
@@ -3527,7 +3528,6 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
SV *namesv;
const char *msg;
- parse_error:
cx = NULL;
namesv = NULL;
PERL_UNUSED_VAR(newsp);
@@ -3589,20 +3589,6 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
} else
SAVEFREEOP(PL_eval_root);
- /* Set the context for this new optree.
- * Propagate the context from the eval(). */
- if ((gimme & G_WANT) == G_VOID)
- scalarvoid(PL_eval_root);
- else if ((gimme & G_WANT) == G_ARRAY)
- list(PL_eval_root);
- else
- scalar(PL_eval_root);
-
- finalize_optree(PL_eval_root);
-
- if (PL_parser->error_count) /* finalize_optree might have generated new error */
- goto parse_error;
-
DEBUG_x(dump_eval());
/* Register with debugger: */
diff --git a/pp_sys.c b/pp_sys.c
index 726be76c4b..a6949a9d33 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2834,7 +2834,15 @@ PP(pp_stat)
EXTEND(SP, max);
EXTEND_MORTAL(max);
mPUSHi(PL_statcache.st_dev);
+#if ST_INO_SIZE > IVSIZE
+ mPUSHn(PL_statcache.st_ino);
+#else
+# if ST_INO_SIGN <= 0
mPUSHi(PL_statcache.st_ino);
+# else
+ mPUSHu(PL_statcache.st_ino);
+# endif
+#endif
mPUSHu(PL_statcache.st_mode);
mPUSHu(PL_statcache.st_nlink);
#if Uid_t_size > IVSIZE
diff --git a/proto.h b/proto.h
index 6ddc11c7b9..814b710f1b 100644
--- a/proto.h
+++ b/proto.h
@@ -314,6 +314,13 @@ PERL_CALLCONV OP * Perl_ck_each(pTHX_ OP *o)
#define PERL_ARGS_ASSERT_CK_EACH \
assert(o)
+PERL_CALLCONV OP* Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
+ __attribute__nonnull__(pTHX_1)
+ __attribute__nonnull__(pTHX_2)
+ __attribute__nonnull__(pTHX_3);
+#define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE \
+ assert(entersubop); assert(namegv); assert(protosv)
+
PERL_CALLCONV OP* Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST \
@@ -571,7 +578,7 @@ PERL_CALLCONV void Perl_cop_store_label(pTHX_ COP *const cop, const char *label,
#define PERL_ARGS_ASSERT_COP_STORE_LABEL \
assert(cop); assert(label)
-PERL_CALLCONV SV * Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len, const bool croak)
+PERL_CALLCONV SV * Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, int * const opnum)
__attribute__nonnull__(pTHX_2);
#define PERL_ARGS_ASSERT_CORE_PROTOTYPE \
assert(name)
@@ -2282,7 +2289,6 @@ PERL_CALLCONV void Perl_mini_mktime(pTHX_ struct tm *ptm)
#define PERL_ARGS_ASSERT_MINI_MKTIME \
assert(ptm)
-PERL_CALLCONV OP* Perl_mod(pTHX_ OP* o, I32 type);
PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ const char* s, STRLEN len);
PERL_CALLCONV void * Perl_more_bodies(pTHX_ const svtype sv_type, const size_t body_size, const size_t arena_size);
PERL_CALLCONV const char* Perl_moreswitches(pTHX_ const char* s)
@@ -5459,6 +5465,7 @@ STATIC AV* S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level)
STATIC NV S_mulexp10(NV value, I32 exponent);
#endif
#if defined(PERL_IN_OP_C)
+PERL_STATIC_INLINE bool S_aassign_common_vars(pTHX_ OP* o);
STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
__attribute__nonnull__(pTHX_1)
__attribute__nonnull__(pTHX_2);
@@ -5552,7 +5559,7 @@ STATIC OP* S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp)
#define PERL_ARGS_ASSERT_NEW_LOGOP \
assert(firstp); assert(otherp)
-STATIC void S_no_bareword_allowed(pTHX_ const OP *o)
+STATIC void S_no_bareword_allowed(pTHX_ OP *o)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED \
assert(o)
@@ -5613,7 +5620,6 @@ STATIC OP* S_too_few_arguments(pTHX_ OP *o, const char* name)
assert(o); assert(name)
STATIC OP* S_too_many_arguments(pTHX_ OP *o, const char* name)
- __attribute__warn_unused_result__
__attribute__nonnull__(pTHX_1)
__attribute__nonnull__(pTHX_2);
#define PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS \
diff --git a/regen/embed.pl b/regen/embed.pl
index dac4d45089..71422bbaa8 100755
--- a/regen/embed.pl
+++ b/regen/embed.pl
@@ -360,36 +360,25 @@ EOF
warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;
walk_table(\&write_global_sym, "global.sym");
-sub readvars(\%$$@) {
- my ($syms, $file,$pre,$keep_pre) = @_;
+sub readvars {
+ my ($file, $pre) = @_;
local (*FILE, $_);
+ my %seen;
open(FILE, "< $file")
or die "embed.pl: Can't open $file: $!\n";
while (<FILE>) {
s/[ \t]*#.*//; # Delete comments.
- if (/PERLVARA?I?C?\($pre(\w+)/) {
- my $sym = $1;
- $sym = $pre . $sym if $keep_pre;
- warn "duplicate symbol $sym while processing $file line $.\n"
- if exists $$syms{$sym};
- $$syms{$sym} = $pre || 1;
+ if (/PERLVARA?I?C?\($pre,\s*(\w+)/) {
+ warn "duplicate symbol $1 while processing $file line $.\n"
+ if $seen{$1}++;
}
}
close(FILE);
+ return sort keys %seen;
}
-my %intrp;
-my %globvar;
-
-readvars %intrp, 'intrpvar.h','I';
-readvars %globvar, 'perlvars.h','G';
-
-my $sym;
-
-sub undefine ($) {
- my ($sym) = @_;
- "#undef $sym\n";
-}
+my @intrp = readvars 'intrpvar.h','I';
+my @globvar = readvars 'perlvars.h','G';
sub hide {
my ($from, $to, $indent) = @_;
@@ -398,22 +387,11 @@ sub hide {
"#${indent}define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
}
-sub bincompat_var ($$) {
- my ($pfx, $sym) = @_;
- my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
- undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
-}
-
sub multon ($$$) {
my ($sym,$pre,$ptr) = @_;
hide("PL_$sym", "($ptr$pre$sym)");
}
-sub multoff ($$) {
- my ($sym,$pre) = @_;
- return hide("PL_$pre$sym", "PL_$sym");
-}
-
my $em = open_print_header('embed.h');
print $em <<'END';
@@ -602,35 +580,21 @@ print $em <<'END';
END
-for $sym (sort keys %intrp) {
- print $em multon($sym,'I','vTHX->');
-}
-
-print $em <<'END';
-
-#else /* !MULTIPLICITY */
-
-/* case 1 above */
-
-END
+my $sym;
-for $sym (sort keys %intrp) {
- print $em multoff($sym,'I');
+for $sym (@intrp) {
+ print $em multon($sym,'I','vTHX->');
}
print $em <<'END';
-END
-
-print $em <<'END';
-
#endif /* MULTIPLICITY */
#if defined(PERL_GLOBAL_STRUCT)
END
-for $sym (sort keys %globvar) {
+for $sym (@globvar) {
print $em "#ifdef OS2\n" if $sym eq 'sh_path';
print $em multon($sym, 'G','my_vars->');
print $em multon("G$sym",'', 'my_vars->');
@@ -639,18 +603,6 @@ for $sym (sort keys %globvar) {
print $em <<'END';
-#else /* !PERL_GLOBAL_STRUCT */
-
-END
-
-for $sym (sort keys %globvar) {
- print $em "#ifdef OS2\n" if $sym eq 'sh_path';
- print $em multoff($sym,'G');
- print $em "#endif\n" if $sym eq 'sh_path';
-}
-
-print $em <<'END';
-
#endif /* PERL_GLOBAL_STRUCT */
END
@@ -671,11 +623,11 @@ START_EXTERN_C
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
-#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
-#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
- EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
+#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX);
+#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \
+ EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
+#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
#include "perlvars.h"
@@ -705,10 +657,10 @@ EXTCONST void * const PL_force_link_funcs[] = {
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
-#define PERLVAR(v,t) (void*)Perl_##v##_ptr,
-#define PERLVARA(v,n,t) PERLVAR(v,t)
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
+#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr,
+#define PERLVARA(p,v,n,t) PERLVAR(p,v,t)
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
+#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t)
/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
* cannot cast between void pointers and function pointers without
@@ -744,8 +696,9 @@ END_EXTERN_C
EOT
-foreach $sym (sort keys %globvar) {
- print $capih bincompat_var('G',$sym);
+foreach $sym (@globvar) {
+ print $capih
+ "#undef PL_$sym\n" . hide("PL_$sym", "(*Perl_G${sym}_ptr(NULL))");
}
print $capih <<'EOT';
@@ -781,17 +734,17 @@ print $capi <<'EOT';
START_EXTERN_C
#undef PERLVARI
-#define PERLVARI(v,t,i) PERLVAR(v,t)
+#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
#undef PERLVAR
#undef PERLVARA
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
+#define PERLVAR(p,v,t) t* Perl_##p##v##_ptr(pTHX) \
{ dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
+#define PERLVARA(p,v,n,t) PL_##v##_t* Perl_##p##v##_ptr(pTHX) \
{ dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
#undef PERLVARIC
-#define PERLVARIC(v,t,i) \
- const t* Perl_##v##_ptr(pTHX) \
+#define PERLVARIC(p,v,t,i) \
+ const t* Perl_##p##v##_ptr(pTHX) \
{ PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
#include "perlvars.h"
diff --git a/regen/opcodes b/regen/opcodes
index 2611111ff5..ec9c5a76d7 100644
--- a/regen/opcodes
+++ b/regen/opcodes
@@ -379,8 +379,8 @@ getpeername getpeername ck_fun is% Fs
# Stat calls. OP_IS_FILETEST wants them consecutive.
-lstat lstat ck_ftst u- F
-stat stat ck_ftst u- F
+lstat lstat ck_ftst u- F?
+stat stat ck_ftst u- F?
ftrread -R ck_ftst isu- F-+
ftrwrite -W ck_ftst isu- F-+
ftrexec -X ck_ftst isu- F-+
diff --git a/regexec.c b/regexec.c
index 76c91af1f7..bdd5e3faed 100644
--- a/regexec.c
+++ b/regexec.c
@@ -5683,6 +5683,8 @@ NULL
#define CASE_CLASS(nAmE) \
case nAmE: \
+ if (locinput >= PL_regeol) \
+ sayNO; \
if ((n=is_##nAmE(locinput,utf8_target))) { \
locinput += n; \
nextchr = UCHARAT(locinput); \
@@ -5690,6 +5692,8 @@ NULL
sayNO; \
break; \
case N##nAmE: \
+ if (locinput >= PL_regeol) \
+ sayNO; \
if ((n=is_##nAmE(locinput,utf8_target))) { \
sayNO; \
} else { \
diff --git a/scope.c b/scope.c
index e0ba9a366a..9a43eb0ebb 100644
--- a/scope.c
+++ b/scope.c
@@ -740,8 +740,7 @@ Perl_leave_scope(pTHX_ I32 base)
SvSETMAGIC(value);
PL_localizing = 0;
SvREFCNT_dec(value);
- if (av) /* actually an av, hv or gv */
- SvREFCNT_dec(av);
+ SvREFCNT_dec(av); /* av may actually be an AV, HV or GV */
break;
case SAVEt_GENERIC_PVREF: /* generic pv */
ptr = SSPOPPTR;
diff --git a/symbian/config.sh b/symbian/config.sh
index 7e47f6232a..2e531ae34d 100644
--- a/symbian/config.sh
+++ b/symbian/config.sh
@@ -779,6 +779,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
stdio_filbuf=''
stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
targetarch='thumb-symbian'
timetype=time_t
diff --git a/t/comp/bproto.t b/t/comp/bproto.t
index 70748be551..68b9786f6c 100644
--- a/t/comp/bproto.t
+++ b/t/comp/bproto.t
@@ -8,7 +8,7 @@ BEGIN {
@INC = '../lib';
}
-print "1..10\n";
+print "1..13\n";
my $i = 1;
@@ -41,4 +41,7 @@ q[ scalar(&foo,$bar);
grep(not($bar), $bar);
grep(not($bar, $bar), $bar);
grep((not $bar, $bar, $bar), $bar);
+ __FILE__();
+ __LINE__();
+ __PACKAGE__();
];
diff --git a/t/io/eintr.t b/t/io/eintr.t
index e545228f97..966922bbe7 100644
--- a/t/io/eintr.t
+++ b/t/io/eintr.t
@@ -49,7 +49,7 @@ if (exists $ENV{PERLIO} && $ENV{PERLIO} =~ /stdio/ ) {
# Also skip on release builds, to avoid other possibly problematic
# platforms
-if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'freebsd' ||
+if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O =~ /freebsd/ ||
($^O eq 'solaris' && $Config{osvers} eq '2.8')
|| ((int($]*1000) & 1) == 0)
) {
diff --git a/t/lib/strict/subs b/t/lib/strict/subs
index 87311f8a16..84bf874b25 100644
--- a/t/lib/strict/subs
+++ b/t/lib/strict/subs
@@ -432,3 +432,13 @@ ret
foo:
ret
bar
+########
+# infinite loop breaks some strict checking
+use strict 'subs';
+sub foo {
+ 1 while 1;
+ kill FOO, 1;
+}
+EXPECT
+Bareword "FOO" not allowed while "strict subs" in use at - line 5.
+Execution of - aborted due to compilation errors.
diff --git a/t/lib/warnings/op b/t/lib/warnings/op
index e596e7918a..b3cb7d6bed 100644
--- a/t/lib/warnings/op
+++ b/t/lib/warnings/op
@@ -755,6 +755,12 @@ EXPECT
Statement unlikely to be reached at - line 4.
(Maybe you meant system() when you said exec()?)
########
+# op.c, no warning if exec isn't a statement.
+use warnings 'syntax' ;
+$a || exec "$^X -e 1" ;
+my $a
+EXPECT
+########
# op.c
my @a; defined(@a);
EXPECT
diff --git a/t/mro/inconsistent_c3.t b/t/mro/inconsistent_c3.t
index 68d37950d4..ae01e9fdf2 100644
--- a/t/mro/inconsistent_c3.t
+++ b/t/mro/inconsistent_c3.t
@@ -46,4 +46,5 @@ except TypeError:
}
eval { mro::get_linear_isa('Z', 'c3') };
-like($@, qr/^Inconsistent /, '... got the right error with an inconsistent hierarchy');
+like($@, qr/^Inconsistent hierarchy during C3 merge of class 'Z'/,
+ '... got the right error with an inconsistent hierarchy');
diff --git a/t/op/array.t b/t/op/array.t
index f995ea34b2..aec4b30167 100644
--- a/t/op/array.t
+++ b/t/op/array.t
@@ -7,7 +7,7 @@ BEGIN {
require 'test.pl';
-plan (130);
+plan (131);
#
# @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them
@@ -427,6 +427,13 @@ sub test_arylen {
(our $y, our $z) = ($x,$y);
is("$x $y $z", "1 1 2");
}
+{
+ # AASSIGN_COMMON detection with logical operators
+ my $true = 1;
+ our($x,$y,$z) = (1..3);
+ (our $y, our $z) = $true && ($x,$y);
+ is("$x $y $z", "1 1 2");
+}
# [perl #70171]
{
diff --git a/t/op/coreinline.t b/t/op/coreinline.t
new file mode 100644
index 0000000000..ce3ce37c4e
--- /dev/null
+++ b/t/op/coreinline.t
@@ -0,0 +1,108 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib);
+ require "test.pl";
+ skip_all_without_dynamic_extension('B');
+ $^P |= 0x100;
+}
+
+use B::Deparse;
+my $bd = new B::Deparse '-p';
+
+my %unsupported = map +($_=>1), qw (CORE and cmp dump eq ge gt le
+ getprotobynumber lt ne not or x xor);
+my %args_for = (
+ dbmopen => '%1,$2,$3',
+ dbmclose => '%1',
+);
+
+use File::Spec::Functions;
+my $keywords_file = catfile(updir,'regen','keywords.pl');
+open my $kh, $keywords_file
+ or die "$0 cannot open $keywords_file: $!";
+while(<$kh>) {
+ if (m?__END__?..${\0} and /^[+-]/) {
+ chomp(my $word = $');
+ if($& eq '+' || $unsupported{$word}) {
+ $tests ++;
+ ok !defined &{\&{"CORE::$word"}}, "no CORE::$word";
+ }
+ else {
+ $tests += 3;
+
+ my $proto = prototype "CORE::$word";
+ *{"my$word"} = \&{"CORE::$word"};
+ is prototype \&{"my$word"}, $proto, "prototype of &CORE::$word";
+
+ CORE::state $protochar = qr/([^\\]|\\(?:[^[]|\[[^]]+\]))/;
+ my $numargs =
+ () = $proto =~ s/;.*//r =~ /\G$protochar/g;
+ my $code =
+ "#line 1 This-line-makes-__FILE__-easier-to-test.
+ sub { () = (my$word("
+ . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
+ . "))}";
+ my $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
+ my $my = $bd->coderef2text(eval $code or die);
+ is $my, $core, "inlinability of CORE::$word with parens";
+
+ $code =
+ "#line 1 This-line-makes-__FILE__-easier-to-test.
+ sub { () = (my$word "
+ . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
+ . ")}";
+ $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
+ $my = $bd->coderef2text(eval $code or die);
+ is $my, $core, "inlinability of CORE::$word without parens";
+
+ # High-precedence tests
+ my $hpcode;
+ if (!$proto && defined $proto) { # nullary
+ $hpcode = "sub { () = my$word + 1 }";
+ }
+ elsif ($proto =~ /^;?$protochar\z/) { # unary
+ $hpcode = "sub { () = my$word "
+ . ($args_for{$word}||'$a') . ' > $b'
+ .'}';
+ }
+ if ($hpcode) {
+ $tests ++;
+ $core = $bd->coderef2text(eval $hpcode =~ s/my/CORE::/r or die);
+ $my = $bd->coderef2text(eval $hpcode or die);
+ is $my, $core, "precedence of CORE::$word without parens";
+ }
+
+ next if ($proto =~ /\@/);
+ # These ops currently accept any number of args, despite their
+ # prototypes, if they have any:
+ next if $word =~ /^(?:chom?p|exec|keys|each|read(?:lin|pip)e|reset
+ |system|values|l?stat)/x;
+
+ $tests ++;
+ $code =
+ "sub { () = (my$word("
+ . (
+ $args_for{$word}
+ ? $args_for{$word}.',$7'
+ : join ",", map "\$$_", 1..$numargs+5+(
+ $proto =~ /;/
+ ? () = $' =~ /\G$protochar/g
+ : 0
+ )
+ )
+ . "))}";
+ eval $code;
+ like $@, qr/^Too many arguments for $word/,
+ "inlined CORE::$word with too many args"
+ or warn $code;
+
+ }
+ }
+}
+
+is curr_test, $tests+1, 'right number of tests';
+done_testing;
+
+CORE::__END__
diff --git a/t/op/cproto.t b/t/op/cproto.t
index ee9743375b..e995416fb3 100644
--- a/t/op/cproto.t
+++ b/t/op/cproto.t
@@ -7,7 +7,7 @@ BEGIN {
}
BEGIN { require './test.pl'; }
-plan tests => 243;
+plan tests => 244;
while (<DATA>) {
chomp;
@@ -32,6 +32,7 @@ __LINE__ ()
__PACKAGE__ ()
__DATA__ undef
__END__ undef
+CORE unknown
abs (_)
accept (**)
alarm (_)
@@ -137,9 +138,9 @@ link ($$)
listen (*$)
local undef
localtime (;$)
-lock (\[$@%*])
+lock (\[$@%&*])
log (_)
-lstat undef
+lstat (;*)
lt undef
m undef
map undef
@@ -196,7 +197,7 @@ say undef
scalar undef
seek (*$$)
seekdir (*$)
-select (;*)
+select undef
semctl ($$$$)
semget ($$$)
semop ($$)
@@ -226,7 +227,7 @@ split undef
sprintf ($@)
sqrt (_)
srand (;$)
-stat undef
+stat (;*)
state undef
study undef
sub undef
diff --git a/t/op/lock.t b/t/op/lock.t
index 2fd67821eb..c40ec4c9fd 100644
--- a/t/op/lock.t
+++ b/t/op/lock.t
@@ -10,9 +10,7 @@ plan tests => 5;
is \lock $foo, \$foo, 'lock returns a scalar argument';
is lock @foo, \@foo, 'lock returns a ref to its array argument';
is lock %foo, \%foo, 'lock returns a ref to its hash argument';
-eval { lock &foo }; my $file = __FILE__; my $line = __LINE__;
-is $@, "Can't modify non-lvalue subroutine call at $file line $line.\n",
- 'Error when locking non-lvalue sub';
+is lock &foo, \&foo, 'lock returns a ref to its code argument';
sub eulavl : lvalue { $x }
-is \lock &eulavl, \$x, 'locking lvalue sub acts on retval, just like tie';
+is lock &eulavl, \&eulavl, 'lock returns a ref to its lvalue sub arg';
diff --git a/t/op/sigdispatch.t b/t/op/sigdispatch.t
index d36c357fd2..e08e35f3af 100644
--- a/t/op/sigdispatch.t
+++ b/t/op/sigdispatch.t
@@ -50,7 +50,7 @@ SKIP: {
my $gotit = 0;
$SIG{USR1} = sub { $gotit++ };
- kill SIGUSR1, $$;
+ kill 'SIGUSR1', $$;
is $gotit, 0, 'Haven\'t received third signal yet';
my $old = POSIX::SigSet->new();
@@ -58,7 +58,7 @@ SKIP: {
is $gotit, 1, 'Received third signal';
{
- kill SIGUSR1, $$;
+ kill 'SIGUSR1', $$;
local $SIG{USR1} = sub { die "FAIL\n" };
POSIX::sigprocmask(&POSIX::SIG_BLOCK, undef, $old);
ok $old->ismember(&POSIX::SIGUSR1), 'SIGUSR1 is blocked';
@@ -73,7 +73,7 @@ TODO:
}
POSIX::sigprocmask(&POSIX::SIG_BLOCK, $new);
- kill SIGUSR1, $$;
+ kill 'SIGUSR1', $$;
is $gotit, 1, 'Haven\'t received fifth signal yet';
POSIX::sigprocmask(&POSIX::SIG_UNBLOCK, $new, $old);
ok $old->ismember(&POSIX::SIGUSR1), 'SIGUSR1 was still blocked';
diff --git a/t/porting/filenames.t b/t/porting/filenames.t
index 93f9dce379..268dd1c8c5 100644
--- a/t/porting/filenames.t
+++ b/t/porting/filenames.t
@@ -61,8 +61,8 @@ sub validate_file_name {
my @path_components = split('/',$path);
pop @path_components; # throw away the filename
for my $component (@path_components) {
- if ($component =~ /\..*?\./) {
- fail("no directory components containing more than one '.'");
+ if ($component =~ /\./) {
+ fail("no directory components containing '.'");
return;
}
if (length $component > 32) {
diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat
index 6d58627466..b6f55d3e75 100644
--- a/t/porting/known_pod_issues.dat
+++ b/t/porting/known_pod_issues.dat
@@ -132,221 +132,204 @@ Win32::Locale
YAML
YAML::Syck
YAML::Tiny
-dist/attribute-handlers/lib/attribute/handlers.pm Verbatim line length including indents exceeds 80 by 19
-dist/base/lib/fields.pm Verbatim line length including indents exceeds 80 by 1
dist/bignum/lib/bigint.pm Apparent broken link 1
-dist/bignum/lib/bigint.pm Verbatim line length including indents exceeds 80 by 1
dist/bignum/lib/bignum.pm Apparent broken link 1
-dist/bignum/lib/bignum.pm Verbatim line length including indents exceeds 80 by 1
dist/bignum/lib/bigrat.pm Apparent broken link 1
dist/constant/lib/constant.pm Apparent broken link 2
-dist/cwd/lib/file/spec.pm Verbatim line length including indents exceeds 80 by 1
-dist/cwd/lib/file/spec/mac.pm Verbatim line length including indents exceeds 80 by 9
-dist/cwd/lib/file/spec/unix.pm Verbatim line length including indents exceeds 80 by 1
-dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 80 by 1
-dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 80 by 1
+dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 79 by 1
+dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 79 by 1
dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1
-dist/data-dumper/dumper.pm Verbatim line length including indents exceeds 80 by 2
-dist/extutils-install/lib/extutils/installed.pm Verbatim line length including indents exceeds 80 by 2
-dist/extutils-parsexs/lib/extutils/typemaps.pm Verbatim line length including indents exceeds 80 by 4
-dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1
-dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 80 by 4
-dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 80 by 10
+dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 4
+dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10
dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1
-dist/i18n-langtags/lib/i18n/langtags.pm Verbatim line length including indents exceeds 80 by 2
-dist/io/io.pm Verbatim line length including indents exceeds 80 by 1
-dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 80 by 5
dist/locale-maketext/lib/locale/maketext.pod No items in =over / =back list 1
-dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 80 by 1
dist/locale-maketext/lib/locale/maketext/tpj13.pod No items in =over / =back list 3
dist/math-bigint/lib/math/bigfloat.pm Apparent broken link 7
dist/math-bigint/lib/math/bigfloat.pm Apparent internal link is missing its forward slash 6
-dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 80 by 28
dist/math-bigint/lib/math/bigint.pm Apparent broken link 5
dist/math-bigint/lib/math/bigint.pm Apparent internal link is missing its forward slash 7
-dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 80 by 122
+dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 86
dist/math-bigint/lib/math/bigint.pm empty section in previous paragraph 1
dist/math-bigint/lib/math/bigint/calcemu.pm Apparent broken link 1
dist/math-bigint/lib/math/bigint/calcemu.pm empty section in previous paragraph 3
dist/math-bigrat/lib/math/bigrat.pm Apparent broken link 3
dist/math-bigrat/lib/math/bigrat.pm Apparent internal link is missing its forward slash 1
-dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 80 by 7
-dist/module-corelist/blib/script/corelist Verbatim line length including indents exceeds 80 by 1
-dist/module-corelist/lib/module/corelist.pm Verbatim line length including indents exceeds 80 by 4
-dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 80 by 2
-dist/perlfaq/lib/perlfaq2.pod Verbatim line length including indents exceeds 80 by 1
-dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 80 by 16
-dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 80 by 40
-dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 80 by 36
-dist/perlfaq/lib/perlfaq7.pod Verbatim line length including indents exceeds 80 by 7
-dist/perlfaq/lib/perlfaq8.pod Verbatim line length including indents exceeds 80 by 20
-dist/perlfaq/lib/perlfaq9.pod Verbatim line length including indents exceeds 80 by 7
-dist/safe/safe.pm Verbatim line length including indents exceeds 80 by 1
+dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 79 by 7
+dist/module-corelist/blib/script/corelist Verbatim line length including indents exceeds 79 by 1
+dist/module-corelist/lib/module/corelist.pm Verbatim line length including indents exceeds 79 by 4
+dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 79 by 2
+dist/perlfaq/lib/perlfaq2.pod Verbatim line length including indents exceeds 79 by 1
+dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 79 by 16
+dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 79 by 40
+dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 79 by 36
+dist/perlfaq/lib/perlfaq7.pod Verbatim line length including indents exceeds 79 by 7
+dist/perlfaq/lib/perlfaq8.pod Verbatim line length including indents exceeds 79 by 20
+dist/perlfaq/lib/perlfaq9.pod Verbatim line length including indents exceeds 79 by 7
+dist/safe/safe.pm Verbatim line length including indents exceeds 79 by 1
dist/safe/safe.pm empty section in previous paragraph 1
-dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 80 by 14
-dist/storable/storable.pm Verbatim line length including indents exceeds 80 by 4
-dist/term-readline/lib/term/readline.pm Verbatim line length including indents exceeds 80 by 1
-dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 80 by 4
-dist/threads/lib/threads.pm Verbatim line length including indents exceeds 80 by 3
-ext/b/b.pm Verbatim line length including indents exceeds 80 by 1
-ext/b/b/concise.pm Verbatim line length including indents exceeds 80 by 1
+dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 79 by 14
+dist/storable/storable.pm Verbatim line length including indents exceeds 79 by 4
+dist/term-readline/lib/term/readline.pm Verbatim line length including indents exceeds 79 by 1
+dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 79 by 4
+dist/threads/lib/threads.pm Verbatim line length including indents exceeds 79 by 3
+ext/b/b.pm Verbatim line length including indents exceeds 79 by 1
+ext/b/b/concise.pm Verbatim line length including indents exceeds 79 by 1
ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2
-ext/devel-peek/peek.pm Verbatim line length including indents exceeds 80 by 2
-ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 80 by 1
-ext/file-glob/glob.pm Verbatim line length including indents exceeds 80 by 15
-ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 80 by 2
-ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 80 by 1
-ext/opcode/opcode.pm Verbatim line length including indents exceeds 80 by 10
-ext/posix/lib/posix.pod Verbatim line length including indents exceeds 80 by 29
-ext/re/re.pm Verbatim line length including indents exceeds 80 by 6
+ext/devel-peek/peek.pm Verbatim line length including indents exceeds 79 by 2
+ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 79 by 1
+ext/file-glob/glob.pm Verbatim line length including indents exceeds 79 by 15
+ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 79 by 2
+ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 79 by 1
+ext/opcode/opcode.pm Verbatim line length including indents exceeds 79 by 10
+ext/posix/lib/posix.pod Verbatim line length including indents exceeds 79 by 29
+ext/re/re.pm Verbatim line length including indents exceeds 79 by 6
ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1
-ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 80 by 1
-ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 80 by 1
-ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 80 by 1
+ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 79 by 1
+ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 79 by 1
+ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 79 by 1
install ? Should you be using F<...> or maybe L<...> instead of 1
-install Verbatim line length including indents exceeds 80 by 10
-installhtml Verbatim line length including indents exceeds 80 by 5
+install Verbatim line length including indents exceeds 79 by 10
+installhtml Verbatim line length including indents exceeds 79 by 5
os2/os2/os2-extattr/extattr.pm ? Should you be using F<...> or maybe L<...> instead of 1
-os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 80 by 27
-os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 80 by 2
-os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 80 by 1
-pod/perl.pod Verbatim line length including indents exceeds 80 by 9
-pod/perlaix.pod Verbatim line length including indents exceeds 80 by 11
+os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 79 by 27
+os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 79 by 2
+os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 79 by 1
+pod/perl.pod Verbatim line length including indents exceeds 79 by 9
+pod/perlaix.pod Verbatim line length including indents exceeds 79 by 11
pod/perlapi.pod ? Should you be using L<...> instead of 86
-pod/perlapi.pod Verbatim line length including indents exceeds 80 by 24
+pod/perlapi.pod Verbatim line length including indents exceeds 79 by 6
pod/perlapi.pod unresolved internal link 3
-pod/perlapio.pod Verbatim line length including indents exceeds 80 by 5
-pod/perlbook.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlcall.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlce.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlclib.pod Verbatim line length including indents exceeds 80 by 3
-pod/perlcygwin.pod Verbatim line length including indents exceeds 80 by 27
-pod/perldbmfilter.pod Verbatim line length including indents exceeds 80 by 1
-pod/perldebguts.pod Verbatim line length including indents exceeds 80 by 68
-pod/perldebtut.pod Verbatim line length including indents exceeds 80 by 22
-pod/perldebug.pod Verbatim line length including indents exceeds 80 by 3
+pod/perlapio.pod Verbatim line length including indents exceeds 79 by 5
+pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlcall.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlce.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlclib.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlcygwin.pod Verbatim line length including indents exceeds 79 by 27
+pod/perldbmfilter.pod Verbatim line length including indents exceeds 79 by 1
+pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 68
+pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 22
+pod/perldebug.pod Verbatim line length including indents exceeds 79 by 3
pod/perldiag.pod =item type mismatch 1
-pod/perldiag.pod Verbatim line length including indents exceeds 80 by 2
-pod/perldsc.pod Verbatim line length including indents exceeds 80 by 4
-pod/perldtrace.pod Verbatim line length including indents exceeds 80 by 22
-pod/perlebcdic.pod Verbatim line length including indents exceeds 80 by 273
-pod/perlembed.pod Verbatim line length including indents exceeds 80 by 27
+pod/perldiag.pod Verbatim line length including indents exceeds 79 by 2
+pod/perldsc.pod Verbatim line length including indents exceeds 79 by 4
+pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 22
+pod/perlebcdic.pod Verbatim line length including indents exceeds 79 by 273
+pod/perlembed.pod Verbatim line length including indents exceeds 79 by 27
pod/perlfunc.pod There is more than one target 1
-pod/perlfunc.pod Verbatim line length including indents exceeds 80 by 168
-pod/perlgit.pod Verbatim line length including indents exceeds 80 by 14
-pod/perlgpl.pod Verbatim line length including indents exceeds 80 by 50
+pod/perlfunc.pod Verbatim line length including indents exceeds 79 by 168
+pod/perlgit.pod Verbatim line length including indents exceeds 79 by 14
+pod/perlgpl.pod Verbatim line length including indents exceeds 79 by 50
pod/perlguts.pod ? Should you be using F<...> or maybe L<...> instead of 2
pod/perlguts.pod ? Should you be using L<...> instead of 1
-pod/perlguts.pod Verbatim line length including indents exceeds 80 by 25
+pod/perlguts.pod Verbatim line length including indents exceeds 79 by 25
pod/perlhack.pod ? Should you be using L<...> instead of 1
-pod/perlhack.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlhacktips.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlhist.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlhpux.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlhurd.pod Verbatim line length including indents exceeds 80 by 2
+pod/perlhack.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlhacktips.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlhist.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlhpux.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlhurd.pod Verbatim line length including indents exceeds 79 by 2
pod/perlintern.pod ? Should you be using L<...> instead of 5
-pod/perlintern.pod Verbatim line length including indents exceeds 80 by 2
pod/perlinterp.pod ? Should you be using L<...> instead of 1
-pod/perlinterp.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlintro.pod Verbatim line length including indents exceeds 80 by 11
-pod/perliol.pod Verbatim line length including indents exceeds 80 by 8
-pod/perlipc.pod Verbatim line length including indents exceeds 80 by 21
-pod/perlirix.pod Verbatim line length including indents exceeds 80 by 4
-pod/perllocale.pod Verbatim line length including indents exceeds 80 by 4
-pod/perllol.pod Verbatim line length including indents exceeds 80 by 4
-pod/perlmacosx.pod Verbatim line length including indents exceeds 80 by 3
-pod/perlmod.pod Verbatim line length including indents exceeds 80 by 3
-pod/perlmodlib.pod Verbatim line length including indents exceeds 80 by 3
-pod/perlmodstyle.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlmpeix.pod Verbatim line length including indents exceeds 80 by 2
+pod/perlinterp.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlintro.pod Verbatim line length including indents exceeds 79 by 11
+pod/perliol.pod Verbatim line length including indents exceeds 79 by 8
+pod/perlipc.pod Verbatim line length including indents exceeds 79 by 21
+pod/perlirix.pod Verbatim line length including indents exceeds 79 by 4
+pod/perllocale.pod Verbatim line length including indents exceeds 79 by 4
+pod/perllol.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlmacosx.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlmod.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlmodlib.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlmodstyle.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlmpeix.pod Verbatim line length including indents exceeds 79 by 2
pod/perlmroapi.pod ? Should you be using L<...> instead of 1
-pod/perlnetware.pod Verbatim line length including indents exceeds 80 by 4
-pod/perlnewmod.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlop.pod Verbatim line length including indents exceeds 80 by 30
+pod/perlnetware.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlnewmod.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlop.pod Verbatim line length including indents exceeds 79 by 30
pod/perlos2.pod ? Should you be using L<...> instead of 2
-pod/perlos2.pod Verbatim line length including indents exceeds 80 by 22
-pod/perlos390.pod Verbatim line length including indents exceeds 80 by 11
-pod/perlpacktut.pod Verbatim line length including indents exceeds 80 by 6
-pod/perlperf.pod Verbatim line length including indents exceeds 80 by 154
-pod/perlpodspec.pod Verbatim line length including indents exceeds 80 by 9
-pod/perlpodstyle.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlreapi.pod Verbatim line length including indents exceeds 80 by 17
-pod/perlrebackslash.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlref.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlreguts.pod Verbatim line length including indents exceeds 80 by 17
-pod/perlrequick.pod Verbatim line length including indents exceeds 80 by 3
-pod/perlretut.pod Verbatim line length including indents exceeds 80 by 13
-pod/perlrun.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlsec.pod Verbatim line length including indents exceeds 80 by 1
-pod/perlsolaris.pod Verbatim line length including indents exceeds 80 by 14
+pod/perlos2.pod Verbatim line length including indents exceeds 79 by 22
+pod/perlos390.pod Verbatim line length including indents exceeds 79 by 11
+pod/perlpacktut.pod Verbatim line length including indents exceeds 79 by 6
+pod/perlperf.pod Verbatim line length including indents exceeds 79 by 154
+pod/perlpodspec.pod Verbatim line length including indents exceeds 79 by 9
+pod/perlpodstyle.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlreapi.pod Verbatim line length including indents exceeds 79 by 17
+pod/perlrebackslash.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlref.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlreguts.pod Verbatim line length including indents exceeds 79 by 17
+pod/perlrequick.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlretut.pod Verbatim line length including indents exceeds 79 by 13
+pod/perlrun.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlsec.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlsolaris.pod Verbatim line length including indents exceeds 79 by 14
pod/perlsource.pod ? Should you be using F<...> or maybe L<...> instead of 1
pod/perlsub.pod ? Should you be using F<...> or maybe L<...> instead of 3
-pod/perlsub.pod Verbatim line length including indents exceeds 80 by 4
-pod/perlsymbian.pod Verbatim line length including indents exceeds 80 by 20
-pod/perlsyn.pod Verbatim line length including indents exceeds 80 by 7
-pod/perlthrtut.pod Verbatim line length including indents exceeds 80 by 5
-pod/perltie.pod Verbatim line length including indents exceeds 80 by 13
-pod/perltodo.pod Verbatim line length including indents exceeds 80 by 7
+pod/perlsub.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlsymbian.pod Verbatim line length including indents exceeds 79 by 20
+pod/perlsyn.pod Verbatim line length including indents exceeds 79 by 7
+pod/perlthrtut.pod Verbatim line length including indents exceeds 79 by 5
+pod/perltie.pod Verbatim line length including indents exceeds 79 by 13
+pod/perltodo.pod Verbatim line length including indents exceeds 79 by 7
pod/perltodo.pod empty section in previous paragraph 2
-pod/perltoot.pod Verbatim line length including indents exceeds 80 by 1
+pod/perltoot.pod Verbatim line length including indents exceeds 79 by 1
pod/perltrap.pod ? Should you be using F<...> or maybe L<...> instead of 1
-pod/perltrap.pod Verbatim line length including indents exceeds 80 by 15
+pod/perltrap.pod Verbatim line length including indents exceeds 79 by 15
pod/perltru64.pod ? Should you be using F<...> or maybe L<...> instead of 1
-pod/perltru64.pod Verbatim line length including indents exceeds 80 by 4
+pod/perltru64.pod Verbatim line length including indents exceeds 79 by 4
pod/perlunifaq.pod empty section in previous paragraph 1
-pod/perluniintro.pod Verbatim line length including indents exceeds 80 by 3
+pod/perluniintro.pod Verbatim line length including indents exceeds 79 by 3
pod/perluniprops.pod =item type mismatch 6
-pod/perlvar.pod Verbatim line length including indents exceeds 80 by 9
+pod/perlvar.pod Verbatim line length including indents exceeds 79 by 9
pod/perlvms.pod ? Should you be using F<...> or maybe L<...> instead of 1
-pod/perlvms.pod Verbatim line length including indents exceeds 80 by 2
-pod/perlwin32.pod Verbatim line length including indents exceeds 80 by 12
-porting/epigraphs.pod Verbatim line length including indents exceeds 80 by 3
-porting/expand-macro.pl Verbatim line length including indents exceeds 80 by 2
+pod/perlvms.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlwin32.pod Verbatim line length including indents exceeds 79 by 12
+porting/epigraphs.pod Verbatim line length including indents exceeds 79 by 3
+porting/expand-macro.pl Verbatim line length including indents exceeds 79 by 2
porting/how_to_write_a_perldelta.pod There is no NAME 1
-porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 80 by 3
-porting/pumpkin.pod Verbatim line length including indents exceeds 80 by 9
-porting/release_managers_guide.pod Verbatim line length including indents exceeds 80 by 9
+porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 79 by 3
+porting/pumpkin.pod Verbatim line length including indents exceeds 79 by 9
+porting/release_managers_guide.pod Verbatim line length including indents exceeds 79 by 9
porting/release_managers_guide.pod Verbatim paragraph in NAME section 1
porting/release_schedule.pod There is no NAME 1
-symbian/perlutil.pod Verbatim line length including indents exceeds 80 by 4
-utils/c2ph Verbatim line length including indents exceeds 80 by 44
+symbian/perlutil.pod Verbatim line length including indents exceeds 79 by 4
+utils/c2ph Verbatim line length including indents exceeds 79 by 44
utils/libnetcfg Apparent broken link 1
-vms/ext/filespec.pm Verbatim line length including indents exceeds 80 by 1
+vms/ext/filespec.pm Verbatim line length including indents exceeds 79 by 1
x2p/a2p.pod empty section in previous paragraph 2
-lib/benchmark.pm Verbatim line length including indents exceeds 80 by 4
+lib/benchmark.pm Verbatim line length including indents exceeds 79 by 4
lib/cpan/debug.pm There is no NAME 1
lib/cpan/handleconfig.pm =head2 without preceding higher level 1
lib/cpan/handleconfig.pm There is no NAME 1
-lib/class/struct.pm Verbatim line length including indents exceeds 80 by 7
+lib/class/struct.pm Verbatim line length including indents exceeds 79 by 7
lib/config.pod ? Should you be using L<...> instead of -1
lib/config.pod nested commands F<...F<...>...> 3
-lib/db.pm Verbatim line length including indents exceeds 80 by 2
-lib/dbm_filter.pm Verbatim line length including indents exceeds 80 by 1
-lib/dbm_filter/compress.pm Verbatim line length including indents exceeds 80 by 1
-lib/dbm_filter/encode.pm Verbatim line length including indents exceeds 80 by 1
-lib/dbm_filter/int32.pm Verbatim line length including indents exceeds 80 by 1
-lib/dbm_filter/null.pm Verbatim line length including indents exceeds 80 by 1
-lib/dbm_filter/utf8.pm Verbatim line length including indents exceeds 80 by 1
-lib/english.pm Verbatim line length including indents exceeds 80 by 1
-lib/exporter.pm Verbatim line length including indents exceeds 80 by 2
-lib/extutils/embed.pm Verbatim line length including indents exceeds 80 by 2
-lib/extutils/xssymset.pm Verbatim line length including indents exceeds 80 by 1
-lib/file/basename.pm Verbatim line length including indents exceeds 80 by 2
-lib/file/find.pm Verbatim line length including indents exceeds 80 by 1
-lib/getopt/std.pm Verbatim line length including indents exceeds 80 by 1
-lib/perlio.pm Verbatim line length including indents exceeds 80 by 2
-lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 80 by 1
-lib/tie/array.pm Verbatim line length including indents exceeds 80 by 1
-lib/tie/hash.pm Verbatim line length including indents exceeds 80 by 3
-lib/tie/scalar.pm Verbatim line length including indents exceeds 80 by 1
-lib/unicode/ucd.pm Verbatim line length including indents exceeds 80 by 1
-lib/deprecate.pm Verbatim line length including indents exceeds 80 by 2
-lib/integer.pm Verbatim line length including indents exceeds 80 by 1
-lib/overload.pm Verbatim line length including indents exceeds 80 by 1
+lib/db.pm Verbatim line length including indents exceeds 79 by 2
+lib/dbm_filter.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/compress.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/encode.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/int32.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/null.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/utf8.pm Verbatim line length including indents exceeds 79 by 1
+lib/english.pm Verbatim line length including indents exceeds 79 by 1
+lib/exporter.pm Verbatim line length including indents exceeds 79 by 2
+lib/extutils/embed.pm Verbatim line length including indents exceeds 79 by 2
+lib/extutils/xssymset.pm Verbatim line length including indents exceeds 79 by 1
+lib/file/basename.pm Verbatim line length including indents exceeds 79 by 2
+lib/file/find.pm Verbatim line length including indents exceeds 79 by 1
+lib/getopt/std.pm Verbatim line length including indents exceeds 79 by 1
+lib/perlio.pm Verbatim line length including indents exceeds 79 by 2
+lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 79 by 1
+lib/tie/array.pm Verbatim line length including indents exceeds 79 by 1
+lib/tie/hash.pm Verbatim line length including indents exceeds 79 by 3
+lib/tie/scalar.pm Verbatim line length including indents exceeds 79 by 1
+lib/unicode/ucd.pm Verbatim line length including indents exceeds 79 by 1
+lib/deprecate.pm Verbatim line length including indents exceeds 79 by 2
+lib/integer.pm Verbatim line length including indents exceeds 79 by 1
+lib/overload.pm Verbatim line length including indents exceeds 79 by 1
lib/perl5db.pl ? Should you be using L<...> instead of 1
-lib/perl5db.pl Verbatim line length including indents exceeds 80 by 1
-lib/strict.pm Verbatim line length including indents exceeds 80 by 1
-lib/utf8.pm Verbatim line length including indents exceeds 80 by 4
-lib/version.pod Verbatim line length including indents exceeds 80 by 2
-lib/version/internals.pod Verbatim line length including indents exceeds 80 by 2
-lib/vmsish.pm Verbatim line length including indents exceeds 80 by 1
+lib/perl5db.pl Verbatim line length including indents exceeds 79 by 1
+lib/strict.pm Verbatim line length including indents exceeds 79 by 1
+lib/utf8.pm Verbatim line length including indents exceeds 79 by 4
+lib/version.pod Verbatim line length including indents exceeds 79 by 2
+lib/version/internals.pod Verbatim line length including indents exceeds 79 by 2
+lib/vmsish.pm Verbatim line length including indents exceeds 79 by 1
diff --git a/t/porting/podcheck.t b/t/porting/podcheck.t
index 1830410553..5c10543fd8 100644
--- a/t/porting/podcheck.t
+++ b/t/porting/podcheck.t
@@ -5,6 +5,7 @@ use warnings;
use feature 'unicode_strings';
use Carp;
+use Config;
use Digest;
use File::Find;
use File::Spec;
@@ -71,13 +72,14 @@ If a link is broken, but there is an existing internal target of the same
name, it is likely that the internal target was meant, and the C<"/"> is
missing from the C<LE<lt>E<gt>> pod command.
-=item Verbatim paragraphs that wrap in an 80 column window
+=item Verbatim paragraphs that wrap in an 80 (including 1 spare) column window
It's annoying to have lines wrap when displaying pod documentation in a
-terminal window. This checks that all such lines fit, and for those that
-don't, it tells you how much needs to be cut in order to fit. However,
-if you're fixing these, keep in mind that some terminal/pager combinations
-require really a maximum of 79 or 78 columns to display properly.
+terminal window. This checks that all verbatim lines fit in a standard 80
+column window, even when using a pager that reserves a column for its own use.
+(Thus the check is for a net of 79 columns.)
+For those lines that don't fit, it tells you how much needs to be cut in
+order to fit.
Often, the easiest thing to do to gain space for these is to lower the indent
to just one space.
@@ -279,7 +281,7 @@ my $data_dir = File::Spec->catdir($original_dir, 'porting');
my $known_issues = File::Spec->catfile($data_dir, 'known_pod_issues.dat');
my $copy_fh;
-my $MAX_LINE_LENGTH = 80; # 80 columns
+my $MAX_LINE_LENGTH = 79; # 79 columns
my $INDENT = 7; # default nroff indent
# Our warning messages. Better not have [('"] in them, as those are used as
@@ -299,14 +301,40 @@ my $missing_name_description = "The NAME should have a dash and short descriptio
# objects, tests, etc can't be pods, so don't look for them. Also skip
# files output by the patch program. Could also ignore most of .gitignore
# files, but not all, so don't.
+
+my $obj_ext = $Config{'obj_ext'}; $obj_ext =~ tr/.//d; # dot will be added back
+my $lib_ext = $Config{'lib_ext'}; $lib_ext =~ tr/.//d;
+my $lib_so = $Config{'so'}; $lib_so =~ tr/.//d;
+my $dl_ext = $Config{'dlext'}; $dl_ext =~ tr/.//d;
+
my $non_pods = qr/ (?: \.
- (?: [achot] | zip | gz | bz2 | jar | tar | tgz | PL | so
+ (?: [achot] | zip | gz | bz2 | jar | tar | tgz | PL
| orig | rej | patch # Patch program output
| sw[op] | \#.* # Editor droppings
| old # buildtoc output
+ | xs # pod should be in the .pm file
+ | al # autosplit files
+ | bs # bootstrap files
+ | (?i:sh) # shell scripts, hints, templates
+ | lst # assorted listing files
+ | bat # Windows,Netware,OS2 batch files
+ | cmd # Windows,Netware,OS2 command files
+ | lis # VMS compiler listings
+ | map # VMS linker maps
+ | opt # VMS linker options files
+ | mms # MM(K|S) description files
+ | ts # timestamp files generated during build
+ | $obj_ext # object files
+ | exe # $Config{'exe_ext'} might be empty string
+ | $lib_ext # object libraries
+ | $lib_so # shared libraries
+ | $dl_ext # dynamic libraries
)
$
- ) | ~$ # Another editor dropping
+ ) | ~$ | \ \(Autosaved\)\.txt$ # Other editor droppings
+ | ^cxx\$demangler_db\.$ # VMS name mangler database
+ | ^typemap\.?$ # typemap files
+ | ^(?i:Makefile\.PL)$
/x;
@@ -392,6 +420,7 @@ sub canonicalize($) {
# Assumes $volume is constant for everything in this directory structure
$directories = "" if ! $directories;
$file = "" if ! $file;
+ $file =~ s/\.$// if $^O eq 'VMS';
my $output = lc join '/', File::Spec->splitdir($directories), $file;
$output =~ s! / /+ !/!gx; # Multiple slashes => single slash
return $output;
@@ -672,12 +701,7 @@ package My::Pod::Checker { # Extend Pod::Checker
$lines[$i] =~ s/\s+$//;
my $indent = $self->get_current_indent;
my $exceeds = length(Text::Tabs::expand($lines[$i]))
-
- # To see why the +1 is needed, consider
- # $MAX_LINE_LENGTH == 80, with an $indent also of
- # 80. Then, any text starts in column 81, and so
- # a line with length 1 exceeds 80 by 1.
- + $indent - $MAX_LINE_LENGTH + 1;
+ + $indent - $MAX_LINE_LENGTH;
next unless $exceeds > 0;
my ($file, $line) = $pod_para->file_line;
$self->poderror({ -line => $line + $i, -file => $file,
@@ -1182,8 +1206,12 @@ sub is_pod_file {
return;
}
- return if $_ =~ /^\./; # No hidden Unix files
- return if $_ =~ $non_pods;
+ if ($_ =~ /^\./ # No hidden Unix files
+ || $_ =~ $non_pods) {
+ note("Not considering $_") if DEBUG;
+ return;
+ }
+
my $filename = $File::Find::name;
diff --git a/t/re/re_tests b/t/re/re_tests
index 35a72203cd..978e02c1dd 100644
--- a/t/re/re_tests
+++ b/t/re/re_tests
@@ -1,7 +1,10 @@
# This stops me getting screenfulls of syntax errors every time I accidentally
-# run this file via a shell glob. Format of this file is given in regexp.t
+# run this file via a shell glob. The full format of this file is given
+# in regexp.t
# Can't use \N{VALID NAME TEST} here because need 'use charnames'; but can use
# \N{U+valid} here.
+#
+# pat string y/n/etc expr expected-expr skip-reason
__END__
abc abc y $& abc
abc abc y $-[0] 0
@@ -1522,4 +1525,9 @@ abc\N{def - c - \\N{NAME} must be resolved by the lexer
# See [perl #89750]. This makes sure that the simple fold gets generated
# in that case, to DF.
/[^\x{1E9E}]/i \x{DF} n - -
+
+# RT #96354
+/^.*\d\H/ X1 n - -
+/^.*\d\V/ X1 n - -
+
# vim: softtabstop=0 noexpandtab
diff --git a/toke.c b/toke.c
index ef215a5cb3..1bf7e18c86 100644
--- a/toke.c
+++ b/toke.c
@@ -224,6 +224,7 @@ static const char* const lex_state_names[] = {
* LOOPX : loop exiting command (goto, last, dump, etc)
* FTST : file test operator
* FUN0 : zero-argument function
+ * FUN0OP : zero-argument function, with its op created in this file
* FUN1 : not used, except for not, which isn't a UNIOP
* BOop : bitwise or or xor
* BAop : bitwise and
@@ -254,6 +255,7 @@ static const char* const lex_state_names[] = {
#define LOOPX(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)LOOPEX))
#define FTST(f) return (pl_yylval.ival=f, PL_expect=XTERMORDORDOR, PL_bufptr=s, REPORT((int)UNIOP))
#define FUN0(f) return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0))
+#define FUN0OP(f) return (pl_yylval.opval=f, CLINE, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0OP))
#define FUN1(f) return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC1))
#define BOop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITOROP)))
#define BAop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITANDOP)))
@@ -346,6 +348,7 @@ static struct debug_tokens {
{ FORMAT, TOKENTYPE_NONE, "FORMAT" },
{ FUNC, TOKENTYPE_OPNUM, "FUNC" },
{ FUNC0, TOKENTYPE_OPNUM, "FUNC0" },
+ { FUNC0OP, TOKENTYPE_OPVAL, "FUNC0OP" },
{ FUNC0SUB, TOKENTYPE_OPVAL, "FUNC0SUB" },
{ FUNC1, TOKENTYPE_OPNUM, "FUNC1" },
{ FUNCMETH, TOKENTYPE_OPVAL, "FUNCMETH" },
@@ -6923,21 +6926,24 @@ Perl_yylex(pTHX)
}
case KEY___FILE__:
- pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0,
- newSVpv(CopFILE(PL_curcop),0));
- TERM(THING);
+ FUN0OP(
+ pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0,
+ newSVpv(CopFILE(PL_curcop),0))
+ );
case KEY___LINE__:
- pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0,
- Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)));
- TERM(THING);
+ FUN0OP(
+ (OP*)newSVOP(OP_CONST, 0,
+ Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)))
+ );
case KEY___PACKAGE__:
- pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0,
+ FUN0OP(
+ (OP*)newSVOP(OP_CONST, 0,
(PL_curstash
? newSVhek(HvNAME_HEK(PL_curstash))
- : &PL_sv_undef));
- TERM(THING);
+ : &PL_sv_undef))
+ );
case KEY___DATA__:
case KEY___END__: {
diff --git a/uconfig.h b/uconfig.h
index c17d9233f4..c8eeed00c7 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -4354,6 +4354,16 @@
*/
#define SELECT_MIN_BITS 32 /**/
+/* ST_INO_SIZE:
+ * This variable contains the size of struct stat's st_ino in bytes.
+ */
+/* ST_INO_SIGN:
+ * This symbol holds the signedess of struct stat's st_ino.
+ * 1 for unsigned, -1 for signed.
+ */
+#define ST_INO_SIGN 1 /* st_ino sign */
+#define ST_INO_SIZE 4 /* st_ino size */
+
/* STARTPERL:
* This variable contains the string to put in front of a perl
* script to make sure (one hopes) that it runs with perl and not
@@ -4686,6 +4696,6 @@
#endif
/* Generated from:
- * 323778627146f2762cd41f4dd1db6659f59006ec9bcaaf6bcc645d0380dda938 config_h.SH
- * 0af1263ef6eca52a40334d5df3744c198c20b7f8d4b087dbf445e2e387459eeb uconfig.sh
+ * 0f70463fec894befd8b575cde82695d5f1ad41a02f78afd34357a24f7b069d05 config_h.SH
+ * 9ea5c7e8b0b32c76caab5a89a371b8cdce6efcf690a5a74962b9b856fab49fed uconfig.sh
* ex: set ro: */
diff --git a/uconfig.sh b/uconfig.sh
index 5fb50a01a8..1798d0d6d4 100644
--- a/uconfig.sh
+++ b/uconfig.sh
@@ -745,6 +745,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
stdio_filbuf=''
stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
targetarch=''
timetype=time_t
diff --git a/uconfig64.sh b/uconfig64.sh
index a98abb6484..38784313b0 100644
--- a/uconfig64.sh
+++ b/uconfig64.sh
@@ -738,6 +738,8 @@ srand48_r_proto='0'
srandom_r_proto='0'
src='.'
ssizetype=long
+st_ino_sign='1'
+st_ino_size='8'
startperl='#!perl'
stdchar=char
stdio_base='((fp)->_IO_read_base)'
diff --git a/util.c b/util.c
index e22a97f721..a5ec8ea11f 100644
--- a/util.c
+++ b/util.c
@@ -5870,10 +5870,10 @@ Perl_init_global_struct(pTHX)
# undef PERLVARA
# undef PERLVARI
# undef PERLVARIC
-# define PERLVAR(var,type) /**/
-# define PERLVARA(var,n,type) /**/
-# define PERLVARI(var,type,init) plvarsp->var = init;
-# define PERLVARIC(var,type,init) plvarsp->var = init;
+# define PERLVAR(prefix,var,type) /**/
+# define PERLVARA(prefix,var,n,type) /**/
+# define PERLVARI(prefix,var,type,init) plvarsp->prefix##var = init;
+# define PERLVARIC(prefix,var,type,init) plvarsp->prefix##var = init;
# include "perlvars.h"
# undef PERLVAR
# undef PERLVARA
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
index bc5ea1465e..57e7439d45 100644
--- a/vms/descrip_mms.template
+++ b/vms/descrip_mms.template
@@ -355,7 +355,7 @@ unidatadirs = lib/unicore/To lib/unicore/lib
# Modules which must be installed before we can build extensions
LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl [.lib.VMS]Filespec.pm $(ARCHDIR)vmspipe.com [.lib]buildcustomize.pl
-utils1 = [.lib.pods]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com
+utils1 = [.utils]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com
utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]json_pp.com
utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]instmodsh.com
utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com [.utils]ptar.com [.utils]ptardiff.com [.utils]shasum.com
@@ -391,43 +391,6 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com
extra.pods : miniperl
@ @extra_pods.com
-pod0 = [.lib.pods]perl.pod [.lib.pods]perl5004delta.pod [.lib.pods]perl5005delta.pod [.lib.pods]perl5100delta.pod [.lib.pods]perl5101delta.pod
-pod1 = [.lib.pods]perl5110delta.pod [.lib.pods]perl5111delta.pod [.lib.pods]perl5112delta.pod [.lib.pods]perl5113delta.pod [.lib.pods]perl5114delta.pod
-pod2 = [.lib.pods]perl5115delta.pod [.lib.pods]perl5120delta.pod [.lib.pods]perl5121delta.pod [.lib.pods]perl5122delta.pod [.lib.pods]perl5123delta.pod
-pod3 = [.lib.pods]perl5124delta.pod [.lib.pods]perl5130delta.pod [.lib.pods]perl51310delta.pod [.lib.pods]perl51311delta.pod [.lib.pods]perl5131delta.pod
-pod4 = [.lib.pods]perl5132delta.pod [.lib.pods]perl5133delta.pod [.lib.pods]perl5134delta.pod [.lib.pods]perl5135delta.pod [.lib.pods]perl5136delta.pod
-pod5 = [.lib.pods]perl5137delta.pod [.lib.pods]perl5138delta.pod [.lib.pods]perl5139delta.pod [.lib.pods]perl5140delta.pod [.lib.pods]perl5141delta.pod
-pod6 = [.lib.pods]perl5150delta.pod [.lib.pods]perl5151delta.pod [.lib.pods]perl5152delta.pod [.lib.pods]perl561delta.pod [.lib.pods]perl56delta.pod
-pod7 = [.lib.pods]perl570delta.pod [.lib.pods]perl571delta.pod [.lib.pods]perl572delta.pod [.lib.pods]perl573delta.pod [.lib.pods]perl581delta.pod
-pod8 = [.lib.pods]perl582delta.pod [.lib.pods]perl583delta.pod [.lib.pods]perl584delta.pod [.lib.pods]perl585delta.pod [.lib.pods]perl586delta.pod
-pod9 = [.lib.pods]perl587delta.pod [.lib.pods]perl588delta.pod [.lib.pods]perl589delta.pod [.lib.pods]perl58delta.pod [.lib.pods]perl590delta.pod
-pod10 = [.lib.pods]perl591delta.pod [.lib.pods]perl592delta.pod [.lib.pods]perl593delta.pod [.lib.pods]perl594delta.pod [.lib.pods]perl595delta.pod
-pod11 = [.lib.pods]perlaix.pod [.lib.pods]perlamiga.pod [.lib.pods]perlapi.pod [.lib.pods]perlapio.pod [.lib.pods]perlartistic.pod [.lib.pods]perlbeos.pod
-pod12 = [.lib.pods]perlbook.pod [.lib.pods]perlboot.pod [.lib.pods]perlbot.pod [.lib.pods]perlbs2000.pod [.lib.pods]perlcall.pod [.lib.pods]perlce.pod
-pod13 = [.lib.pods]perlcheat.pod [.lib.pods]perlclib.pod [.lib.pods]perlcn.pod [.lib.pods]perlcommunity.pod [.lib.pods]perlcompile.pod
-pod14 = [.lib.pods]perlcygwin.pod [.lib.pods]perldata.pod [.lib.pods]perldbmfilter.pod [.lib.pods]perldebguts.pod [.lib.pods]perldebtut.pod
-pod15 = [.lib.pods]perldebug.pod [.lib.pods]perldelta.pod [.lib.pods]perldgux.pod [.lib.pods]perldiag.pod [.lib.pods]perldos.pod [.lib.pods]perldsc.pod
-pod16 = [.lib.pods]perldtrace.pod [.lib.pods]perlebcdic.pod [.lib.pods]perlembed.pod [.lib.pods]perlepoc.pod [.lib.pods]perlfilter.pod
-pod17 = [.lib.pods]perlfork.pod [.lib.pods]perlform.pod [.lib.pods]perlfreebsd.pod [.lib.pods]perlfunc.pod [.lib.pods]perlgit.pod [.lib.pods]perlglossary.pod
-pod18 = [.lib.pods]perlgpl.pod [.lib.pods]perlguts.pod [.lib.pods]perlhack.pod [.lib.pods]perlhacktips.pod [.lib.pods]perlhacktut.pod
-pod19 = [.lib.pods]perlhaiku.pod [.lib.pods]perlhist.pod [.lib.pods]perlhpux.pod [.lib.pods]perlhurd.pod [.lib.pods]perlintern.pod [.lib.pods]perlinterp.pod
-pod20 = [.lib.pods]perlintro.pod [.lib.pods]perliol.pod [.lib.pods]perlipc.pod [.lib.pods]perlirix.pod [.lib.pods]perljp.pod [.lib.pods]perlko.pod
-pod21 = [.lib.pods]perllexwarn.pod [.lib.pods]perllinux.pod [.lib.pods]perllocale.pod [.lib.pods]perllol.pod [.lib.pods]perlmacos.pod
-pod22 = [.lib.pods]perlmacosx.pod [.lib.pods]perlmod.pod [.lib.pods]perlmodinstall.pod [.lib.pods]perlmodlib.pod [.lib.pods]perlmodstyle.pod
-pod23 = [.lib.pods]perlmpeix.pod [.lib.pods]perlmroapi.pod [.lib.pods]perlnetware.pod [.lib.pods]perlnewmod.pod [.lib.pods]perlnumber.pod
-pod24 = [.lib.pods]perlobj.pod [.lib.pods]perlop.pod [.lib.pods]perlopenbsd.pod [.lib.pods]perlopentut.pod [.lib.pods]perlos2.pod [.lib.pods]perlos390.pod
-pod25 = [.lib.pods]perlos400.pod [.lib.pods]perlpacktut.pod [.lib.pods]perlperf.pod [.lib.pods]perlplan9.pod [.lib.pods]perlpod.pod
-pod26 = [.lib.pods]perlpodspec.pod [.lib.pods]perlpodstyle.pod [.lib.pods]perlpolicy.pod [.lib.pods]perlport.pod [.lib.pods]perlpragma.pod
-pod27 = [.lib.pods]perlqnx.pod [.lib.pods]perlre.pod [.lib.pods]perlreapi.pod [.lib.pods]perlrebackslash.pod [.lib.pods]perlrecharclass.pod
-pod28 = [.lib.pods]perlref.pod [.lib.pods]perlreftut.pod [.lib.pods]perlreguts.pod [.lib.pods]perlrequick.pod [.lib.pods]perlreref.pod
-pod29 = [.lib.pods]perlretut.pod [.lib.pods]perlriscos.pod [.lib.pods]perlrun.pod [.lib.pods]perlsec.pod [.lib.pods]perlsolaris.pod [.lib.pods]perlsource.pod
-pod30 = [.lib.pods]perlstyle.pod [.lib.pods]perlsub.pod [.lib.pods]perlsymbian.pod [.lib.pods]perlsyn.pod [.lib.pods]perlthrtut.pod [.lib.pods]perltie.pod
-pod31 = [.lib.pods]perltoc.pod [.lib.pods]perltodo.pod [.lib.pods]perltooc.pod [.lib.pods]perltoot.pod [.lib.pods]perltrap.pod [.lib.pods]perltru64.pod
-pod32 = [.lib.pods]perltw.pod [.lib.pods]perlunicode.pod [.lib.pods]perlunifaq.pod [.lib.pods]perluniintro.pod [.lib.pods]perluniprops.pod
-pod33 = [.lib.pods]perlunitut.pod [.lib.pods]perlutil.pod [.lib.pods]perluts.pod [.lib.pods]perlvar.pod [.lib.pods]perlvmesa.pod [.lib.pods]perlvms.pod
-pod34 = [.lib.pods]perlvos.pod [.lib.pods]perlwin32.pod
-pod = $(pod0) $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) $(pod9) $(pod10) $(pod11) $(pod12) $(pod13) $(pod14) $(pod15) $(pod16) $(pod17) $(pod18) $(pod19) $(pod20) $(pod21) $(pod22) $(pod23) $(pod24) $(pod25) $(pod26) $(pod27) $(pod28) $(pod29) $(pod30) $(pod31) $(pod32) $(pod33) $(pod34)
-
PERLDELTA_CURRENT = [.pod]perl5152delta.pod
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
@@ -558,10 +521,8 @@ nonxsext : $(LIBPREREQ) preplibrary $(MINIPERL_EXE)
@ If F$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS]
Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.VMS]
-[.lib.pods]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+[.utils]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
- Copy/NoConfirm/Log [.utils]perldoc.com [.lib.pods]
[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE) >$(MMS$TARGET)
@@ -681,738 +642,6 @@ preplibrary : $(MINIPERL_EXE) $(LIBPREREQ)
makeppport : $(MINIPERL_EXE) $(ARCHDIR)Config.pm nonxsext
$(MINIPERL) mkppport
-[.lib.pods]perl.pod : [.pod]perl.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5004delta.pod : [.pod]perl5004delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5005delta.pod : [.pod]perl5005delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5100delta.pod : [.pod]perl5100delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5101delta.pod : [.pod]perl5101delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5110delta.pod : [.pod]perl5110delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5111delta.pod : [.pod]perl5111delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5112delta.pod : [.pod]perl5112delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5113delta.pod : [.pod]perl5113delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5114delta.pod : [.pod]perl5114delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5115delta.pod : [.pod]perl5115delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5120delta.pod : [.pod]perl5120delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5121delta.pod : [.pod]perl5121delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5122delta.pod : [.pod]perl5122delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5123delta.pod : [.pod]perl5123delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5124delta.pod : [.pod]perl5124delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5130delta.pod : [.pod]perl5130delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl51310delta.pod : [.pod]perl51310delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl51311delta.pod : [.pod]perl51311delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5131delta.pod : [.pod]perl5131delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5132delta.pod : [.pod]perl5132delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5133delta.pod : [.pod]perl5133delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5134delta.pod : [.pod]perl5134delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5135delta.pod : [.pod]perl5135delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5136delta.pod : [.pod]perl5136delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5137delta.pod : [.pod]perl5137delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5138delta.pod : [.pod]perl5138delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5139delta.pod : [.pod]perl5139delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5140delta.pod : [.pod]perl5140delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5141delta.pod : [.pod]perl5141delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5150delta.pod : [.pod]perl5150delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5151delta.pod : [.pod]perl5151delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl5152delta.pod : [.pod]perl5152delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl561delta.pod : [.pod]perl561delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl56delta.pod : [.pod]perl56delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl570delta.pod : [.pod]perl570delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl571delta.pod : [.pod]perl571delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl572delta.pod : [.pod]perl572delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl573delta.pod : [.pod]perl573delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl581delta.pod : [.pod]perl581delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl582delta.pod : [.pod]perl582delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl583delta.pod : [.pod]perl583delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl584delta.pod : [.pod]perl584delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl585delta.pod : [.pod]perl585delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl586delta.pod : [.pod]perl586delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl587delta.pod : [.pod]perl587delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl588delta.pod : [.pod]perl588delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl589delta.pod : [.pod]perl589delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl58delta.pod : [.pod]perl58delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl590delta.pod : [.pod]perl590delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl591delta.pod : [.pod]perl591delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl592delta.pod : [.pod]perl592delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl593delta.pod : [.pod]perl593delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl594delta.pod : [.pod]perl594delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perl595delta.pod : [.pod]perl595delta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlaix.pod : [.pod]perlaix.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlamiga.pod : [.pod]perlamiga.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlapi.pod : [.pod]perlapi.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlapio.pod : [.pod]perlapio.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlartistic.pod : [.pod]perlartistic.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlbeos.pod : [.pod]perlbeos.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlbook.pod : [.pod]perlbook.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlboot.pod : [.pod]perlboot.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlbot.pod : [.pod]perlbot.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlbs2000.pod : [.pod]perlbs2000.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcall.pod : [.pod]perlcall.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlce.pod : [.pod]perlce.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcheat.pod : [.pod]perlcheat.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlclib.pod : [.pod]perlclib.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcn.pod : [.pod]perlcn.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcommunity.pod : [.pod]perlcommunity.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcompile.pod : [.pod]perlcompile.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlcygwin.pod : [.pod]perlcygwin.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldata.pod : [.pod]perldata.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldbmfilter.pod : [.pod]perldbmfilter.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldebguts.pod : [.pod]perldebguts.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldebtut.pod : [.pod]perldebtut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldebug.pod : [.pod]perldebug.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldelta.pod : [.pod]perldelta.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldgux.pod : [.pod]perldgux.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldiag.pod : [.pod]perldiag.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldos.pod : [.pod]perldos.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldsc.pod : [.pod]perldsc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perldtrace.pod : [.pod]perldtrace.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlebcdic.pod : [.pod]perlebcdic.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlembed.pod : [.pod]perlembed.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlepoc.pod : [.pod]perlepoc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlfilter.pod : [.pod]perlfilter.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlfork.pod : [.pod]perlfork.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlform.pod : [.pod]perlform.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlfreebsd.pod : [.pod]perlfreebsd.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlfunc.pod : [.pod]perlfunc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlgit.pod : [.pod]perlgit.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlglossary.pod : [.pod]perlglossary.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlgpl.pod : [.pod]perlgpl.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlguts.pod : [.pod]perlguts.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhack.pod : [.pod]perlhack.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhacktips.pod : [.pod]perlhacktips.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhacktut.pod : [.pod]perlhacktut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhaiku.pod : [.pod]perlhaiku.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhist.pod : [.pod]perlhist.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhpux.pod : [.pod]perlhpux.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlhurd.pod : [.pod]perlhurd.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlintern.pod : [.pod]perlintern.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlinterp.pod : [.pod]perlinterp.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlintro.pod : [.pod]perlintro.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perliol.pod : [.pod]perliol.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlipc.pod : [.pod]perlipc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlirix.pod : [.pod]perlirix.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perljp.pod : [.pod]perljp.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlko.pod : [.pod]perlko.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perllexwarn.pod : [.pod]perllexwarn.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perllinux.pod : [.pod]perllinux.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perllocale.pod : [.pod]perllocale.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perllol.pod : [.pod]perllol.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmacos.pod : [.pod]perlmacos.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmacosx.pod : [.pod]perlmacosx.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmod.pod : [.pod]perlmod.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmodinstall.pod : [.pod]perlmodinstall.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmodlib.pod : [.pod]perlmodlib.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmodstyle.pod : [.pod]perlmodstyle.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmpeix.pod : [.pod]perlmpeix.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlmroapi.pod : [.pod]perlmroapi.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlnetware.pod : [.pod]perlnetware.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlnewmod.pod : [.pod]perlnewmod.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlnumber.pod : [.pod]perlnumber.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlobj.pod : [.pod]perlobj.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlop.pod : [.pod]perlop.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlopenbsd.pod : [.pod]perlopenbsd.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlopentut.pod : [.pod]perlopentut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlos2.pod : [.pod]perlos2.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlos390.pod : [.pod]perlos390.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlos400.pod : [.pod]perlos400.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpacktut.pod : [.pod]perlpacktut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlperf.pod : [.pod]perlperf.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlplan9.pod : [.pod]perlplan9.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpod.pod : [.pod]perlpod.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpodspec.pod : [.pod]perlpodspec.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpodstyle.pod : [.pod]perlpodstyle.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpolicy.pod : [.pod]perlpolicy.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlport.pod : [.pod]perlport.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlpragma.pod : [.pod]perlpragma.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlqnx.pod : [.pod]perlqnx.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlre.pod : [.pod]perlre.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlreapi.pod : [.pod]perlreapi.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlrebackslash.pod : [.pod]perlrebackslash.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlrecharclass.pod : [.pod]perlrecharclass.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlref.pod : [.pod]perlref.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlreftut.pod : [.pod]perlreftut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlreguts.pod : [.pod]perlreguts.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlrequick.pod : [.pod]perlrequick.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlreref.pod : [.pod]perlreref.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlretut.pod : [.pod]perlretut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlriscos.pod : [.pod]perlriscos.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlrun.pod : [.pod]perlrun.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsec.pod : [.pod]perlsec.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsolaris.pod : [.pod]perlsolaris.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsource.pod : [.pod]perlsource.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlstyle.pod : [.pod]perlstyle.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsub.pod : [.pod]perlsub.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsymbian.pod : [.pod]perlsymbian.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlsyn.pod : [.pod]perlsyn.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlthrtut.pod : [.pod]perlthrtut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltie.pod : [.pod]perltie.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltoc.pod : [.pod]perltoc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltodo.pod : [.pod]perltodo.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltooc.pod : [.pod]perltooc.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltoot.pod : [.pod]perltoot.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltrap.pod : [.pod]perltrap.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltru64.pod : [.pod]perltru64.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perltw.pod : [.pod]perltw.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlunicode.pod : [.pod]perlunicode.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlunifaq.pod : [.pod]perlunifaq.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perluniintro.pod : [.pod]perluniintro.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perluniprops.pod : [.pod]perluniprops.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlunitut.pod : [.pod]perlunitut.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlutil.pod : [.pod]perlutil.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perluts.pod : [.pod]perluts.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlvar.pod : [.pod]perlvar.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlvmesa.pod : [.pod]perlvmesa.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlvms.pod : [.pod]perlvms.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlvos.pod : [.pod]perlvos.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
-[.lib.pods]perlwin32.pod : [.pod]perlwin32.pod
- @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-
install.html : [.pod]perltoc.pod
@ @perl_setup.com
@ If F$Search("perl_root:[lib]html.dir").eqs."" Then Create/Directory perl_root:[lib.html]
@@ -1850,13 +1079,11 @@ tidy : cleanlis
- If F$Search("$(ARCHDIR)Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config_heavy.pl
- If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm
- If F$Search("[.lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.lib.VMS]*.*
- - If F$Search("[.lib.pods]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.Pod
- If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.*
- If F$Search("[.lib]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib]*.com
- If F$Search("[.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.pod]*.com
- If F$Search("[.utils]*.com;-1").nes."" Then Purge/NoConfirm/Log [.utils]*.com
- If F$Search("[.x2p]*.com;-1").nes."" Then Purge/NoConfirm/Log [.x2p]*.com
- - If F$Search("[.lib.pods]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.com
- If F$Search("[.lib]buildcustomize.pl;-1").nes."" Then Purge/NoConfirm/Log [.lib]buildcustomize.pl
clean : tidy cleantest
@@ -1914,10 +1141,8 @@ realclean : clean
- If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;*
- If F$Search("$(ARCHDIR)Config_heavy.pl").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config_heavy.pl;*
- If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;*
- - If F$Search("[.lib.pods]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pods]*.pod;*
- - If F$Search("[.lib.pods]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]perldoc.com;*
+ - If F$Search("[.utils]perldoc.com").nes."" Then Delete/NoConfirm/Log [.utils]perldoc.com;*
- If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;*
- - If F$Search("[.lib.pods]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]pod2*.com;*
- If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;*
- If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);*
- If F$Search("Perl_Setup.Com").nes."" Then Delete/NoConfirm/Log Perl_Setup.Com;*
diff --git a/win32/Makefile.ce b/win32/Makefile.ce
index b1bf152611..39a6b585cc 100644
--- a/win32/Makefile.ce
+++ b/win32/Makefile.ce
@@ -847,7 +847,7 @@ $(DLLDIR)\perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\makedef.pl create_perllibst_h.pl
$(HPERL) -MCross -I..\lib create_perllibst_h.pl
- $(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
+ $(HPERL) -MCross -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) TARG_DIR=..\ > perldll.def
$(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
diff --git a/win32/config.bc b/win32/config.bc
index fe74f6834c..2dc5063838 100644
--- a/win32/config.bc
+++ b/win32/config.bc
@@ -973,6 +973,8 @@ stdio_cnt='((fp)->level)'
stdio_filbuf=''
stdio_ptr='((fp)->curp)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.ce b/win32/config.ce
index 5f87f64b16..47eeb71968 100644
--- a/win32/config.ce
+++ b/win32/config.ce
@@ -934,6 +934,8 @@ stdio_cnt=''
stdio_filbuf=''
stdio_ptr=''
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.gc b/win32/config.gc
index 2c3f9e6b6b..c49a27bfca 100644
--- a/win32/config.gc
+++ b/win32/config.gc
@@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.gc64 b/win32/config.gc64
index 876bcda720..c883708be8 100644
--- a/win32/config.gc64
+++ b/win32/config.gc64
@@ -974,6 +974,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='8'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.gc64nox b/win32/config.gc64nox
index c70aa96f34..0fe790490d 100644
--- a/win32/config.gc64nox
+++ b/win32/config.gc64nox
@@ -974,6 +974,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='8'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.vc b/win32/config.vc
index 6f4ddace40..3495a2369c 100644
--- a/win32/config.vc
+++ b/win32/config.vc
@@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='4'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/config.vc64 b/win32/config.vc64
index fd903894da..c9b1cb77cb 100644
--- a/win32/config.vc64
+++ b/win32/config.vc64
@@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
stdio_stream_array=''
+st_ino_sign='1'
+st_ino_size='8'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
diff --git a/win32/perllib.c b/win32/perllib.c
index ff212102f6..526a4a18d5 100644
--- a/win32/perllib.c
+++ b/win32/perllib.c
@@ -232,10 +232,10 @@ RunPerl(int argc, char **argv, char **env)
}
#ifdef PERL_GLOBAL_STRUCT
-#define PERLVAR(var,type) /**/
-#define PERLVARA(var,type) /**/
-#define PERLVARI(var,type,init) PL_Vars.var = init;
-#define PERLVARIC(var,type,init) PL_Vars.var = init;
+#define PERLVAR(prefix,var,type) /**/
+#define PERLVARA(prefix,var,type) /**/
+#define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
+#define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
#include "perlvars.h"
#undef PERLVAR
#undef PERLVARA
diff --git a/win32/pod.mak b/win32/pod.mak
index ad2f686021..a21500a7b2 100644
--- a/win32/pod.mak
+++ b/win32/pod.mak
@@ -80,7 +80,6 @@ POD = perl.pod \
perlcheat.pod \
perlclib.pod \
perlcommunity.pod \
- perlcompile.pod \
perldata.pod \
perldbmfilter.pod \
perldebguts.pod \
@@ -92,6 +91,7 @@ POD = perl.pod \
perldtrace.pod \
perlebcdic.pod \
perlembed.pod \
+ perlexperiment.pod \
perlfilter.pod \
perlfork.pod \
perlform.pod \
@@ -227,7 +227,6 @@ MAN = perl.man \
perlcheat.man \
perlclib.man \
perlcommunity.man \
- perlcompile.man \
perldata.man \
perldbmfilter.man \
perldebguts.man \
@@ -239,6 +238,7 @@ MAN = perl.man \
perldtrace.man \
perlebcdic.man \
perlembed.man \
+ perlexperiment.man \
perlfilter.man \
perlfork.man \
perlform.man \
@@ -374,7 +374,6 @@ HTML = perl.html \
perlcheat.html \
perlclib.html \
perlcommunity.html \
- perlcompile.html \
perldata.html \
perldbmfilter.html \
perldebguts.html \
@@ -386,6 +385,7 @@ HTML = perl.html \
perldtrace.html \
perlebcdic.html \
perlembed.html \
+ perlexperiment.html \
perlfilter.html \
perlfork.html \
perlform.html \
@@ -521,7 +521,6 @@ TEX = perl.tex \
perlcheat.tex \
perlclib.tex \
perlcommunity.tex \
- perlcompile.tex \
perldata.tex \
perldbmfilter.tex \
perldebguts.tex \
@@ -533,6 +532,7 @@ TEX = perl.tex \
perldtrace.tex \
perlebcdic.tex \
perlembed.tex \
+ perlexperiment.tex \
perlfilter.tex \
perlfork.tex \
perlform.tex \