summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/site
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-03-08 00:16:42 +0000
committerKarl Berry <karl@freefriends.org>2018-03-08 00:16:42 +0000
commit34a8597760ab5740abd49b6d8be10e1876f5ce98 (patch)
tree099a794912a28b3ebbc857961643ba29b28e674a /Master/tlpkg/tlperl/site
parent2ca3610031316a7312d046d3ae4c783452831216 (diff)
(tl)perl 5.26.1 from siep
git-svn-id: svn://tug.org/texlive/trunk@46882 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/site')
-rw-r--r--Master/tlpkg/tlperl/site/lib/Canary/Stability.pm207
-rwxr-xr-x[-rw-r--r--]Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS.pm (renamed from Master/tlpkg/tlperl/site/lib/JSON/XS.pm)1369
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Boolean.pm29
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Type.pm219
-rw-r--r--Master/tlpkg/tlperl/site/lib/File/Which.pm6
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Config.pm32
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm8
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm8
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm8
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm31
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm29
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm29
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm30
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Message.pm41
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Request.pm131
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm149
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Response.pm65
-rw-r--r--Master/tlpkg/tlperl/site/lib/HTTP/Status.pm43
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON.pm1659
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/JSON/MaybeXS.pm323
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON/XS/Boolean.pm31
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON/backportPP.pm2854
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON/backportPP/Boolean.pm36
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5005.pm131
-rw-r--r--Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5006.pm173
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Debug.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm9
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm12
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm11
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm6
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm20
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm5
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/Simple.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm27
-rw-r--r--Master/tlpkg/tlperl/site/lib/Net/HTTP.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm40
-rw-r--r--Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/Socket.pm7
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/Test/Needs.pm315
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk/Config.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk/Event.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm5
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk/Table.pod8
-rw-r--r--Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod2
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/Tk/getSaveFile.pod11
-rw-r--r--Master/tlpkg/tlperl/site/lib/Try/Tiny.pm43
-rw-r--r--Master/tlpkg/tlperl/site/lib/Types/Serialiser.pm254
-rw-r--r--Master/tlpkg/tlperl/site/lib/Types/Serialiser/Error.pm27
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/Escape.pm1
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/IRI.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/Split.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_foreign.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_generic.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_idna.pm4
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_ldap.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_login.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_punycode.pm70
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_query.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_segment.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_server.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/_userpass.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/data.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/Base.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/ftp.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/gopher.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/http.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/https.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/ldap.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/ldapi.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/ldaps.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/mailto.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/mms.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/news.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/nntp.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/pop.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/rlogin.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/rsync.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/rtsp.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/rtspu.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/sftp.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/sip.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/sips.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/snews.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/ssh.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/telnet.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/tn3270.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/urn.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm2
-rw-r--r--Master/tlpkg/tlperl/site/lib/Win32/Process.pm224
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Canary/Stability/.packlist1
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/.packlist6
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/XS.dllbin0 -> 82944 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist74
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist4
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dllbin23552 -> 26112 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist8
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist16
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dllbin52224 -> 54784 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist6
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist20
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/JSON/.packlist5
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/JSON/MaybeXS/.packlist1
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/JSON/XS/.packlist5
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/JSON/XS/XS.dllbin61440 -> 0 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist4
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist10
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dllbin71680 -> 73216 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist6
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist8
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist4
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Socket/Socket.dllbin40448 -> 43008 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Test/Fatal/.packlist2
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Test/Needs/.packlist1
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Test/RequiresInternet/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist1289
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dllbin204288 -> 204800 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dllbin27648 -> 30208 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist2
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dllbin17920 -> 20480 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dllbin50176 -> 52736 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dllbin62976 -> 65024 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dllbin66560 -> 68096 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dllbin16384 -> 18432 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dllbin145920 -> 144384 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dllbin38400 -> 40448 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dllbin28672 -> 30720 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dllbin29696 -> 31232 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dllbin242176 -> 242688 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dllbin32768 -> 35840 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dllbin32256 -> 34304 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dllbin29184 -> 31232 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dllbin38912 -> 40448 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dllbin132096 -> 132096 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dllbin83968 -> 87552 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Tk.dllbin940544 -> 937472 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/X/X.dllbin33792 -> 35840 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dllbin34816 -> 35840 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Try/Tiny/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Types/Serialiser/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/URI/.packlist106
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist4
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist14
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/API/API.dllbin32256 -> 33792 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dllbin25600 -> 28160 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist4
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dllbin48640 -> 51712 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist22
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dllbin135680 -> 137728 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/Process/.packlist2
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/Process/Process.dllbin28672 -> 0 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist4
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dllbin52224 -> 54784 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist4
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist6
-rwxr-xr-xMaster/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dllbin165888 -> 168448 bytes
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/common/sense/.packlist2
-rw-r--r--Master/tlpkg/tlperl/site/lib/auto/libwww/perl/.packlist66
-rw-r--r--Master/tlpkg/tlperl/site/lib/common/sense.pm16
-rw-r--r--Master/tlpkg/tlperl/site/lib/common/sense.pod445
-rw-r--r--Master/tlpkg/tlperl/site/lib/libwww/lwpcook.pod12
194 files changed, 3421 insertions, 7692 deletions
diff --git a/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm b/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm
deleted file mode 100644
index 21d7c659736..00000000000
--- a/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm
+++ /dev/null
@@ -1,207 +0,0 @@
-=head1 NAME
-
-Canary::Stability - canary to check perl compatibility for schmorp's modules
-
-=head1 SYNOPSIS
-
- # in Makefile.PL
- use Canary::Stability DISTNAME => 2001, MINIMUM_PERL_VERSION;
-
-=head1 DESCRIPTION
-
-This module is used by Schmorp's modules during configuration stage to
-test the installed perl for compatibility with his modules.
-
-It's not, at this stage, meant as a tool for other module authors,
-although in principle nothing prevents them from subscribing to the same
-ideas.
-
-See the F<Makefile.PL> in L<Coro> or L<AnyEvent> for usage examples.
-
-=cut
-
-package Canary::Stability;
-
-BEGIN {
- $VERSION = 2012;
-}
-
-sub sgr {
- # we just assume ANSI almost everywhere
- # red 31, yellow 33, green 32
- local $| = 1;
-
- $ENV{PERL_CANARY_STABILITY_COLOUR} ne 0
- and ((-t STDOUT and length $ENV{TERM}) or $ENV{PERL_CANARY_STABILITY_COLOUR})
- and print "\e[$_[0]m";
-}
-
-sub import {
- my (undef, $distname, $minvers, $minperl) = @_;
-
- $ENV{PERL_CANARY_STABILITY_DISABLE}
- and return;
-
- $minperl ||= 5.008002;
-
- print <<EOF;
-
-***
-*** Canary::Stability COMPATIBILITY AND SUPPORT CHECK
-*** =================================================
-***
-*** Hi!
-***
-*** I do my best to provide predictable and reliable software.
-***
-*** However, in recent releases, P5P (who maintain perl) have been
-*** introducing regressions that are sometimes subtle and at other times
-*** catastrophic, often for personal preferences with little or no concern
-*** for existing code, most notably CPAN.
-***
-*** For this reason, it has become very hard for me to maintain the level
-*** of reliability and support I have committed myself to in the past, at
-*** least with some perl versions: I simply can't keep up working around new
-*** bugs or gratituous incompatibilities, and in turn you might suffer from
-*** unanticipated problems.
-***
-*** Therefore I have introduced a support and compatibility check, the results
-*** of which follow below, together with a FAQ and some recommendations.
-***
-*** This check is just to let you know that there might be a risk, so you can
-*** make judgement calls on how to proceed - it will not keep the module from
-*** installing or working.
-***
-EOF
-
- if ($minvers > $VERSION) {
- sgr 33;
- print <<EOF;
-*** The stability canary says: (nothing, it died of old age).
-***
-*** Your Canary::Stability module (used by $distname) is too old.
-*** This is not a fatal problem - while you might want to upgrade to version
-*** $minvers (currently installed version: $VERSION) to get better support
-*** status testing, you might also not want to care at all, and all will
-*** be well as long $distname works well enough for you, as the stability
-*** canary is only used when installing the distribution.
-EOF
- } elsif ($] < $minperl) {
-
- sgr 33;
- print <<EOF;
-*** The stability canary says: chirp (it seems concerned about something).
-***
-*** Your perl version ($]) is older than the $distname distribution
-*** likes ($minperl). This is not a fatal problem - the module might work
-*** well with your version of perl, but it does mean the author likely
-*** won't do anything to make it work if it breaks.
-EOF
- } elsif (defined $Internals::StabilityBranchVersion) {
- # note to people studying this modules sources:
- # the above test is not considered a clean or stable way to
- # test for the stability branch.
-
- sgr 32;
- print <<EOF;
-*** The stability canary says: chirp! chirp! (it seems to be quite excited)
-***
-*** It seems you are running schmorp's stability branch of perl.
-*** All should be well, and if it isn't, you should report this as a bug
-*** to the $distname author.
-EOF
- } elsif ($] < 5.021) {
- #sgr 32;
- print <<EOF;
-*** The stability canary says: chirp! chirp! (it seems to be quite happy)
-***
-*** Your version of perl ($]) is quite supported by $distname, nothing
-*** else to be said, hope it comes in handy.
-EOF
- } else {
- sgr 31;
- print <<EOF;
-*** The stability canary says: (nothing, it was driven away by harsh weather)
-***
-*** It seems you are running perl version $], likely the "official" or
-*** "standard" version. While there is nothing wrong with doing that,
-*** standard perl versions 5.022 and up are not supported by $distname.
-*** While this might be fatal, it might also be all right - if you run into
-*** problems, you might want to downgrade your perl or switch to the
-*** stability branch.
-***
-*** If everything works fine, you can ignore this message.
-EOF
- sgr 0;
- print <<EOF;
-***
-*** Stability canary mini-FAQ:
-***
-*** Do I need to do anything?
-*** With luck, no. While some distributions are known to fail
-*** already, most should probably work. This message is here
-*** to alert you that your perl is not supported by $distname,
-*** and if things go wrong, you either need to downgrade, or
-*** sidegrade to the stability variant of your perl version,
-*** or simply live with the consequences.
-***
-*** What is this canary thing?
-*** It's purpose is to check support status of $distname with
-*** respect to your perl version.
-***
-*** What is this "stability branch"?
-*** It's a branch or fork of the official perl, by schmorp, to
-*** improve stability and compatibility with existing modules.
-***
-*** How can I skip this prompt on automated installs?
-*** Set PERL_CANARY_STABILITY_NOPROMPT=1 in your environment.
-*** More info is in the Canary::Stability manpage.
-***
-*** Long version of this FAQ: http://stableperl.schmorp.de/faq.html
-*** Stability Branch homepage: http://stableperl.schmorp.de/
-***
-
-EOF
-
- unless ($ENV{PERL_CANARY_STABILITY_NOPROMPT}) {
- require ExtUtils::MakeMaker;
-
- ExtUtils::MakeMaker::prompt ("Continue anyways? ", "y") =~ /^y/i
- or die "FATAL: User aborted configuration of $distname.\n";
- }
- }
-
- sgr 0;
-}
-
-=head1 ENVIRONMENT VARIABLES
-
-=over 4
-
-=item C<PERL_CANARY_STABILITY_NOPROMPT=1>
-
-Do not prompt the user on alert messages.
-
-=item C<PERL_CANARY_STABILITY_COLOUR=0>
-
-Disable use of colour.
-
-=item C<PERL_CANARY_STABILITY_COLOUR=1>
-
-Force use of colour.
-
-=item C<PERL_CANARY_STABILITY_DISABLE=1>
-
-Disable this modules functionality completely.
-
-=back
-
-=head1 AUTHOR
-
- Marc Lehmann <schmorp@schmorp.de>
- http://software.schmorp.de/pkg/Canary-Stability.html
-
-=cut
-
-1
-
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/XS.pm b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS.pm
index 674937f178b..be1d482bf05 100644..100755
--- a/Master/tlpkg/tlperl/site/lib/JSON/XS.pm
+++ b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS.pm
@@ -1,15 +1,17 @@
-=head1 NAME
+package Cpanel::JSON::XS;
+our $VERSION = '4.01';
+our $XS_VERSION = $VERSION;
+# $VERSION = eval $VERSION;
-JSON::XS - JSON serialising/deserialising, done correctly and fast
+=pod
-=encoding utf-8
+=head1 NAME
-JSON::XS - 正しくて高速な JSON シリアライザ/デシリアライザ
- (http://fleur.hio.jp/perldoc/mix/lib/JSON/XS.html)
+Cpanel::JSON::XS - cPanel fork of JSON::XS, fast and correct serializing
=head1 SYNOPSIS
- use JSON::XS;
+ use Cpanel::JSON::XS;
# exported functions, they croak on error
# and expect/generate UTF-8
@@ -19,15 +21,18 @@ JSON::XS - 正しくて高速な JSON シリアライザ/デシリアライザ
# OO-interface
- $coder = JSON::XS->new->ascii->pretty->allow_nonref;
+ $coder = Cpanel::JSON::XS->new->ascii->pretty->allow_nonref;
$pretty_printed_unencoded = $coder->encode ($perl_scalar);
$perl_scalar = $coder->decode ($unicode_json_text);
- # Note that JSON version 2.0 and above will automatically use JSON::XS
+ # Note that 5.6 misses most smart utf8 and encoding functionalities
+ # of newer releases.
+
+ # Note that L<JSON::MaybeXS> will automatically use Cpanel::JSON::XS
# if available, at virtually no speed overhead either, so you should
# be able to just:
- use JSON;
+ use JSON::MaybeXS;
# and do the same things, except that you have a pure-perl fallback now.
@@ -37,22 +42,16 @@ This module converts Perl data structures to JSON and vice versa. Its
primary goal is to be I<correct> and its secondary goal is to be
I<fast>. To reach the latter goal it was written in C.
-Beginning with version 2.0 of the JSON module, when both JSON and
-JSON::XS are installed, then JSON will fall back on JSON::XS (this can be
-overridden) with no overhead due to emulation (by inheriting constructor
-and methods). If JSON::XS is not available, it will fall back to the
-compatible JSON::PP module as backend, so using JSON instead of JSON::XS
-gives you a portable JSON API that can be fast when you need it and
-doesn't require a C compiler when that is a problem.
-
As this is the n-th-something JSON module on CPAN, what was the reason
to write yet another JSON module? While it seems there are many JSON
modules, none of them correctly handle all corner cases, and in most cases
their maintainers are unresponsive, gone missing, or not listening to bug
reports for other reasons.
-See MAPPING, below, on how JSON::XS maps perl values to JSON values and
-vice versa.
+See below for the cPanel fork.
+
+See MAPPING, below, on how Cpanel::JSON::XS maps perl values to JSON
+values and vice versa.
=head2 FEATURES
@@ -60,13 +59,13 @@ vice versa.
=item * correct Unicode handling
-This module knows how to handle Unicode, documents how and when it does
-so, and even documents what "correct" means.
+This module knows how to handle Unicode with Perl version higher than 5.8.5,
+documents how and when it does so, and even documents what "correct" means.
=item * round-trip integrity
-When you serialise a perl data structure using only data types supported
-by JSON and Perl, the deserialised data structure is identical on the Perl
+When you serialize a perl data structure using only data types supported
+by JSON and Perl, the deserialized data structure is identical on the Perl
level. (e.g. the string "2.0" doesn't suddenly become "2" just because
it looks like a number). There I<are> minor exceptions to this, read the
MAPPING section below to learn about those.
@@ -74,12 +73,12 @@ MAPPING section below to learn about those.
=item * strict checking of JSON correctness
There is no guessing, no generating of illegal JSON texts by default,
-and only JSON is accepted as input by default (the latter is a security
-feature).
+and only JSON is accepted as input by default. the latter is a security
+feature.
=item * fast
-Compared to other JSON modules and other serialisers such as Storable,
+Compared to other JSON modules and other serializers such as Storable,
this module usually compares favourably in terms of speed, too.
=item * simple to use
@@ -97,22 +96,134 @@ stuff). Or you can combine those features in whatever way you like.
=back
-=cut
+=head2 cPanel fork
+
+Since the original author MLEHMANN has no public
+bugtracker, this cPanel fork sits now on github.
+
+src repo: L<https://github.com/rurban/Cpanel-JSON-XS>
+original: L<http://cvs.schmorp.de/JSON-XS/>
+
+RT: L<https://github.com/rurban/Cpanel-JSON-XS/issues>
+or L<https://rt.cpan.org/Public/Dist/Display.html?Queue=Cpanel-JSON-XS>
+
+B<Changes to JSON::XS>
+
+- stricter decode_json() as documented. non-refs are disallowed.
+ added a 2nd optional argument. decode() honors now allow_nonref.
+
+- fixed encode of numbers for dual-vars. Different string
+ representations are preserved, but numbers with temporary strings
+ which represent the same number are here treated as numbers, not
+ strings. Cpanel::JSON::XS is a bit slower, but preserves numeric
+ types better.
+
+- numbers ending with .0 stay numbers, are not converted to
+ integers. [#63] dual-vars which are represented as number not
+ integer (42+"bar" != 5.8.9) are now encoded as number (=> 42.0)
+ because internally it's now a NOK type. However !!1 which is
+ wrongly encoded in 5.8 as "1"/1.0 is still represented as integer.
+
+- different handling of inf/nan. Default now to null, optionally with
+ stringify_infnan() to "inf"/"nan". [#28, #32]
+
+- added C<binary> extension, non-JSON and non JSON parsable, allows
+ C<\xNN> and C<\NNN> sequences.
+
+- 5.6.2 support; sacrificing some utf8 features (assuming bytes
+ all-over), no multi-byte unicode characters with 5.6.
+
+- interop for true/false overloading. JSON::XS, JSON::PP and Mojo::JSON
+ representations for booleans are accepted and JSON::XS accepts
+ Cpanel::JSON::XS booleans [#13, #37]
+ Fixed overloading of booleans. Cpanel::JSON::XS::true stringifies again
+ to "1", not "true", analog to all other JSON modules.
+
+- native boolean mapping of yes and no to true and false, as in YAML::XS.
+ In perl C<!0> is yes, C<!1> is no.
+ The JSON value true maps to 1, false maps to 0. [#39]
+
+- support arbitrary stringification with encode, with convert_blessed
+ and allow_blessed.
+
+- ithread support. Cpanel::JSON::XS is thread-safe, JSON::XS not
+
+- is_bool can be called as method, JSON::XS::is_bool not.
-package JSON::XS;
+- performance optimizations for threaded Perls
-use common::sense;
+- relaxed mode, allowing many popular extensions
+
+- additional fixes for:
+
+ - [cpan #88061] AIX atof without USE_LONG_DOUBLE
+
+ - #10 unshare_hek crash
+
+ - #7, #29 avoid re-blessing where possible. It fails in JSON::XS for
+ READONLY values, i.e. restricted hashes.
+
+ - #41 overloading of booleans, use the object not the reference.
+
+ - #62 -Dusequadmath conversion and no SEGV.
+
+ - #72 parsing of values followed \0, like 1\0 does fail.
+
+ - #72 parsing of illegal unicode or non-unicode characters.
+
+ - #96 locale-insensitive numeric conversion
+
+- public maintenance and bugtracker
+
+- use ppport.h, sanify XS.xs comment styles, harness C coding style
+
+- common::sense is optional. When available it is not used in the
+ published production module, just during development and testing.
+
+- extended testsuite, passes all http://seriot.ch/parsing_json.html
+ tests. In fact it is the only know JSON decoder which does so,
+ while also being the fastest.
+
+- support many more options and methods from JSON::PP:
+ stringify_infnan, allow_unknown, allow_stringify, allow_barekey,
+ encode_stringify, allow_bignum, allow_singlequote, sort_by
+ (partially), escape_slash, convert_blessed, ... optional
+ decode_json(, allow_nonref) arg.
+ relaxed implements allow_dupkeys.
+
+- support all 5 unicode BOM's: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE,
+ UTF-32BE, encoding internally to UTF-8.
+
+=cut
-our $VERSION = 3.04;
our @ISA = qw(Exporter);
+our @EXPORT = qw(encode_json decode_json to_json from_json);
+
+sub to_json($@) {
+ if ($] >= 5.008) {
+ require Carp;
+ Carp::croak ("Cpanel::JSON::XS::to_json has been renamed to encode_json,".
+ " either downgrade to pre-2.0 versions of Cpanel::JSON::XS or".
+ " rename the call");
+ } else {
+ _to_json(@_);
+ }
+}
-our @EXPORT = qw(encode_json decode_json);
+sub from_json($@) {
+ if ($] >= 5.008) {
+ require Carp;
+ Carp::croak ("Cpanel::JSON::XS::from_json has been renamed to decode_json,".
+ " either downgrade to pre-2.0 versions of Cpanel::JSON::XS or".
+ " rename the call");
+ } else {
+ _from_json(@_);
+ }
+}
use Exporter;
use XSLoader;
-use Types::Serialiser ();
-
=head1 FUNCTIONAL INTERFACE
The following convenience methods are provided by this module. They are
@@ -120,28 +231,63 @@ exported by default:
=over 4
-=item $json_text = encode_json $perl_scalar
+=item $json_text = encode_json $perl_scalar, [json_type]
Converts the given Perl data structure to a UTF-8 encoded, binary string
(that is, the string contains octets only). Croaks on error.
This function call is functionally identical to:
- $json_text = JSON::XS->new->utf8->encode ($perl_scalar)
+ $json_text = Cpanel::JSON::XS->new->utf8->encode ($perl_scalar)
Except being faster.
-=item $perl_scalar = decode_json $json_text
+For the type argument see L<Cpanel::JSON::XS::Type>.
+
+=item $perl_scalar = decode_json $json_text [, $allow_nonref ]
-The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
-to parse that as an UTF-8 encoded JSON text, returning the resulting
-reference. Croaks on error.
+The opposite of C<encode_json>: expects an UTF-8 (binary) string of an
+json reference and tries to parse that as an UTF-8 encoded JSON text,
+returning the resulting reference. Croaks on error.
This function call is functionally identical to:
- $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
+ $perl_scalar = Cpanel::JSON::XS->new->utf8->decode ($json_text)
-Except being faster.
+except being faster.
+
+Note that older decode_json versions in Cpanel::JSON::XS older than
+3.0116 and JSON::XS did not set allow_nonref but allowed them due to a
+bug in the decoder.
+
+If the new optional $allow_nonref argument is set and not false, the
+allow_nonref option will be set and the function will act is described
+as in the relaxed RFC 7159 allowing all values such as objects,
+arrays, strings, numbers, "null", "true", and "false".
+
+=item $is_boolean = Cpanel::JSON::XS::is_bool $scalar
+
+Returns true if the passed scalar represents either C<JSON::XS::true>
+or C<JSON::XS::false>, two constants that act like C<1> and C<0>,
+respectively and are used to represent JSON C<true> and C<false>
+values in Perl.
+
+See MAPPING, below, for more information on how JSON values are mapped
+to Perl.
+
+=back
+
+=head1 DEPRECATED FUNCTIONS
+
+=over
+
+=item from_json
+
+from_json has been renamed to decode_json
+
+=item to_json
+
+to_json has been renamed to encode_json
=back
@@ -161,33 +307,37 @@ Perl string - very natural.
=item 2. Perl does I<not> associate an encoding with your strings.
... until you force it to, e.g. when matching it against a regex, or
-printing the scalar to a file, in which case Perl either interprets your
-string as locale-encoded text, octets/binary, or as Unicode, depending
-on various settings. In no case is an encoding stored together with your
-data, it is I<use> that decides encoding, not any magical meta data.
+printing the scalar to a file, in which case Perl either interprets
+your string as locale-encoded text, octets/binary, or as Unicode,
+depending on various settings. In no case is an encoding stored
+together with your data, it is I<use> that decides encoding, not any
+magical meta data.
=item 3. The internal utf-8 flag has no meaning with regards to the
encoding of your string.
-Just ignore that flag unless you debug a Perl bug, a module written in
-XS or want to dive into the internals of perl. Otherwise it will only
-confuse you, as, despite the name, it says nothing about how your string
-is encoded. You can have Unicode strings with that flag set, with that
-flag clear, and you can have binary data with that flag set and that flag
-clear. Other possibilities exist, too.
+=item 4. A "Unicode String" is simply a string where each character
+can be validly interpreted as a Unicode code point.
+
+If you have UTF-8 encoded data, it is no longer a Unicode string, but
+a Unicode string encoded in UTF-8, giving you a binary string.
-If you didn't know about that flag, just the better, pretend it doesn't
-exist.
+=item 5. A string containing "high" (> 255) character values is I<not>
+a UTF-8 string.
-=item 4. A "Unicode String" is simply a string where each character can be
-validly interpreted as a Unicode code point.
+=item 6. Unicode noncharacters only warn, as in core.
-If you have UTF-8 encoded data, it is no longer a Unicode string, but a
-Unicode string encoded in UTF-8, giving you a binary string.
+The 66 Unicode noncharacters U+FDD0..U+FDEF, and U+*FFFE, U+*FFFF just
+warn, see L<http://www.unicode.org/versions/corrigendum9.html>. But
+illegal surrogate pairs fail to parse.
-=item 5. A string containing "high" (> 255) character values is I<not> a UTF-8 string.
+=item 7. Raw non-Unicode characters above U+10FFFF are disallowed.
-It's a fact. Learn to live with it.
+Raw non-Unicode characters outside the valid unicode range fail to
+parse, because "A string is a sequence of zero or more Unicode
+characters" RFC 7159 section 1 and "JSON text SHALL be encoded in
+Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER
+flag when parsing unicode.
=back
@@ -201,15 +351,15 @@ decoding style, within the limits of supported formats.
=over 4
-=item $json = new JSON::XS
+=item $json = new Cpanel::JSON::XS
-Creates a new JSON::XS object that can be used to de/encode JSON
+Creates a new JSON object that can be used to de/encode JSON
strings. All boolean flags described below are by default I<disabled>.
The mutators for flags all return the JSON object again and thus calls can
be chained:
- my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
+ my $json = Cpanel::JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
=> {"a": [1, 2]}
=item $json = $json->ascii ([$enable])
@@ -219,7 +369,7 @@ be chained:
If C<$enable> is true (or missing), then the C<encode> method will not
generate characters outside the code range C<0..127> (which is ASCII). Any
Unicode characters outside that range will be escaped using either a
-single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
+single C<\uXXXX> (BMP characters) or a double C<\uHHHH\uLLLLL> escape sequence,
as per RFC4627. The resulting encoded JSON text can be treated as a native
Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string,
or any other superset of ASCII.
@@ -235,7 +385,7 @@ The main use for this flag is to produce JSON texts that can be
transmitted over a 7-bit channel, as the encoded JSON texts will not
contain any 8 bit characters.
- JSON::XS->new->ascii (1)->encode ([chr 0x10401])
+ Cpanel::JSON::XS->new->ascii (1)->encode ([chr 0x10401])
=> ["\ud801\udc01"]
=item $json = $json->latin1 ([$enable])
@@ -243,7 +393,7 @@ contain any 8 bit characters.
=item $enabled = $json->get_latin1
If C<$enable> is true (or missing), then the C<encode> method will encode
-the resulting JSON text as latin1 (or iso-8859-1), escaping any characters
+the resulting JSON text as latin1 (or ISO-8859-1), escaping any characters
outside the code range C<0..255>. The resulting string can be treated as a
latin1-encoded JSON text or a native Unicode string. The C<decode> method
will not be affected in any way by this flag, as C<decode> by default
@@ -263,9 +413,62 @@ transferring), a rare encoding for JSON. It is therefore most useful when
you want to store data structures known to contain binary data efficiently
in files or databases, not when talking to other JSON encoders/decoders.
- JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
+ Cpanel::JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
=> ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
+
+=item $json = $json->binary ([$enable])
+
+=item $enabled = $json = $json->get_binary
+
+If the C<$enable> argument is true (or missing), then the C<encode>
+method will not try to detect an UTF-8 encoding in any JSON string, it
+will strictly interpret it as byte sequence. The result might contain
+new C<\xNN> sequences, which is B<unparsable JSON>. The C<decode>
+method forbids C<\uNNNN> sequences and accepts C<\xNN> and octal
+C<\NNN> sequences.
+
+There is also a special logic for perl 5.6 and utf8. 5.6 encodes any
+string to utf-8 automatically when seeing a codepoint >= C<0x80> and
+< C<0x100>. With the binary flag enabled decode the perl utf8 encoded
+string to the original byte encoding and encode this with C<\xNN>
+escapes. This will result to the same encodings as with newer
+perls. But note that binary multi-byte codepoints with 5.6 will
+result in C<illegal unicode character in binary string> errors,
+unlike with newer perls.
+
+If C<$enable> is false, then the C<encode> method will smartly try to
+detect Unicode characters unless required by the JSON syntax or other
+flags and hex and octal sequences are forbidden.
+
+See also the section I<ENCODING/CODESET FLAG NOTES> later in this
+document.
+
+The main use for this flag is to avoid the smart unicode detection and
+possible double encoding. The disadvantage is that the resulting JSON
+text is encoded in new C<\xNN> and in latin1 characters and must
+correctly be treated as such when storing and transferring, a rare
+encoding for JSON. It will produce non-readable JSON strings in the
+browser. It is therefore most useful when you want to store data
+structures known to contain binary data efficiently in files or
+databases, not when talking to other JSON encoders/decoders. The
+binary decoding method can also be used when an encoder produced a
+non-JSON conformant hex or octal encoding C<\xNN> or C<\NNN>.
+
+ Cpanel::JSON::XS->new->binary->encode (["\x{89}\x{abc}"])
+ 5.6: Error: malformed or illegal unicode character in binary string
+ >=5.8: ['\x89\xe0\xaa\xbc']
+
+ Cpanel::JSON::XS->new->binary->encode (["\x{89}\x{bc}"])
+ => ["\x89\xbc"]
+
+ Cpanel::JSON::XS->new->binary->decode (["\x89\ua001"])
+ Error: malformed or illegal unicode character in binary string
+
+ Cpanel::JSON::XS->new->decode (["\x89"])
+ Error: illegal hex character in non-binary string
+
+
=item $json = $json->utf8 ([$enable])
=item $enabled = $json->get_utf8
@@ -289,12 +492,12 @@ document.
Example, output UTF-16BE-encoded JSON:
use Encode;
- $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
+ $jsontext = encode "UTF-16BE", Cpanel::JSON::XS->new->encode ($object);
Example, decode UTF-32LE-encoded JSON:
use Encode;
- $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
+ $object = Cpanel::JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
=item $json = $json->pretty ([$enable])
@@ -304,7 +507,7 @@ generate the most readable (or most compact) form possible.
Example, pretty-print some simple structure:
- my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]})
+ my $json = Cpanel::JSON::XS->new->pretty(1)->encode ({a => [1,2]})
=>
{
"a" : [
@@ -313,19 +516,21 @@ Example, pretty-print some simple structure:
]
}
+
=item $json = $json->indent ([$enable])
=item $enabled = $json->get_indent
-If C<$enable> is true (or missing), then the C<encode> method will use a multiline
-format as output, putting every array member or object/hash key-value pair
-into its own line, indenting them properly.
+If C<$enable> is true (or missing), then the C<encode> method will use
+a multiline format as output, putting every array member or
+object/hash key-value pair into its own line, indenting them properly.
If C<$enable> is false, no newlines or indenting will be produced, and the
resulting JSON text is guaranteed not to contain any C<newlines>.
This setting has no effect when decoding JSON texts.
+
=item $json = $json->space_before ([$enable])
=item $enabled = $json->get_space_before
@@ -347,10 +552,10 @@ Example, space_before enabled, space_after and indent disabled:
=item $enabled = $json->get_space_after
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space after the C<:> separating keys from values in JSON objects
-and extra whitespace after the C<,> separating key-value pairs and array
-members.
+If C<$enable> is true (or missing), then the C<encode> method will add
+an extra optional space after the C<:> separating keys from values in
+JSON objects and extra whitespace after the C<,> separating key-value
+pairs and array members.
If C<$enable> is false, then the C<encode> method will not add any extra
space at those places.
@@ -409,21 +614,46 @@ character, after which more white-space and comments are allowed.
=item * literal ASCII TAB characters in strings
Literal ASCII TAB characters are now allowed in strings (and treated as
-C<\t>).
+C<\t>) in relaxed mode. Despite JSON mandates, that TAB character is
+substituted for "\t" sequence.
[
"Hello\tWorld",
"Hello<TAB>World", # literal <TAB> would not normally be allowed
]
+=item * allow_singlequote
+
+Single quotes are accepted instead of double quotes. See the
+L</allow_singlequote> option.
+
+ { "foo":'bar' }
+ { 'foo':"bar" }
+ { 'foo':'bar' }
+
+=item * allow_barekey
+
+Accept unquoted object keys instead of with mandatory double quotes. See the
+L</allow_barekey> option.
+
+ { foo:"bar" }
+
+=item * duplicate keys
+
+With relaxed decoding of duplicate keys does not error and are silently accepted.
+See L<http://seriot.ch/parsing_json.php#24>:
+RFC 7159 section 4: "The names within an object should be unique."
+
=back
+
=item $json = $json->canonical ([$enable])
=item $enabled = $json->get_canonical
-If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
-by sorting their keys. This is adding a comparatively high overhead.
+If C<$enable> is true (or missing), then the C<encode> method will
+output JSON objects by sorting their keys. This is adding a
+comparatively high overhead.
If C<$enable> is false, then the C<encode> method will output key-value
pairs in the order Perl stores them (which will likely change between runs
@@ -439,14 +669,99 @@ This setting has no effect when decoding JSON texts.
This setting has currently no effect on tied hashes.
+
+=item $json = $json->sort_by (undef, 0, 1 or a block)
+
+This currently only (un)sets the C<canonical> option, and ignores
+custom sort blocks.
+
+This setting has no effect when decoding JSON texts.
+
+This setting has currently no effect on tied hashes.
+
+
+=item $json = $json->escape_slash ([$enable])
+
+=item $enabled = $json->get_escape_slash
+
+According to the JSON Grammar, the I<forward slash> character (U+002F)
+C<"/"> need to be escaped. But by default strings are encoded without
+escaping slashes in all perl JSON encoders.
+
+If C<$enable> is true (or missing), then C<encode> will escape slashes,
+C<"\/">.
+
+This setting has no effect when decoding JSON texts.
+
+
+=item $json = $json->allow_singlequote ([$enable])
+
+=item $enabled = $json->get_allow_singlequote
+
+ $json = $json->allow_singlequote([$enable])
+
+If C<$enable> is true (or missing), then C<decode> will accept
+JSON strings quoted by single quotations that are invalid JSON
+format.
+
+ $json->allow_singlequote->decode({"foo":'bar'});
+ $json->allow_singlequote->decode({'foo':"bar"});
+ $json->allow_singlequote->decode({'foo':'bar'});
+
+This is also enabled with C<relaxed>.
+As same as the C<relaxed> option, this option may be used to parse
+application-specific files written by humans.
+
+
+=item $json = $json->allow_barekey ([$enable])
+
+=item $enabled = $json->get_allow_barekey
+
+ $json = $json->allow_barekey([$enable])
+
+If C<$enable> is true (or missing), then C<decode> will accept
+bare keys of JSON object that are invalid JSON format.
+
+Same as with the C<relaxed> option, this option may be used to parse
+application-specific files written by humans.
+
+ $json->allow_barekey->decode('{foo:"bar"}');
+
+=item $json = $json->allow_bignum ([$enable])
+
+=item $enabled = $json->get_allow_bignum
+
+ $json = $json->allow_bignum([$enable])
+
+If C<$enable> is true (or missing), then C<decode> will convert
+the big integer Perl cannot handle as integer into a L<Math::BigInt>
+object and convert a floating number (any) into a L<Math::BigFloat>.
+
+On the contrary, C<encode> converts C<Math::BigInt> objects and
+C<Math::BigFloat> objects into JSON numbers with C<allow_blessed>
+enable.
+
+ $json->allow_nonref->allow_blessed->allow_bignum;
+ $bigfloat = $json->decode('2.000000000000000000000000001');
+ print $json->encode($bigfloat);
+ # => 2.000000000000000000000000001
+
+See L</MAPPING> about the normal conversion of JSON number.
+
+
+=item $json = $json->allow_bigint ([$enable])
+
+This option is obsolete and replaced by allow_bignum.
+
+
=item $json = $json->allow_nonref ([$enable])
=item $enabled = $json->get_allow_nonref
-If C<$enable> is true (or missing), then the C<encode> method can convert a
-non-reference into its corresponding string, number or null JSON value,
-which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
-values instead of croaking.
+If C<$enable> is true (or missing), then the C<encode> method can
+convert a non-reference into its corresponding string, number or null
+JSON value, which is an extension to RFC4627. Likewise, C<decode> will
+accept those JSON values instead of croaking.
If C<$enable> is false, then the C<encode> method will croak if it isn't
passed an arrayref or hashref, as JSON texts must either be an object
@@ -456,7 +771,7 @@ JSON object or array.
Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
resulting in an invalid JSON text:
- JSON::XS->new->allow_nonref->encode ("Hello, World!")
+ Cpanel::JSON::XS->new->allow_nonref->encode ("Hello, World!")
=> "Hello, World!"
=item $json = $json->allow_unknown ([$enable])
@@ -475,19 +790,34 @@ exception when it encounters anything it cannot encode as JSON.
This option does not affect C<decode> in any way, and it is recommended to
leave it off unless you know your communications partner.
+=item $json = $json->allow_stringify ([$enable])
+
+=item $enabled = $json->get_allow_stringify
+
+If C<$enable> is true (or missing), then C<encode> will stringify the
+non-object perl value or reference. Note that blessed objects are not
+included here and are handled separately by C<allow_blessed> and
+C<convert_blessed>. String references are stringified to the string
+value, other references as in perl.
+
+This option does not affect C<decode> in any way.
+
+This option is special to this module, it is not supported by other
+encoders. So it is not recommended to use it.
+
=item $json = $json->allow_blessed ([$enable])
=item $enabled = $json->get_allow_blessed
-See L<OBJECT SERIALISATION> for details.
-
If C<$enable> is true (or missing), then the C<encode> method will not
-barf when it encounters a blessed reference that it cannot convert
-otherwise. Instead, a JSON C<null> value is encoded instead of the object.
+barf when it encounters a blessed reference. Instead, the value of the
+B<convert_blessed> option will decide whether C<null> (C<convert_blessed>
+disabled or no C<TO_JSON> method found) or a representation of the
+object (C<convert_blessed> enabled and C<TO_JSON> method found) is being
+encoded. Has no effect on C<decode>.
If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters a blessed object that it cannot convert
-otherwise.
+exception when it encounters a blessed object.
This setting has no effect on C<decode>.
@@ -495,12 +825,13 @@ This setting has no effect on C<decode>.
=item $enabled = $json->get_convert_blessed
-See L<OBJECT SERIALISATION> for details.
-
If C<$enable> is true (or missing), then C<encode>, upon encountering a
blessed object, will check for the availability of the C<TO_JSON> method
-on the object's class. If found, it will be called in scalar context and
-the resulting scalar will be encoded instead of the object.
+on the object's class. If found, it will be called in scalar context
+and the resulting scalar will be encoded instead of the object. If no
+C<TO_JSON> method is found, a stringification overload method is tried next.
+If both are not found, the value of C<allow_blessed> will decide what
+to do.
The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
returns other blessed objects, those will be handled in the same
@@ -517,16 +848,16 @@ This setting has no effect on C<decode>.
=item $json = $json->allow_tags ([$enable])
-=item $enabled = $json->allow_tags
+=item $enabled = $json->get_allow_tags
-See L<OBJECT SERIALISATION> for details.
+See L<OBJECT SERIALIZATION> for details.
If C<$enable> is true (or missing), then C<encode>, upon encountering a
blessed object, will check for the availability of the C<FREEZE> method on
-the object's class. If found, it will be used to serialise the object into
+the object's class. If found, it will be used to serialize the object into
a nonstandard tagged JSON value (that JSON decoders cannot decode).
-It also causes C<decode> to parse such tagged JSON values and deserialise
+It also causes C<decode> to parse such tagged JSON values and deserialize
them via a call to the C<THAW> method.
If C<$enable> is false (the default), then C<encode> will not consider
@@ -539,18 +870,18 @@ When C<$coderef> is specified, it will be called from C<decode> each
time it decodes a JSON object. The only argument is a reference to the
newly-created hash. If the code references returns a single scalar (which
need not be a reference), this value (i.e. a copy of that scalar to avoid
-aliasing) is inserted into the deserialised data structure. If it returns
+aliasing) is inserted into the deserialized data structure. If it returns
an empty list (NOTE: I<not> C<undef>, which is a valid scalar), the
-original deserialised hash will be inserted. This setting can slow down
+original deserialized hash will be inserted. This setting can slow down
decoding considerably.
When C<$coderef> is omitted or undefined, any existing callback will
-be removed and C<decode> will not change the deserialised hash in any
+be removed and C<decode> will not change the deserialized hash in any
way.
Example, convert all JSON objects into the integer 5:
- my $js = JSON::XS->new->filter_json_object (sub { 5 });
+ my $js = Cpanel::JSON::XS->new->filter_json_object (sub { 5 });
# returns [5]
$js->decode ('[{}]')
# throw an exception because allow_nonref is not enabled
@@ -574,11 +905,11 @@ disabled. There can only ever be one callback for a given key.
As this callback gets called less often then the C<filter_json_object>
one, decoding speed will not usually suffer as much. Therefore, single-key
-objects make excellent targets to serialise Perl objects into, especially
+objects make excellent targets to serialize Perl objects into, especially
as single-key JSON objects are as close to the type-tagged value concept
as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
support this in any way, so you need to make sure your data never looks
-like a serialised Perl hash.
+like a serialized Perl hash.
Typical names for the single object key are C<__class_whatever__>, or
C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
@@ -589,7 +920,7 @@ Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
into the corresponding C<< $WIDGET{<id>} >> object:
# return whatever is in $WIDGET{5}:
- JSON::XS
+ Cpanel::JSON::XS
->new
->filter_json_single_key_object (__widget__ => sub {
$WIDGET{ $_[0] }
@@ -597,7 +928,7 @@ into the corresponding C<< $WIDGET{<id>} >> object:
->decode ('{"__widget__": 5')
# this can be used with a TO_JSON method in some "widget" class
- # for serialisation to json:
+ # for serialization to json:
sub WidgetBase::TO_JSON {
my ($self) = @_;
@@ -676,18 +1007,47 @@ effect on C<encode> (yet).
If no argument is given, the limit check will be deactivated (same as when
C<0> is specified).
-See SECURITY CONSIDERATIONS, below, for more info on why this is useful.
+See L</SECURITY CONSIDERATIONS>, below, for more info on why this is useful.
+
+=item $json->stringify_infnan ([$infnan_mode = 1])
+
+=item $infnan_mode = $json->get_stringify_infnan
+
+Get or set how Cpanel::JSON::XS encodes C<inf>, C<-inf> or C<nan> for numeric
+values. Also qnan, snan or negative nan on some platforms.
+
+C<null>: infnan_mode = 0. Similar to most JSON modules in other languages.
+Always null.
+
+stringified: infnan_mode = 1. As in Mojo::JSON. Platform specific strings.
+Stringified via sprintf(%g), with double quotes.
+
+inf/nan: infnan_mode = 2. As in JSON::XS, and older releases.
+Passes through platform dependent values, invalid JSON. Stringified via
+sprintf(%g), but without double quotes.
+
+"inf/-inf/nan": infnan_mode = 3. Platform independent inf/nan/-inf
+strings. No QNAN/SNAN/negative NAN support, unified to "nan". Much
+easier to detect, but may conflict with valid strings.
=item $json_text = $json->encode ($perl_scalar)
-Converts the given Perl value or data structure to its JSON
-representation. Croaks on error.
+Converts the given Perl data structure (a simple scalar or a reference
+to a hash or array) to its JSON representation. Simple scalars will be
+converted into JSON string or number sequences, while references to
+arrays become JSON arrays and references to hashes become JSON
+objects. Undefined Perl values (e.g. C<undef>) become JSON C<null>
+values. Neither C<true> nor C<false> values will be generated.
=item $perl_scalar = $json->decode ($json_text)
The opposite of C<encode>: expects a JSON text and tries to parse it,
returning the resulting simple scalar or reference. Croaks on error.
+JSON numbers and strings become simple Perl scalars. JSON arrays become
+Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
+C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
+
=item ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
This works like the C<decode> method, but instead of raising an exception
@@ -698,9 +1058,17 @@ so far.
This is useful if your JSON texts are not delimited by an outer protocol
and you need to know where the JSON text ends.
- JSON::XS->new->decode_prefix ("[1] the tail")
+ Cpanel::JSON::XS->new->decode_prefix ("[1] the tail")
=> ([1], 3)
+=item $json->to_json ($perl_hash_or_arrayref)
+
+Deprecated method for perl 5.8 and newer. Use L<encode_json> instead.
+
+=item $json->from_json ($utf8_encoded_json_text)
+
+Deprecated method for perl 5.8 and newer. Use L<decode_json> instead.
+
=back
@@ -715,14 +1083,14 @@ using C<decode_prefix> to see if a full JSON object is available, but
is much more efficient (and can be implemented with a minimum of method
calls).
-JSON::XS will only attempt to parse the JSON text once it is sure it
-has enough text to get a decisive result, using a very simple but
-truly incremental parser. This means that it sometimes won't stop as
-early as the full parser, for example, it doesn't detect mismatched
-parentheses. The only thing it guarantees is that it starts decoding as
-soon as a syntactically valid JSON text has been seen. This means you need
-to set resource limits (e.g. C<max_size>) to ensure the parser will stop
-parsing in the presence if syntax errors.
+Cpanel::JSON::XS will only attempt to parse the JSON text once it is
+sure it has enough text to get a decisive result, using a very simple
+but truly incremental parser. This means that it sometimes won't stop
+as early as the full parser, for example, it doesn't detect mismatched
+parentheses. The only thing it guarantees is that it starts decoding
+as soon as a syntactically valid JSON text has been seen. This means
+you need to set resource limits (e.g. C<max_size>) to ensure the
+parser will stop parsing in the presence if syntax errors.
The following methods implement this incremental parser.
@@ -750,30 +1118,28 @@ using the method.
And finally, in list context, it will try to extract as many objects
from the stream as it can find and return them, or the empty list
-otherwise. For this to work, there must be no separators (other than
-whitespace) between the JSON objects or arrays, instead they must be
-concatenated back-to-back. If an error occurs, an exception will be
-raised as in the scalar context case. Note that in this case, any
-previously-parsed JSON texts will be lost.
+otherwise. For this to work, there must be no separators between the JSON
+objects or arrays, instead they must be concatenated back-to-back. If
+an error occurs, an exception will be raised as in the scalar context
+case. Note that in this case, any previously-parsed JSON texts will be
+lost.
Example: Parse some JSON arrays/objects in a given string and return
them.
- my @objs = JSON::XS->new->incr_parse ("[5][7][1,2]");
+ my @objs = Cpanel::JSON::XS->new->incr_parse ("[5][7][1,2]");
-=item $lvalue_string = $json->incr_text
+=item $lvalue_string = $json->incr_text (>5.8 only)
This method returns the currently stored JSON fragment as an lvalue, that
is, you can manipulate it. This I<only> works when a preceding call to
-C<incr_parse> in I<scalar context> successfully returned an object. Under
-all other circumstances you must not call this function (I mean it.
-although in simple tests it might actually work, it I<will> fail under
-real world conditions). As a special exception, you can also call this
-method before having parsed anything.
+C<incr_parse> in I<scalar context> successfully returned an object, and
+2. only with Perl >= 5.8
-That means you can only use this function to look at or manipulate text
-before or after complete JSON objects, not while the parser is in the
-middle of parsing a JSON object.
+Under all other circumstances you must not call this function (I mean
+it. although in simple tests it might actually work, it I<will> fail
+under real world conditions). As a special exception, you can also
+call this method before having parsed anything.
This function is useful in two cases: a) finding the trailing text after a
JSON object or b) parsing multiple JSON objects separated by non-JSON text
@@ -806,13 +1172,14 @@ each successful decode.
All options that affect decoding are supported, except
C<allow_nonref>. The reason for this is that it cannot be made to work
sensibly: JSON objects and arrays are self-delimited, i.e. you can
-concatenate them back to back and still decode them perfectly. This does
-not hold true for JSON numbers, however.
+concatenate them back to back and still decode them perfectly. This
+does not hold true for JSON numbers, however.
-For example, is the string C<1> a single JSON number, or is it simply the
-start of C<12>? Or is C<12> a single JSON number, or the concatenation
-of C<1> and C<2>? In neither case you can tell, and this is why JSON::XS
-takes the conservative route and disallows this case.
+For example, is the string C<1> a single JSON number, or is it simply
+the start of C<12>? Or is C<12> a single JSON number, or the
+concatenation of C<1> and C<2>? In neither case you can tell, and this
+is why Cpanel::JSON::XS takes the conservative route and disallows
+this case.
=head2 EXAMPLES
@@ -822,7 +1189,7 @@ the start of a string and identify the portion after the JSON object:
my $text = "[1,2,3] hello";
- my $json = new JSON::XS;
+ my $json = new Cpanel::JSON::XS;
my $obj = $json->incr_parse ($text)
or die "expected JSON object or array at beginning of string";
@@ -842,7 +1209,7 @@ with C<telnet>...).
Here is how you'd do it (it is trivial to write this in an event-based
manner):
- my $json = new JSON::XS;
+ my $json = new Cpanel::JSON::XS;
# read some data from the socket
while (sysread $socket, my $buf, 4096) {
@@ -859,7 +1226,7 @@ or arrays, all separated by (optional) comma characters (e.g. C<[1],[2],
and here is where the lvalue-ness of C<incr_text> comes in useful:
my $text = "[1],[2], [3]";
- my $json = new JSON::XS;
+ my $json = new Cpanel::JSON::XS;
# void context, so no parsing done
$json->incr_parse ($text);
@@ -878,13 +1245,13 @@ JSON array-of-objects, many gigabytes in size, and you want to parse it,
but you cannot load it into memory fully (this has actually happened in
the real world :).
-Well, you lost, you have to implement your own JSON parser. But JSON::XS
-can still help you: You implement a (very simple) array parser and let
-JSON decode the array elements, which are all full JSON objects on their
-own (this wouldn't work if the array elements could be JSON numbers, for
-example):
+Well, you lost, you have to implement your own JSON parser. But
+Cpanel::JSON::XS can still help you: You implement a (very simple)
+array parser and let JSON decode the array elements, which are all
+full JSON objects on their own (this wouldn't work if the array
+elements could be JSON numbers, for example):
- my $json = new JSON::XS;
+ my $json = new Cpanel::JSON::XS;
# open the monster
open my $fh, "<bigfile.json"
@@ -950,14 +1317,38 @@ This is a complex example, but most of the complexity comes from the fact
that we are trying to be correct (bear with me if I am wrong, I never ran
the above example :).
+=head1 BOM
+
+Detect all unicode B<Byte Order Marks> on decode.
+Which are UTF-8, UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE.
+
+B<Warning>: With perls older than 5.20 you need load the Encode module
+before loading a multibyte BOM, i.e. >= UTF-16. Otherwise an error is
+thrown. This is an implementation limitation and might get fixed later.
+
+See L<https://tools.ietf.org/html/rfc7159#section-8.1>
+I<"JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32.">
+
+I<"Implementations MUST NOT add a byte order mark to the beginning of a
+JSON text", "implementations (...) MAY ignore the presence of a byte
+order mark rather than treating it as an error".>
+
+See also L<http://www.unicode.org/faq/utf_bom.html#BOM>.
+
+Beware that Cpanel::JSON::XS is currently the only JSON module which
+does accept and decode a BOM.
+The latest JSON spec
+L<https://www.greenbytes.de/tech/webdav/rfc8259.html#character.encoding>
+forbid the usage of UTF-16 or UTF-32, the character encoding is UTF-8.
+Thus in subsequent updates BOM's of UTF-16 or UTF-32 will throw an error.
=head1 MAPPING
-This section describes how JSON::XS maps Perl values to JSON values and
-vice versa. These mappings are designed to "do the right thing" in most
-circumstances automatically, preserving round-tripping characteristics
-(what you put in comes out as something equivalent).
+This section describes how Cpanel::JSON::XS maps Perl values to JSON
+values and vice versa. These mappings are designed to "do the right
+thing" in most circumstances automatically, preserving round-tripping
+characteristics (what you put in comes out as something equivalent).
For the more enlightened: note that in the following descriptions,
lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl>
@@ -991,30 +1382,41 @@ the Perl level, there is no difference between those as Perl handles all
the conversion details, but an integer may take slightly less memory and
might represent more values exactly than floating point numbers.
-If the number consists of digits only, JSON::XS will try to represent
-it as an integer value. If that fails, it will try to represent it as
-a numeric (floating point) value if that is possible without loss of
-precision. Otherwise it will preserve the number as a string value (in
-which case you lose roundtripping ability, as the JSON number will be
-re-encoded to a JSON string).
+If the number consists of digits only, Cpanel::JSON::XS will try to
+represent it as an integer value. If that fails, it will try to
+represent it as a numeric (floating point) value if that is possible
+without loss of precision. Otherwise it will preserve the number as a
+string value (in which case you lose roundtripping ability, as the
+JSON number will be re-encoded to a JSON string).
Numbers containing a fractional or exponential part will always be
represented as numeric (floating point) values, possibly at a loss of
precision (in which case you might lose perfect roundtripping ability, but
the JSON number will still be re-encoded as a JSON number).
-Note that precision is not accuracy - binary floating point values cannot
-represent most decimal fractions exactly, and when converting from and to
-floating point, JSON::XS only guarantees precision up to but not including
-the least significant bit.
+Note that precision is not accuracy - binary floating point values
+cannot represent most decimal fractions exactly, and when converting
+from and to floating point, C<Cpanel::JSON::XS> only guarantees precision
+up to but not including the least significant bit.
=item true, false
-These JSON atoms become C<Types::Serialiser::true> and
-C<Types::Serialiser::false>, respectively. They are overloaded to act
-almost exactly like the numbers C<1> and C<0>. You can check whether
-a scalar is a JSON boolean by using the C<Types::Serialiser::is_bool>
-function (after C<use Types::Serialier>, of course).
+These JSON atoms become C<Cpanel::JSON::XS::true> and
+C<Cpanel::JSON::XS::false>, respectively. They are C<JSON::PP::Boolean>
+objects and are overloaded to act almost exactly like the numbers C<1>
+and C<0>. You can check whether a scalar is a JSON boolean by using
+the C<Cpanel::JSON::XS::is_bool> function.
+
+The other round, from perl to JSON, C<!0> which is represented as
+C<yes> becomes C<true>, and C<!1> which is represented as
+C<no> becomes C<false>.
+
+Via L<Cpanel::JSON::XS::Type> you can now even force negation in C<encode>,
+without overloading of C<!>:
+
+ my $false = Cpanel::JSON::XS::false;
+ print($json->encode([!$false], [JSON_TYPE_BOOL]));
+ => [true]
=item null
@@ -1033,7 +1435,7 @@ C<allow_tags> setting, are tagged values. In this implementation, the
I<tag> must be a perl package/class name encoded as a JSON string, and the
I<value> must be a JSON array encoding optional constructor arguments.
-See L<OBJECT SERIALISATION>, below, for details.
+See L<OBJECT SERIALIZATION>, below, for details.
=back
@@ -1048,13 +1450,15 @@ a Perl value.
=item hash references
-Perl hash references become JSON objects. As there is no inherent
-ordering in hash keys (or JSON objects), they will usually be encoded
-in a pseudo-random order. JSON::XS can optionally sort the hash keys
-(determined by the I<canonical> flag), so the same datastructure will
-serialise to the same JSON text (given same settings and version of
-JSON::XS), but this incurs a runtime overhead and is only rarely useful,
-e.g. when you want to compare some JSON text against another for equality.
+Perl hash references become JSON objects. As there is no inherent ordering
+in hash keys (or JSON objects), they will usually be encoded in a
+pseudo-random order that can change between runs of the same program but
+stays generally the same within a single run of a program. Cpanel::JSON::XS can
+optionally sort the hash keys (determined by the I<canonical> flag), so
+the same datastructure will serialize to the same JSON text (given same
+settings and version of Cpanel::JSON::XS), but this incurs a runtime overhead
+and is only rarely useful, e.g. when you want to compare some JSON text
+against another for equality.
=item array references
@@ -1064,46 +1468,71 @@ Perl array references become JSON arrays.
Other unblessed references are generally not allowed and will cause an
exception to be thrown, except for references to the integers C<0> and
-C<1>, which get turned into C<false> and C<true> atoms in JSON.
+C<1>, which get turned into C<false> and C<true> atoms in JSON.
+
+With the option C<allow_stringify>, you can ignore the exception and return
+the stringification of the perl value.
+
+With the option C<allow_unknown>, you can ignore the exception and
+return C<null> instead.
-Since C<JSON::XS> uses the boolean model from L<Types::Serialiser>, you
-can also C<use Types::Serialiser> and then use C<Types::Serialiser::false>
-and C<Types::Serialiser::true> to improve readability.
+ encode_json [\"x"] # => cannot encode reference to scalar 'SCALAR(0x..)'
+ # unless the scalar is 0 or 1
+ encode_json [\0, \1] # yields [false,true]
- use Types::Serialiser;
- encode_json [\0, Types::Serialiser::true] # yields [false,true]
+ allow_stringify->encode_json [\"x"] # yields "x" unlike JSON::PP
+ allow_unknown->encode_json [\"x"] # yields null as in JSON::PP
-=item Types::Serialiser::true, Types::Serialiser::false
+=item Cpanel::JSON::XS::true, Cpanel::JSON::XS::false
-These special values from the L<Types::Serialiser> module become JSON true
-and JSON false values, respectively. You can also use C<\1> and C<\0>
+These special values become JSON true and JSON false values,
+respectively. You can also use C<\1> and C<\0> or C<!0> and C<!1>
directly if you want.
+ encode_json [Cpanel::JSON::XS::true, Cpanel::JSON::XS::true] # yields [false,true]
+ encode_json [!1, !0] # yields [false,true]
+
=item blessed objects
-Blessed objects are not directly representable in JSON, but C<JSON::XS>
-allows various ways of handling objects. See L<OBJECT SERIALISATION>,
-below, for details.
+Blessed objects are not directly representable in JSON, but
+C<Cpanel::JSON::XS> allows various optional ways of handling
+objects. See L<OBJECT SERIALIZATION>, below, for details.
+
+See the C<allow_blessed> and C<convert_blessed> methods on various
+options on how to deal with this: basically, you can choose between
+throwing an exception, encoding the reference as if it weren't
+blessed, use the objects overloaded stringification method or provide
+your own serializer method.
=item simple scalars
Simple Perl scalars (any scalar that is not a reference) are the most
-difficult objects to encode: JSON::XS will encode undefined scalars as
-JSON C<null> values, scalars that have last been used in a string context
-before encoding as JSON strings, and anything else as number value:
+difficult objects to encode: Cpanel::JSON::XS will encode undefined
+scalars or inf/nan as JSON C<null> values, scalars that have last been
+used in a string context before encoding as JSON strings, and anything
+else as number value:
# dump as number
encode_json [2] # yields [2]
encode_json [-3.0e17] # yields [-3e+17]
my $value = 5; encode_json [$value] # yields [5]
- # used as string, so dump as string
+ # used as string, but the two representations are for the same number
print $value;
- encode_json [$value] # yields ["5"]
+ encode_json [$value] # yields [5]
+
+ # used as different string (non-matching dual-var)
+ my $str = '0 but true';
+ my $num = 1 + $str;
+ encode_json [$num, $str] # yields [1,"0 but true"]
# undef becomes null
encode_json [undef] # yields [null]
+ # inf or nan becomes null, unless you answered
+ # "Do you want to handle inf/nan as strings" with yes
+ encode_json [9**9**9] # yields [null]
+
You can force the type to be a JSON string by stringifying it:
my $x = 3.1; # some variable containing a number
@@ -1117,43 +1546,40 @@ You can force the type to be a JSON number by numifying it:
$x += 0; # numify it, ensuring it will be dumped as a number
$x *= 1; # same thing, the choice is yours.
-You can not currently force the type in other, less obscure, ways. Tell me
-if you need this capability (but don't forget to explain why it's needed
-:).
-
Note that numerical precision has the same meaning as under Perl (so
binary to decimal conversion follows the same rules as in Perl, which
can differ to other languages). Also, your perl interpreter might expose
extensions to the floating point numbers of your platform, such as
-infinities or NaN's - these cannot be represented in JSON, and it is an
-error to pass those in.
+infinities or NaN's - these cannot be represented in JSON, and thus
+null is returned instead. Optionally you can configure it to stringify
+inf and nan values.
=back
-=head2 OBJECT SERIALISATION
+=head2 OBJECT SERIALIZATION
As JSON cannot directly represent Perl objects, you have to choose between
-a pure JSON representation (without the ability to deserialise the object
+a pure JSON representation (without the ability to deserialize the object
automatically again), and a nonstandard extension to the JSON syntax,
tagged values.
-=head3 SERIALISATION
+=head3 SERIALIZATION
-What happens when C<JSON::XS> encounters a Perl object depends on the
-C<allow_blessed>, C<convert_blessed> and C<allow_tags> settings, which are
-used in this order:
+What happens when C<Cpanel::JSON::XS> encounters a Perl object depends
+on the C<allow_blessed>, C<convert_blessed> and C<allow_tags>
+settings, which are used in this order:
=over 4
=item 1. C<allow_tags> is enabled and the object has a C<FREEZE> method.
-In this case, C<JSON::XS> uses the L<Types::Serialiser> object
-serialisation protocol to create a tagged JSON value, using a nonstandard
+In this case, C<Cpanel::JSON::XS> uses the L<Types::Serialiser> object
+serialization protocol to create a tagged JSON value, using a nonstandard
extension to the JSON syntax.
This works by invoking the C<FREEZE> method on the object, with the first
-argument being the object to serialise, and the second argument being the
-constant string C<JSON> to distinguish it from other serialisers.
+argument being the object to serialize, and the second argument being the
+constant string C<JSON> to distinguish it from other serializers.
The C<FREEZE> method can return any number of values (i.e. zero or
more). These values and the paclkage/classname of the object will then be
@@ -1171,7 +1597,7 @@ For example, the hypothetical C<My::Object> C<FREEZE> method might use the
objects C<type> and C<id> members to encode the object:
sub My::Object::FREEZE {
- my ($self, $serialiser) = @_;
+ my ($self, $serializer) = @_;
($self->{type}, $self->{id})
}
@@ -1183,7 +1609,7 @@ context. It must return a single scalar that can be directly encoded into
JSON. This scalar replaces the object in the JSON text.
For example, the following C<TO_JSON> method will convert all L<URI>
-objects to JSON strings when serialised. The fatc that these values
+objects to JSON strings when serialized. The fact that these values
originally were L<URI> objects is lost.
sub URI::TO_JSON {
@@ -1191,22 +1617,35 @@ originally were L<URI> objects is lost.
$uri->as_string
}
+=item 2. C<convert_blessed> is enabled and the object has a stringification overload.
+
+In this case, the overloaded C<""> method of the object is invoked in scalar
+context. It must return a single scalar that can be directly encoded into
+JSON. This scalar replaces the object in the JSON text.
+
+For example, the following C<""> method will convert all L<URI>
+objects to JSON strings when serialized. The fact that these values
+originally were L<URI> objects is lost.
+
+ package URI;
+ use overload '""' => sub { shift->as_string };
+
=item 3. C<allow_blessed> is enabled.
-The object will be serialised as a JSON null value.
+The object will be serialized as a JSON null value.
=item 4. none of the above
If none of the settings are enabled or the respective methods are missing,
-C<JSON::XS> throws an exception.
+C<Cpanel::JSON::XS> throws an exception.
=back
-=head3 DESERIALISATION
+=head3 DESERIALIZATION
-For deserialisation there are only two cases to consider: either
+For deserialization there are only two cases to consider: either
nonstandard tagging was used, in which case C<allow_tags> decides,
-or objects cannot be automatically be deserialised, in which
+or objects cannot be automatically be deserialized, in which
case you can use postprocessing or the C<filter_json_object> or
C<filter_json_single_key_object> callbacks to get some real objects our of
your JSON.
@@ -1215,8 +1654,8 @@ This section only considers the tagged value case: I a tagged JSON object
is encountered during decoding and C<allow_tags> is disabled, a parse
error will result (as if tagged values were not part of the grammar).
-If C<allow_tags> is enabled, C<JSON::XS> will look up the C<THAW> method
-of the package/classname used during serialisation (it will not attempt
+If C<allow_tags> is enabled, C<Cpanel::JSON::XS> will look up the C<THAW> method
+of the package/classname used during serialization (it will not attempt
to load the package as a Perl module). If there is no such method, the
decoding will fail with an error.
@@ -1233,17 +1672,22 @@ As an example, let's implement a C<THAW> function that regenerates the
C<My::Object> from the C<FREEZE> example earlier:
sub My::Object::THAW {
- my ($class, $serialiser, $type, $id) = @_;
+ my ($class, $serializer, $type, $id) = @_;
$class->new (type => $type, id => $id)
}
+See the L</SECURITY CONSIDERATIONS> section below. Allowing external
+json objects being deserialized to perl objects is usually a very bad
+idea.
+
=head1 ENCODING/CODESET FLAG NOTES
The interested reader might have seen a number of flags that signify
-encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be
-some confusion on what these do, so here is a short comparison:
+encodings or codesets - C<utf8>, C<latin1>, C<binary> and
+C<ascii>. There seems to be some confusion on what these do, so here
+is a short comparison:
C<utf8> controls whether the JSON text created by C<encode> (and expected
by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only
@@ -1294,11 +1738,12 @@ The C<utf8> flag therefore switches between two modes: disabled means you
will get a Unicode string in Perl, enabled means you get an UTF-8 encoded
octet/binary string in Perl.
-=item C<latin1> or C<ascii> flags enabled
+=item C<latin1>, C<binary> or C<ascii> flags enabled
-With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters
-with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining
-characters as specified by the C<utf8> flag.
+With C<latin1> (or C<ascii>) enabled, C<encode> will escape
+characters with ordinal values > 255 (> 127 with C<ascii>) and encode
+the remaining characters as specified by the C<utf8> flag.
+With C<binary> enabled, ordinal values > 255 are illegal.
If C<utf8> is disabled, then the result is also correctly encoded in those
character sets (as both are proper subsets of Unicode, meaning that a
@@ -1320,11 +1765,13 @@ values as governed by the C<utf8> flag. If it is disabled, this allows you
to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of
Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings.
-So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag -
-they only govern when the JSON output engine escapes a character or not.
+So neither C<latin1>, C<binary> nor C<ascii> are incompatible with the
+C<utf8> flag - they only govern when the JSON output engine escapes a
+character or not.
-The main use for C<latin1> is to relatively efficiently store binary data
-as JSON, at the expense of breaking compatibility with most JSON decoders.
+The main use for C<latin1> or C<binary> is to relatively efficiently
+store binary data as JSON, at the expense of breaking compatibility
+with most JSON decoders.
The main use for C<ascii> is to force the output to not contain characters
with values > 127, which means you can interpret the resulting string
@@ -1340,7 +1787,7 @@ proper subset of most 8-bit and multibyte encodings in use in the world.
=head2 JSON and ECMAscript
JSON syntax is based on how literals are represented in javascript (the
-not-standardised predecessor of ECMAscript) which is presumably why it is
+not-standardized predecessor of ECMAscript) which is presumably why it is
called "JavaScript Object Notation".
However, JSON is not a subset (and also not a superset of course) of
@@ -1356,7 +1803,7 @@ JSON strings, but are not allowed in ECMAscript string literals, so the
following Perl fragment will not output something that can be guaranteed
to be parsable by javascript's C<eval>:
- use JSON::XS;
+ use Cpanel::JSON::XS;
print encode_json [chr 0x2028];
@@ -1367,16 +1814,16 @@ F<json2.js> parser).
If this is not an option, you can, as a stop-gap measure, simply encode to
ASCII-only JSON:
- use JSON::XS;
+ use Cpanel::JSON::XS;
- print JSON::XS->new->ascii->encode ([chr 0x2028]);
+ print Cpanel::JSON::XS->new->ascii->encode ([chr 0x2028]);
Note that this will enlarge the resulting JSON text quite a bit if you
have many non-ASCII characters. You might be tempted to run some regexes
to only escape U+2028 and U+2029, e.g.:
# DO NOT USE THIS!
- my $json = JSON::XS->new->utf8->encode ([chr 0x2028]);
+ my $json = Cpanel::JSON::XS->new->utf8->encode ([chr 0x2028]);
$json =~ s/\xe2\x80\xa8/\\u2028/g; # escape U+2028
$json =~ s/\xe2\x80\xa9/\\u2029/g; # escape U+2029
print $json;
@@ -1399,67 +1846,33 @@ output for these property strings, e.g.:
This works because C<__proto__> is not valid outside of strings, so every
occurrence of C<"__proto__"\s*:> must be a string used as property name.
+Unicode non-characters between U+FFFD and U+10FFFF are decoded either
+to the recommended U+FFFD REPLACEMENT CHARACTER (see Unicode PR #121:
+Recommended Practice for Replacement Characters), or in the binary or
+relaxed mode left as is, keeping the illegal non-characters as before.
+
+Raw non-Unicode characters outside the valid unicode range fail now to
+parse, because "A string is a sequence of zero or more Unicode
+characters" RFC 7159 section 1 and "JSON text SHALL be encoded in
+Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER
+flag when parsing unicode.
+
If you know of other incompatibilities, please let me know.
=head2 JSON and YAML
-You often hear that JSON is a subset of YAML. This is, however, a mass
-hysteria(*) and very far from the truth (as of the time of this writing),
-so let me state it clearly: I<in general, there is no way to configure
-JSON::XS to output a data structure as valid YAML> that works in all
-cases.
-
-If you really must use JSON::XS to generate YAML, you should use this
-algorithm (subject to change in future versions):
+You often hear that JSON is a subset of YAML. I<in general, there is
+no way to configure JSON::XS to output a data structure as valid YAML>
+that works in all cases. If you really must use Cpanel::JSON::XS to
+generate YAML, you should use this algorithm (subject to change in
+future versions):
- my $to_yaml = JSON::XS->new->utf8->space_after (1);
+ my $to_yaml = Cpanel::JSON::XS->new->utf8->space_after (1);
my $yaml = $to_yaml->encode ($ref) . "\n";
This will I<usually> generate JSON texts that also parse as valid
-YAML. Please note that YAML has hardcoded limits on (simple) object key
-lengths that JSON doesn't have and also has different and incompatible
-unicode character escape syntax, so you should make sure that your hash
-keys are noticeably shorter than the 1024 "stream characters" YAML allows
-and that you do not have characters with codepoint values outside the
-Unicode BMP (basic multilingual page). YAML also does not allow C<\/>
-sequences in strings (which JSON::XS does not I<currently> generate, but
-other JSON generators might).
-
-There might be other incompatibilities that I am not aware of (or the YAML
-specification has been changed yet again - it does so quite often). In
-general you should not try to generate YAML with a JSON generator or vice
-versa, or try to parse JSON with a YAML parser or vice versa: chances are
-high that you will run into severe interoperability problems when you
-least expect it.
-
-=over 4
-
-=item (*)
-
-I have been pressured multiple times by Brian Ingerson (one of the
-authors of the YAML specification) to remove this paragraph, despite him
-acknowledging that the actual incompatibilities exist. As I was personally
-bitten by this "JSON is YAML" lie, I refused and said I will continue to
-educate people about these issues, so others do not run into the same
-problem again and again. After this, Brian called me a (quote)I<complete
-and worthless idiot>(unquote).
-
-In my opinion, instead of pressuring and insulting people who actually
-clarify issues with YAML and the wrong statements of some of its
-proponents, I would kindly suggest reading the JSON spec (which is not
-that difficult or long) and finally make YAML compatible to it, and
-educating users about the changes, instead of spreading lies about the
-real compatibility for many I<years> and trying to silence people who
-point out that it isn't true.
-
-Addendum/2009: the YAML 1.2 spec is still incompatible with JSON, even
-though the incompatibilities have been documented (and are known to Brian)
-for many years and the spec makes explicit claims that YAML is a superset
-of JSON. It would be so easy to fix, but apparently, bullying people and
-corrupting userdata is so much easier.
-
-=back
+YAML.
=head2 SPEED
@@ -1469,6 +1882,12 @@ tables. They have been generated with the help of the C<eg/bench> program
in the JSON::XS distribution, to make it easy to compare on your own
system.
+JSON::XS is with L<Data::MessagePack> and L<Sereal> one of the fastest
+serializers, because JSON and JSON::XS do not support backrefs (no
+graph structures), only trees. Storable supports backrefs,
+i.e. graphs. Data::MessagePack encodes its data binary (as Storable)
+and supports only very simple subset of JSON.
+
First comes a comparison between various modules using
a very short single-line JSON string (also available at
L<http://dist.schmorp.de/misc/json/short.json>).
@@ -1478,9 +1897,9 @@ L<http://dist.schmorp.de/misc/json/short.json>).
1, 0]}
It shows the number of encodes/decodes per second (JSON::XS uses
-the functional interface, while JSON::XS/2 uses the OO interface
-with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables
-shrink. JSON::DWIW/DS uses the deserialise function, while JSON::DWIW::FJ
+the functional interface, while Cpanel::JSON::XS/2 uses the OO interface
+with pretty-printing and hash key sorting enabled, Cpanel::JSON::XS/3 enables
+shrink. JSON::DWIW/DS uses the deserialize function, while JSON::DWIW::FJ
uses the from_json method). Higher is better:
module | encode | decode |
@@ -1524,125 +1943,58 @@ will be broken due to missing (or wrong) Unicode handling. Others refuse
to decode or encode properly, so it was impossible to prepare a fair
comparison table for that case.
+For updated graphs see L<https://github.com/Sereal/Sereal/wiki/Sereal-Comparison-Graphs>
-=head1 SECURITY CONSIDERATIONS
-When you are using JSON in a protocol, talking to untrusted potentially
-hostile creatures requires relatively few measures.
+=head1 INTEROP with JSON and JSON::XS and other JSON modules
-First of all, your JSON decoder should be secure, that is, should not have
-any buffer overflows. Obviously, this module should ensure that and I am
-trying hard on making that true, but you never know.
+As long as you only serialize data that can be directly expressed in
+JSON, C<Cpanel::JSON::XS> is incapable of generating invalid JSON
+output (modulo bugs, but C<JSON::XS> has found more bugs in the
+official JSON testsuite (1) than the official JSON testsuite has found
+in C<JSON::XS> (0)).
+C<Cpanel::JSON::XS> is currently the only known JSON decoder which passes all
+L<http://seriot.ch/parsing_json.html> tests, while being the fastest also.
-Second, you need to avoid resource-starving attacks. That means you should
-limit the size of JSON texts you accept, or make sure then when your
-resources run out, that's just fine (e.g. by using a separate process that
-can crash safely). The size of a JSON text in octets or characters is
-usually a good indication of the size of the resources required to decode
-it into a Perl structure. While JSON::XS can check the size of the JSON
-text, it might be too late when you already have it in memory, so you
-might want to check the size before you accept the string.
-
-Third, JSON::XS recurses using the C stack when decoding objects and
-arrays. The C stack is a limited resource: for instance, on my amd64
-machine with 8MB of stack size I can decode around 180k nested arrays but
-only 14k nested JSON objects (due to perl itself recursing deeply on croak
-to free the temporary). If that is exceeded, the program crashes. To be
-conservative, the default nesting limit is set to 512. If your process
-has a smaller stack, you should adjust this setting accordingly with the
-C<max_depth> method.
-
-Something else could bomb you, too, that I forgot to think of. In that
-case, you get to keep the pieces. I am always open for hints, though...
-
-Also keep in mind that JSON::XS might leak contents of your Perl data
-structures in its error messages, so when you serialise sensitive
-information you might want to make sure that exceptions thrown by JSON::XS
-will not end up in front of untrusted eyes.
-
-If you are using JSON::XS to return packets to consumption
-by JavaScript scripts in a browser you should have a look at
-L<http://blog.archive.jpsykes.com/47/practical-csrf-and-json-security/> to
-see whether you are vulnerable to some common attack vectors (which really
-are browser design bugs, but it is still you who will have to deal with
-it, as major browser developers care only for features, not about getting
-security right).
-
-
-=head1 "OLD" VS. "NEW" JSON (RFC 4627 VS. RFC 7159)
-
-TL;DR: Due to security concerns, JSON::XS will not allow scalar data in
-JSON texts by default - you need to create your own JSON::XS object and
-enable C<allow_nonref>:
-
-
- my $json = JSON::XS->new->allow_nonref;
-
- $text = $json->encode ($data);
- $data = $json->decode ($text);
-
-The long version: JSON being an important and supposedly stable format,
-the IETF standardised it as RFC 4627 in 2006. Unfortunately, the inventor
-of JSON, Dougles Crockford, unilaterally changed the definition of JSON in
-javascript. Rather than create a fork, the IETF decided to standardise the
-new syntax (apparently, so Iw as told, without finding it very amusing).
-
-The biggest difference between thed original JSON and the new JSON is that
-the new JSON supports scalars (anything other than arrays and objects) at
-the toplevel of a JSON text. While this is strictly backwards compatible
-to older versions, it breaks a number of protocols that relied on sending
-JSON back-to-back, and is a minor security concern.
-
-For example, imagine you have two banks communicating, and on one side,
-trhe JSON coder gets upgraded. Two messages, such as C<10> and C<1000>
-might then be confused to mean C<101000>, something that couldn't happen
-in the original JSON, because niether of these messages would be valid
-JSON.
+When you have trouble decoding JSON generated by this module using other
+decoders, then it is very likely that you have an encoding mismatch or the
+other decoder is broken.
-If one side accepts these messages, then an upgrade in the coder on either
-side could result in this becoming exploitable.
+When decoding, C<JSON::XS> is strict by default and will likely catch
+all errors. There are currently two settings that change this:
+C<relaxed> makes C<JSON::XS> accept (but not generate) some
+non-standard extensions, and C<allow_tags> or C<allow_blessed> will
+allow you to encode and decode Perl objects, at the cost of being
+totally insecure and not outputting valid JSON anymore.
-This module has always allowed these messages as an optional extension, by
-default disabled. The security concerns are the reason why the default is
-still disabled, but future versions might/will likely upgrade to the newer
-RFC as default format, so you are advised to check your implementation
-and/or override the default with C<< ->allow_nonref (0) >> to ensure that
-future versions are safe.
+JSON-XS-3.01 broke interoperability with JSON-2.90 with booleans. See L<JSON>.
+Cpanel::JSON::XS needs to know the JSON and JSON::XS versions to be able work
+with those objects, especially when encoding a booleans like C<{"is_true":true}>.
+So you need to load these modules before.
-=head1 INTEROPERABILITY WITH OTHER MODULES
+true/false overloading and boolean representations are supported.
-C<JSON::XS> uses the L<Types::Serialiser> module to provide boolean
-constants. That means that the JSON true and false values will be
-comaptible to true and false values of other modules that do the same,
-such as L<JSON::PP> and L<CBOR::XS>.
+JSON::XS and JSON::PP representations are accepted and older JSON::XS
+accepts Cpanel::JSON::XS booleans. All JSON modules JSON, JSON, PP,
+JSON::XS, Cpanel::JSON::XS produce JSON::PP::Boolean objects, just
+Mojo and JSON::YAJL not. Mojo produces Mojo::JSON::_Bool and
+JSON::YAJL::Parser just an unblessed IV.
+Cpanel::JSON::XS accepts JSON::PP::Boolean and Mojo::JSON::_Bool
+objects as booleans.
-=head1 INTEROPERABILITY WITH OTHER JSON DECODERS
+I cannot think of any reason to still use JSON::XS anymore.
-As long as you only serialise data that can be directly expressed in JSON,
-C<JSON::XS> is incapable of generating invalid JSON output (modulo bugs,
-but C<JSON::XS> has found more bugs in the official JSON testsuite (1)
-than the official JSON testsuite has found in C<JSON::XS> (0)).
-
-When you have trouble decoding JSON generated by this module using other
-decoders, then it is very likely that you have an encoding mismatch or the
-other decoder is broken.
-
-When decoding, C<JSON::XS> is strict by default and will likely catch all
-errors. There are currently two settings that change this: C<relaxed>
-makes C<JSON::XS> accept (but not generate) some non-standard extensions,
-and C<allow_tags> will allow you to encode and decode Perl objects, at the
-cost of not outputting valid JSON anymore.
=head2 TAGGED VALUE SYNTAX AND STANDARD JSON EN/DECODERS
-When you use C<allow_tags> to use the extended (and also nonstandard and
-invalid) JSON syntax for serialised objects, and you still want to decode
-the generated When you want to serialise objects, you can run a regex
-to replace the tagged syntax by standard JSON arrays (it only works for
-"normal" package names without comma, newlines or single colons). First,
-the readable Perl version:
+When you use C<allow_tags> to use the extended (and also nonstandard
+and invalid) JSON syntax for serialized objects, and you still want to
+decode the generated serialize objects, you can run a regex to replace
+the tagged syntax by standard JSON arrays (it only works for "normal"
+package names without comma, newlines or single colons). First, the
+readable Perl version:
# if your FREEZE methods return no values, you need this replace first:
$json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[\s*\]/[$1]/gx;
@@ -1660,7 +2012,7 @@ Here is an ECMAScript version (same regex):
json = json.replace (/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/g, "[$1,");
Since this syntax converts to standard JSON arrays, it might be hard to
-distinguish serialised objects from normal arrays. You can prepend a
+distinguish serialized objects from normal arrays. You can prepend a
"magic number" as first array element to reduce chances of a collision:
$json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/["XU1peReLzT4ggEllLanBYq4G9VzliwKF",$1,/g;
@@ -1697,65 +2049,230 @@ follow RFC7159, but application authors are well advised to call C<<
handle non-reference values, in preparation for the day when the default
will change.
+=head1 SECURITY CONSIDERATIONS
+
+JSON::XS and Cpanel::JSON::XS are not only fast. JSON is generally the
+most secure serializing format, because it is the only one besides
+Data::MessagePack, which does not deserialize objects per default. For
+all languages, not just perl. The binary variant BSON (MongoDB) does
+more but is unsafe.
+
+It is trivial for any attacker to create such serialized objects in
+JSON and trick perl into expanding them, thereby triggering certain
+methods. Watch L<https://www.youtube.com/watch?v=Gzx6KlqiIZE> for an
+exploit demo for "CVE-2015-1592 SixApart MovableType Storable Perl
+Code Execution" for a deserializer which expands objects.
+Deserializing even coderefs (methods, functions) or external
+data would be considered the most dangerous.
+
+Security relevant overview of serializers regarding deserializing
+objects by default:
+
+ Objects Coderefs External Data
+
+ Data::Dumper YES YES YES
+ Storable YES NO (def) NO
+ Sereal YES NO NO
+ YAML YES NO NO
+ B::C YES YES YES
+ B::Bytecode YES YES YES
+ BSON YES YES NO
+ JSON::SL YES NO YES
+ JSON NO (def) NO NO
+ Data::MessagePack NO NO NO
+ XML NO NO YES
+
+ Pickle YES YES YES
+ PHP Deserialize YES NO NO
+
+When you are using JSON in a protocol, talking to untrusted potentially
+hostile creatures requires relatively few measures.
+
+First of all, your JSON decoder should be secure, that is, should not have
+any buffer overflows. Obviously, this module should ensure that.
+
+Second, you need to avoid resource-starving attacks. That means you should
+limit the size of JSON texts you accept, or make sure then when your
+resources run out, that's just fine (e.g. by using a separate process that
+can crash safely). The size of a JSON text in octets or characters is
+usually a good indication of the size of the resources required to decode
+it into a Perl structure. While JSON::XS can check the size of the JSON
+text, it might be too late when you already have it in memory, so you
+might want to check the size before you accept the string.
+
+Third, Cpanel::JSON::XS recurses using the C stack when decoding objects and
+arrays. The C stack is a limited resource: for instance, on my amd64
+machine with 8MB of stack size I can decode around 180k nested arrays but
+only 14k nested JSON objects (due to perl itself recursing deeply on croak
+to free the temporary). If that is exceeded, the program crashes. To be
+conservative, the default nesting limit is set to 512. If your process
+has a smaller stack, you should adjust this setting accordingly with the
+C<max_depth> method.
+
+Also keep in mind that Cpanel::JSON::XS might leak contents of your Perl data
+structures in its error messages, so when you serialize sensitive
+information you might want to make sure that exceptions thrown by JSON::XS
+will not end up in front of untrusted eyes.
+
+If you are using Cpanel::JSON::XS to return packets to consumption
+by JavaScript scripts in a browser you should have a look at
+L<http://blog.archive.jpsykes.com/47/practical-csrf-and-json-security/> to
+see whether you are vulnerable to some common attack vectors (which really
+are browser design bugs, but it is still you who will have to deal with
+it, as major browser developers care only for features, not about getting
+security right). You might also want to also look at L<Mojo::JSON>
+special escape rules to prevent from XSS attacks.
-=head1 (I-)THREADS
+=head1 "OLD" VS. "NEW" JSON (RFC 4627 VS. RFC 7159)
+
+TL;DR: Due to security concerns, Cpanel::JSON::XS will not allow
+scalar data in JSON texts by default - you need to create your own
+Cpanel::JSON::XS object and enable C<allow_nonref>:
+
+
+ my $json = JSON::XS->new->allow_nonref;
-This module is I<not> guaranteed to be ithread (or MULTIPLICITY-) safe
-and there are no plans to change this. Note that perl's builtin so-called
-theeads/ithreads are officially deprecated and should not be used.
+ $text = $json->encode ($data);
+ $data = $json->decode ($text);
+The long version: JSON being an important and supposedly stable format,
+the IETF standardized it as RFC 4627 in 2006. Unfortunately the inventor
+of JSON Douglas Crockford unilaterally changed the definition of JSON in
+javascript. Rather than create a fork, the IETF decided to standardize the
+new syntax (apparently, so I as told, without finding it very amusing).
-=head1 THE PERILS OF SETLOCALE
+The biggest difference between the original JSON and the new JSON is that
+the new JSON supports scalars (anything other than arrays and objects) at
+the top-level of a JSON text. While this is strictly backwards compatible
+to older versions, it breaks a number of protocols that relied on sending
+JSON back-to-back, and is a minor security concern.
-Sometimes people avoid the Perl locale support and directly call the
-system's setlocale function with C<LC_ALL>.
+For example, imagine you have two banks communicating, and on one side,
+the JSON coder gets upgraded. Two messages, such as C<10> and C<1000>
+might then be confused to mean C<101000>, something that couldn't happen
+in the original JSON, because neither of these messages would be valid
+JSON.
-This breaks both perl and modules such as JSON::XS, as stringification of
-numbers no longer works correctly (e.g. C<$x = 0.1; print "$x"+1> might
-print C<1>, and JSON::XS might output illegal JSON as JSON::XS relies on
-perl to stringify numbers).
+If one side accepts these messages, then an upgrade in the coder on either
+side could result in this becoming exploitable.
-The solution is simple: don't call C<setlocale>, or use it for only those
-categories you need, such as C<LC_MESSAGES> or C<LC_CTYPE>.
+This module has always allowed these messages as an optional extension, by
+default disabled. The security concerns are the reason why the default is
+still disabled, but future versions might/will likely upgrade to the newer
+RFC as default format, so you are advised to check your implementation
+and/or override the default with C<< ->allow_nonref (0) >> to ensure that
+future versions are safe.
-If you need C<LC_NUMERIC>, you should enable it only around the code that
-actually needs it (avoiding stringification of numbers), and restore it
-afterwards.
+=head1 THREADS
+Cpanel::JSON::XS has proper ithreads support, unlike JSON::XS. If you
+encounter any bugs with thread support please report them.
=head1 BUGS
-While the goal of this module is to be correct, that unfortunately does
-not mean it's bug-free, only that I think its design is bug-free. If you
-keep reporting bugs they will be fixed swiftly, though.
+While the goal of the Cpanel::JSON::XS module is to be correct, that
+unfortunately does not mean it's bug-free, only that the author thinks
+its design is bug-free. If you keep reporting bugs and tests they will
+be fixed swiftly, though.
+
+Since the JSON::XS author refuses to use a public bugtracker and
+prefers private emails, we've setup a tracker at RT, so you might want
+to report any issues twice. Once in private to MLEHMANN to be fixed in
+JSON::XS and one to our the public tracker. Issues fixed by JSON::XS
+with a new release will also be backported to Cpanel::JSON::XS and
+5.6.2, as long as cPanel relies on 5.6.2 and Cpanel::JSON::XS as our
+serializer of choice.
+
+L<https://rt.cpan.org/Public/Dist/Display.html?Queue=Cpanel-JSON-XS>
+
+=head1 LICENSE
-Please refrain from using rt.cpan.org or any other bug reporting
-service. I put the contact address into my modules for a reason.
+This module is available under the same licences as perl, the Artistic
+license and the GPL.
=cut
+sub allow_bigint {
+ Carp::carp("allow_bigint() is obsoleted. use allow_bignum() instead.");
+}
+
+BEGIN {
+ package
+ JSON::PP::Boolean;
+
+ require overload;
+
+ local $^W; # silence redefine warnings. no warnings 'redefine' does not help
+ &overload::import( 'overload', # workaround 5.6 reserved keyword warning
+ "0+" => sub { ${$_[0]} },
+ "++" => sub { $_[0] = ${$_[0]} + 1 },
+ "--" => sub { $_[0] = ${$_[0]} - 1 },
+ '""' => sub { ${$_[0]} == 1 ? '1' : '0' }, # GH 29
+ 'eq' => sub {
+ my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]);
+ if ($op eq 'true' or $op eq 'false') {
+ return "$obj" eq '1' ? 'true' eq $op : 'false' eq $op;
+ }
+ else {
+ return $obj ? 1 == $op : 0 == $op;
+ }
+ },
+ fallback => 1);
+}
+
+our ($true, $false);
+BEGIN {
+ if ($INC{'JSON/XS.pm'}
+ and $INC{'Types/Serialiser.pm'}
+ and $JSON::XS::VERSION ge "3.00") {
+ $true = $Types::Serialiser::true; # readonly if loaded by JSON::XS
+ $false = $Types::Serialiser::false;
+ } else {
+ $true = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
+ $false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };
+ }
+}
+
BEGIN {
- *true = \$Types::Serialiser::true;
- *true = \&Types::Serialiser::true;
- *false = \$Types::Serialiser::false;
- *false = \&Types::Serialiser::false;
- *is_bool = \&Types::Serialiser::is_bool;
+ my $const_true = $true;
+ my $const_false = $false;
+ *true = sub () { $const_true };
+ *false = sub () { $const_false };
+}
- *JSON::XS::Boolean:: = *Types::Serialiser::Boolean::;
+sub is_bool($) {
+ shift if @_ == 2; # as method call
+ (ref($_[0]) and UNIVERSAL::isa( $_[0], JSON::PP::Boolean::))
+ or (exists $INC{'Types/Serialiser.pm'} and Types::Serialiser::is_bool($_[0]))
}
-XSLoader::load "JSON::XS", $VERSION;
+XSLoader::load 'Cpanel::JSON::XS', $XS_VERSION;
+
+1;
=head1 SEE ALSO
-The F<json_xs> command line utility for quick experiments.
+The F<cpanel_json_xs> command line utility for quick experiments.
+
+L<JSON>, L<JSON::XS>, L<JSON::MaybeXS>, L<Mojo::JSON>, L<Mojo::JSON::MaybeXS>,
+L<JSON::SL>, L<JSON::DWIW>, L<JSON::YAJL>, L<JSON::Any>, L<Test::JSON>,
+L<Locale::Wolowitz>,
+L<https://metacpan.org/search?q=JSON>
+
+L<https://tools.ietf.org/html/rfc7159>
+
+L<https://tools.ietf.org/html/rfc4627>
+
=head1 AUTHOR
- Marc Lehmann <schmorp@schmorp.de>
- http://home.schmorp.de/
+Reini Urban <rurban@cpan.org>
-=cut
+Marc Lehmann <schmorp@schmorp.de>, http://home.schmorp.de/
+
+=head1 MAINTAINER
-1
+Reini Urban <rurban@cpan.org>
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Boolean.pm b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Boolean.pm
new file mode 100755
index 00000000000..5b2bf4f48a8
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Boolean.pm
@@ -0,0 +1,29 @@
+=head1 NAME
+
+Cpanel::JSON::XS::Boolean - true and false values
+
+=head1 SYNOPSIS
+
+ # do not "use" yourself
+
+See L<Cpanel::JSON::XS/"true, false">
+
+=head1 DESCRIPTION
+
+This module exists only to provide overload resolution for Storable
+and similar modules and interop with L<JSON::XS> booleans. See
+L<Cpanel::JSON::XS> for more info about this class.
+
+=cut
+
+use Cpanel::JSON::XS ();
+
+1;
+
+=head1 AUTHOR
+
+ Marc Lehmann <schmorp@schmorp.de>
+ http://home.schmorp.de/
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Type.pm b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Type.pm
new file mode 100755
index 00000000000..57c172c0695
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/Cpanel/JSON/XS/Type.pm
@@ -0,0 +1,219 @@
+package Cpanel::JSON::XS::Type;
+
+=pod
+
+=head1 NAME
+
+Cpanel::JSON::XS::Type - Type support for JSON encode
+
+=head1 SYNOPSIS
+
+ use Cpanel::JSON::XS;
+ use Cpanel::JSON::XS::Type
+
+ encode_json([10, "10", 10.25], [JSON_TYPE_INT, JSON_TYPE_INT, JSON_TYPE_STRING]);
+ # '[10,10,"10.25"]'
+
+ encode_json([10, "10", 10.25], json_type_arrayof(JSON_TYPE_INT));
+ # '[10,10,10]'
+
+ encode_json(1, JSON_TYPE_BOOL);
+ # 'true'
+
+ my $perl_struct = { key1 => 1, key2 => "2", key3 => 1 };
+ my $type_spec = { key1 => JSON_TYPE_STRING, key2 => JSON_TYPE_INT, key3 => JSON_TYPE_BOOL };
+ my $json_string = encode_json($perl_struct, $type_spec);
+ # '{"key1":"1","key2":2,"key3":true}'
+
+ my $perl_struct = { key1 => "value1", key2 => "value2", key3 => 0, key4 => 1, key5 => "string", key6 => "string2" };
+ my $type_spec = json_type_hashof(JSON_TYPE_STRING);
+ my $json_string = encode_json($perl_struct, $type_spec);
+ # '{"key1":"value1","key2":"value2","key3":"0","key4":"1","key5":"string","key6":"string2"}'
+
+ my $perl_struct = { key1 => { key2 => [ 10, "10", 10.6 ] }, key3 => "10.5" };
+ my $type_spec = { key1 => json_type_anyof(JSON_TYPE_FLOAT, json_type_hashof(json_type_arrayof(JSON_TYPE_INT))), key3 => JSON_TYPE_FLOAT };
+ my $json_string = encode_json($perl_struct, $type_spec);
+ # '{"key1":{"key2":[10,10,10]},"key3":10.5}'
+
+=head1 DESCRIPTION
+
+This module provides stable JSON type support for the
+L<Cpanel::JSON::XS|Cpanel::JSON::XS> encoder which doesn't depend on
+any internal perl scalar flags or characteristics.
+
+In most cases perl structures passed to
+L<encode_json|Cpanel::JSON::XS/encode_json> come from other functions
+or from other modules and caller of Cpanel::JSON::XS module does not
+have control of internals or they are subject of change. So it is not
+easy to support enforcing types as described in the
+L<simple scalars|Cpanel::JSON::XS/simple scalars> section.
+
+The function L<encode_json|Cpanel::JSON::XS/encode_json> takes a perl
+structure as its input and optionally also a json type specification in
+the second parameter.
+
+If the specification is not provided (or is undef) internal perl
+scalar flags are used for the resulting JSON type. The internal flags
+can be changed by perl itself, but also by external modules. Which
+means that types in resulting JSON string aren't stable. Specially it
+does not work reliable for dual vars and scalars which were used in
+both numeric and string operations. See L<simple
+scalars|Cpanel::JSON::XS/simple scalars>.
+
+=head2 JSON type specification for scalars:
+
+=over 4
+
+=item JSON_TYPE_BOOL
+
+It enforces JSON boolean in resulting JSON, i.e. either C<true> or
+C<false>. For determining whether the scalar passed to the encoder
+is true, standard perl boolean logic is used.
+
+=item JSON_TYPE_INT
+
+It enforces JSON number without fraction part in the resulting JSON.
+Equivalent of perl function L<int|perlfunc/int> is used for conversion.
+
+=item JSON_TYPE_FLOAT
+
+It enforces JSON number with fraction part in the resulting JSON.
+Equivalent of perl operation C<+0> is used for conversion.
+
+=item JSON_TYPE_STRING
+
+It enforces JSON string type in the resulting JSON.
+
+=back
+
+For each type, there also exists a type with the suffix C<_OR_NULL>
+which encodes perl's C<undef> into JSON C<null>. Without type with
+suffix C<_OR_NULL> perl's C<undef> is converted to specific type
+according to above rules.
+
+=head2 JSON type specification for arrays:
+
+=over 4
+
+=item [...]
+
+The array must contain the same number of elements as in the perl
+array passed for encoding. Each element of the array describes the
+JSON type which is enforced for the corresponding element of the
+perl array.
+
+=item json_type_arrayof
+
+This function takes a JSON type specification as its argument which
+is enforced for every element of the passed perl array.
+
+=back
+
+=head2 JSON type specification for hashes:
+
+=over 4
+
+=item {...}
+
+Each hash value for corresponding key describes the JSON type
+specification for values of passed perl hash structure. Keys in hash
+which are not present in passed perl hash structure are simple
+ignored and not used.
+
+=item json_type_hashof
+
+This function takes a JSON type specification as its argument which
+is enforced for every value of passed perl hash structure.
+
+=back
+
+=head2 JSON type specification for alternatives:
+
+=over 4
+
+=item json_type_anyof
+
+This function takes a list of JSON type alternative specifications
+(maximally one scalar, one array, and one hash) as its input and the
+JSON encoder chooses one that matches.
+
+=item json_type_null_or_anyof
+
+Like L<C<json_type_anyof>|/json_type_anyof>, but scalar can be only
+perl's C<undef>.
+
+=back
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright (c) 2017, GoodData Corporation. All rights reserved.
+
+This module is available under the same licences as perl, the Artistic
+license and the GPL.
+
+=cut
+
+use strict;
+use warnings;
+
+# This exports needed XS constants to perl
+use Cpanel::JSON::XS ();
+
+use Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = our @EXPORT_OK = qw(
+ json_type_arrayof
+ json_type_hashof
+ json_type_anyof
+ json_type_null_or_anyof
+ JSON_TYPE_BOOL
+ JSON_TYPE_INT
+ JSON_TYPE_FLOAT
+ JSON_TYPE_STRING
+ JSON_TYPE_BOOL_OR_NULL
+ JSON_TYPE_INT_OR_NULL
+ JSON_TYPE_FLOAT_OR_NULL
+ JSON_TYPE_STRING_OR_NULL
+ JSON_TYPE_ARRAYOF_CLASS
+ JSON_TYPE_HASHOF_CLASS
+ JSON_TYPE_ANYOF_CLASS
+);
+
+sub json_type_anyof {
+ my ($scalar, $array, $hash);
+ foreach (@_) {
+ my $type = ref($_);
+ if ($type eq '') {
+ die 'Only one scalar type can be specified in anyof' if defined $scalar;
+ $scalar = $_;
+ } elsif ($type eq 'ARRAY' or $type eq JSON_TYPE_ARRAYOF_CLASS) {
+ die 'Only one array type can be specified in anyof' if defined $array;
+ $array = $_;
+ } elsif ($type eq 'HASH' or $type eq JSON_TYPE_HASHOF_CLASS) {
+ die 'Only one hash type can be specified in anyof' if defined $hash;
+ $hash = $_;
+ } else {
+ die 'Only scalar, array or hash can be specified in anyof';
+ }
+ }
+ return bless [$scalar, $array, $hash], JSON_TYPE_ANYOF_CLASS;
+}
+
+sub json_type_null_or_anyof {
+ foreach (@_) {
+ die 'Scalar cannot be specified in null_or_anyof' if ref($_) eq '';
+ }
+ return json_type_anyof(JSON_TYPE_CAN_BE_NULL, @_);
+}
+
+sub json_type_arrayof {
+ die 'Exactly one type must be specified in arrayof' if scalar @_ != 1;
+ return bless \(my $type = $_[0]), JSON_TYPE_ARRAYOF_CLASS;
+}
+
+sub json_type_hashof {
+ die 'Exactly one type must be specified in hashof' if scalar @_ != 1;
+ return bless \(my $type = $_[0]), JSON_TYPE_HASHOF_CLASS;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/site/lib/File/Which.pm b/Master/tlpkg/tlperl/site/lib/File/Which.pm
index 7c547fb7500..d02ef5fd714 100644
--- a/Master/tlpkg/tlperl/site/lib/File/Which.pm
+++ b/Master/tlpkg/tlperl/site/lib/File/Which.pm
@@ -6,7 +6,7 @@ use Exporter ();
use File::Spec ();
# ABSTRACT: Perl implementation of the which utility as an API
-our $VERSION = '1.21'; # VERSION
+our $VERSION = '1.22'; # VERSION
our @ISA = 'Exporter';
@@ -16,7 +16,7 @@ our @EXPORT_OK = 'where';
use constant IS_VMS => ($^O eq 'VMS');
use constant IS_MAC => ($^O eq 'MacOS');
use constant IS_DOS => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2');
-use constant IS_CYG => ($^O eq 'cygwin');
+use constant IS_CYG => ($^O eq 'cygwin' || $^O eq 'msys');
# For Win32 systems, stores the extensions used for
# executable files
@@ -146,7 +146,7 @@ File::Which - Perl implementation of the which utility as an API
=head1 VERSION
-version 1.21
+version 1.22
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Config.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Config.pm
index 50d95958a00..3da0e5dc88a 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Config.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Config.pm
@@ -3,9 +3,9 @@ package HTTP::Config;
use strict;
use warnings;
-use URI;
+our $VERSION = '6.14';
-our $VERSION = "6.11";
+use URI;
sub new {
my $class = shift;
@@ -235,12 +235,18 @@ sub matching_items {
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
HTTP::Config - Configuration for request and response objects
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
use HTTP::Config;
@@ -293,7 +299,7 @@ You can either pass separate key/value pairs or a hash reference.
=item $conf->remove( %spec )
Removes (and returns) the entries that have matches for all the key/value pairs in %spec.
-If %spec is empty this will match all entries; so it will empty the configuation object.
+If %spec is empty this will match all entries; so it will empty the configuration object.
=item $conf->matching( $uri, $request, $response )
@@ -428,11 +434,21 @@ Matches if the response object has that key, or the entry has the given value.
L<URI>, L<HTTP::Request>, L<HTTP::Response>
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
-Copyright 2008, Gisle Aas
+=head1 COPYRIGHT AND LICENSE
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
=cut
+
+__END__
+
+
+#ABSTRACT: Configuration for request and response objects
+
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm
index 98bd7421012..dcbeba64d27 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm
@@ -1,11 +1,11 @@
package HTTP::Cookies;
-$HTTP::Cookies::VERSION = '6.03';
+
use strict;
use HTTP::Date qw(str2time parse_date time2str);
use HTTP::Headers::Util qw(_split_header_words join_header_words);
-use vars qw($VERSION $EPOCH_OFFSET);
-$VERSION = "6.01";
+use vars qw($EPOCH_OFFSET);
+our $VERSION = '6.04';
# Legacy: because "use "HTTP::Cookies" used be the ONLY way
# to load the class HTTP::Cookies::Netscape.
@@ -632,7 +632,7 @@ HTTP::Cookies - HTTP cookie jars
=head1 VERSION
-version 6.03
+version 6.04
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm
index bffa587adf9..737da2829fa 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm
@@ -1,10 +1,10 @@
package HTTP::Cookies::Microsoft;
-$HTTP::Cookies::Microsoft::VERSION = '6.03';
+
use strict;
-use vars qw(@ISA $VERSION);
+use vars qw(@ISA);
-$VERSION = "6.01";
+our $VERSION = '6.04';
require HTTP::Cookies;
@ISA=qw(HTTP::Cookies);
@@ -246,7 +246,7 @@ HTTP::Cookies::Microsoft - Access to Microsoft cookies files
=head1 VERSION
-version 6.03
+version 6.04
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm
index 180d5ff8116..8fbac888499 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm
@@ -1,9 +1,9 @@
package HTTP::Cookies::Netscape;
-$HTTP::Cookies::Netscape::VERSION = '6.03';
+
use strict;
-use vars qw(@ISA $VERSION);
+use vars qw(@ISA);
-$VERSION = "6.01";
+our $VERSION = '6.04';
require HTTP::Cookies;
@ISA=qw(HTTP::Cookies);
@@ -76,7 +76,7 @@ HTTP::Cookies::Netscape - Access to Netscape cookies files
=head1 VERSION
-version 6.03
+version 6.04
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm
index 156a8676943..0808f2c22fc 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm
@@ -3,9 +3,9 @@ package HTTP::Headers;
use strict;
use warnings;
-use Carp ();
+our $VERSION = '6.14';
-our $VERSION = "6.11";
+use Carp ();
# The $TRANSLATE_UNDERSCORE variable controls whether '_' can be used
# as a replacement for '-' in header field names.
@@ -465,12 +465,18 @@ sub _basic_auth {
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
HTTP::Headers - Class encapsulating HTTP Message headers
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
require HTTP::Headers;
@@ -864,10 +870,21 @@ These field names are returned with the ':' intact for
$h->header_field_names and the $h->scan callback, but the colons do
not show in $h->as_string.
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
-Copyright 1995-2005 Gisle Aas.
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+#ABSTRACT: Class encapsulating HTTP Message headers
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm
index 7ae93f77c37..e718c868d1e 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm
@@ -3,7 +3,7 @@ package HTTP::Headers::Auth;
use strict;
use warnings;
-our $VERSION = "6.11";
+our $VERSION = '6.14';
use HTTP::Headers;
@@ -98,3 +98,30 @@ sub www_authenticate { shift->_authenticate("WWW-Authenticate", @_) }
sub proxy_authenticate { shift->_authenticate("Proxy-Authenticate", @_) }
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+HTTP::Headers::Auth
+
+=head1 VERSION
+
+version 6.14
+
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm
index 1d81ac227c2..fc260ffabde 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm
@@ -3,7 +3,7 @@ package HTTP::Headers::ETag;
use strict;
use warnings;
-our $VERSION = "6.11";
+our $VERSION = '6.14';
require HTTP::Date;
@@ -94,3 +94,30 @@ sub _split_etag_list
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+HTTP::Headers::ETag
+
+=head1 VERSION
+
+version 6.14
+
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm
index 58c37310abd..0faedf4dfaa 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm
@@ -3,7 +3,7 @@ package HTTP::Headers::Util;
use strict;
use warnings;
-our $VERSION = "6.11";
+our $VERSION = '6.14';
use base 'Exporter';
@@ -93,12 +93,18 @@ sub join_header_words
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
HTTP::Headers::Util - Header value parsing utility functions
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
use HTTP::Headers::Util qw(split_header_words);
@@ -114,7 +120,6 @@ The following functions are available:
=over 4
-
=item split_header_words( @header_values )
This function will parse the header values given as argument into a
@@ -188,10 +193,21 @@ will both return the string:
=back
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
-Copyright 1997-1998, Gisle Aas
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+#ABSTRACT: Header value parsing utility functions
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Message.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Message.pm
index c5ba281a487..27c455e0d25 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Message.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Message.pm
@@ -3,7 +3,7 @@ package HTTP::Message;
use strict;
use warnings;
-our $VERSION = "6.11";
+our $VERSION = '6.14';
require HTTP::Headers;
require Carp;
@@ -143,11 +143,11 @@ sub _set_content {
my $self = $_[0];
_utf8_downgrade($_[1]);
if (!ref($_[1]) && ref($self->{_content}) eq "SCALAR") {
- ${$self->{_content}} = $_[1];
+ ${$self->{_content}} = defined( $_[1] ) ? $_[1] : '';
}
else {
die "Can't set content to be a scalar reference" if ref($_[1]) eq "SCALAR";
- $self->{_content} = $_[1];
+ $self->{_content} = defined( $_[1] ) ? $_[1] : '';
delete $self->{_content_ref};
}
delete $self->{_parts} unless $_[2];
@@ -430,7 +430,7 @@ sub decodable
};
eval {
require IO::Uncompress::Bunzip2;
- push(@enc, "x-bzip2");
+ push(@enc, "x-bzip2", "bzip2");
};
# we don't care about announcing the 'identity', 'base64' and
# 'quoted-printable' stuff
@@ -462,7 +462,7 @@ sub encode
my $content = $self->content;
for my $encoding (@enc) {
- if ($encoding eq "identity") {
+ if ($encoding eq "identity" || $encoding eq "none") {
# nothing to do
}
elsif ($encoding eq "base64") {
@@ -483,7 +483,7 @@ sub encode
or die "Can't deflate content: $IO::Compress::Deflate::DeflateError";
$content = $output;
}
- elsif ($encoding eq "x-bzip2") {
+ elsif ($encoding eq "x-bzip2" || $encoding eq "bzip2") {
require IO::Compress::Bzip2;
my $output;
IO::Compress::Bzip2::bzip2(\$content, \$output)
@@ -771,13 +771,18 @@ sub _boundary
1;
+=pod
-__END__
+=encoding UTF-8
=head1 NAME
HTTP::Message - HTTP style message (base class)
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
use base 'HTTP::Message';
@@ -833,6 +838,9 @@ The content() method sets the raw content if an argument is given. If no
argument is given the content is not touched. In either case the
original raw content is returned.
+If the C<undef> argument is given, the content is reset to its default value,
+which is an empty string.
+
Note that the content should be a string of bytes. Strings in perl
can contain characters outside the range of a byte. The C<Encode>
module can be used to turn such strings into a string of bytes.
@@ -1105,10 +1113,21 @@ details of these methods:
$mess->authorization_basic
$mess->proxy_authorization_basic
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
-Copyright 1995-2004 Gisle Aas.
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+#ABSTRACT: HTTP style message (base class)
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Request.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Request.pm
index e4cb1e6d153..51150b962af 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Request.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Request.pm
@@ -3,9 +3,9 @@ package HTTP::Request;
use strict;
use warnings;
-use base 'HTTP::Message';
+our $VERSION = '6.14';
-our $VERSION = "6.11";
+use base 'HTTP::Message';
sub new
{
@@ -20,8 +20,9 @@ sub new
sub parse
{
my($class, $str) = @_;
+ Carp::carp('Undefined argument to parse()') if $^W && ! defined $str;
my $request_line;
- if ($str =~ s/^(.*)\n//) {
+ if (defined $str && $str =~ s/^(.*)\n//) {
$request_line = $1;
}
else {
@@ -30,10 +31,12 @@ sub parse
}
my $self = $class->SUPER::parse($str);
- my($method, $uri, $protocol) = split(' ', $request_line);
- $self->method($method) if defined($method);
- $self->uri($uri) if defined($uri);
- $self->protocol($protocol) if $protocol;
+ if (defined $request_line) {
+ my($method, $uri, $protocol) = split(' ', $request_line);
+ $self->method($method);
+ $self->uri($uri) if defined($uri);
+ $self->protocol($protocol) if $protocol;
+ }
$self;
}
@@ -67,7 +70,7 @@ sub uri
Carp::croak("A URI can't be a " . ref($uri) . " reference")
if ref($uri) eq 'HASH' or ref($uri) eq 'ARRAY';
Carp::croak("Can't use a " . ref($uri) . " object as a URI")
- unless $uri->can('scheme');
+ unless $uri->can('scheme') && $uri->can('canonical');
$uri = $uri->clone;
unless ($HTTP::URI_CLASS eq "URI") {
# Argh!! Hate this... old LWP legacy!
@@ -132,12 +135,18 @@ sub dump
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
HTTP::Request - HTTP style request message
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
require HTTP::Request;
@@ -183,7 +192,7 @@ This constructs a new request object by parsing the given string.
=item $r->method( $val )
This is used to get/set the method attribute. The method should be a
-short string like "GET", "HEAD", "PUT" or "POST".
+short string like "GET", "HEAD", "PUT", "PATCH" or "POST".
=item $r->uri
@@ -227,15 +236,109 @@ Method returning a textual representation of the request.
=back
+=head1 EXAMPLES
+
+Creating requests to be sent with L<LWP::UserAgent> or others can be easy. Here
+are a few examples.
+
+=head2 Simple POST
+
+Here, we'll create a simple POST request that could be used to send JSON data
+to an endpoint.
+
+ #!/usr/bin/env perl
+
+ use strict;
+ use warnings;
+
+ use Encode qw(encode_utf8);
+ use HTTP::Request ();
+ use JSON::MaybeXS qw(encode_json);
+
+ my $url = 'https://www.example.com/api/user/123';
+ my $header = ['Content-Type' => 'application/json; charset=UTF-8'];
+ my $data = {foo => 'bar', baz => 'quux'};
+ my $encoded_data = encode_utf8(encode_json($data));
+
+ my $r = HTTP::Request->new('POST', $url, $header, $encoded_data);
+ # at this point, we could send it via LWP::UserAgent
+ # my $ua = LWP::UserAgent->new();
+ # my $res = $ua->request($r);
+
+=head2 Batch POST Request
+
+Some services, like Google, allow multiple requests to be sent in one batch.
+L<https://developers.google.com/drive/v3/web/batch> for example. Using the
+C<add_part> method from L<HTTP::Message> makes this simple.
+
+ #!/usr/bin/env perl
+
+ use strict;
+ use warnings;
+
+ use Encode qw(encode_utf8);
+ use HTTP::Request ();
+ use JSON::MaybeXS qw(encode_json);
+
+ my $auth_token = 'auth_token';
+ my $batch_url = 'https://www.googleapis.com/batch';
+ my $url = 'https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id';
+ my $url_no_email = 'https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id&sendNotificationEmail=false';
+
+ # generate a JSON post request for one of the batch entries
+ my $req1 = build_json_request($url, {
+ emailAddress => 'example@appsrocks.com',
+ role => "writer",
+ type => "user",
+ });
+
+ # generate a JSON post request for one of the batch entries
+ my $req2 = build_json_request($url_no_email, {
+ domain => "appsrocks.com",
+ role => "reader",
+ type => "domain",
+ });
+
+ # generate a multipart request to send all of the other requests
+ my $r = HTTP::Request->new('POST', $batch_url, [
+ 'Accept-Encoding' => 'gzip',
+ # if we don't provide a boundary here, HTTP::Message will generate
+ # one for us. We could use UUID::uuid() here if we wanted.
+ 'Content-Type' => 'multipart/mixed; boundary=END_OF_PART'
+ ]);
+
+ # add the two POST requests to the main request
+ $r->add_part($req1, $req2);
+ # at this point, we could send it via LWP::UserAgent
+ # my $ua = LWP::UserAgent->new();
+ # my $res = $ua->request($r);
+ exit();
+
+ sub build_json_request {
+ my ($url, $href) = @_;
+ my $header = ['Authorization' => "Bearer $auth_token", 'Content-Type' => 'application/json; charset=UTF-8'];
+ return HTTP::Request->new('POST', $url, $header, encode_utf8(encode_json($href)));
+ }
+
=head1 SEE ALSO
L<HTTP::Headers>, L<HTTP::Message>, L<HTTP::Request::Common>,
L<HTTP::Response>
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
-Copyright 1995-2004 Gisle Aas.
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+#ABSTRACT: HTTP style request message
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm
index cf36fcc299c..998bc4dc53c 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm
@@ -3,30 +3,26 @@ package HTTP::Request::Common;
use strict;
use warnings;
+our $VERSION = '6.14';
+
our $DYNAMIC_FILE_UPLOAD ||= 0; # make it defined (don't know why)
use Exporter 5.57 'import';
-our @EXPORT =qw(GET HEAD PUT POST);
+our @EXPORT =qw(GET HEAD PUT PATCH POST);
our @EXPORT_OK = qw($DYNAMIC_FILE_UPLOAD DELETE);
require HTTP::Request;
use Carp();
-our $VERSION = "6.11";
-
my $CRLF = "\015\012"; # "\r\n" is not portable
sub GET { _simple_req('GET', @_); }
sub HEAD { _simple_req('HEAD', @_); }
sub DELETE { _simple_req('DELETE', @_); }
-
-for my $type (qw(PUT POST)) {
- no strict 'refs';
- *{ __PACKAGE__ . "::" . $type } = sub {
- return request_type_with_data($type, @_);
- };
-}
+sub PATCH { request_type_with_data('PATCH', @_); }
+sub POST { request_type_with_data('POST', @_); }
+sub PUT { request_type_with_data('PUT', @_); }
sub request_type_with_data
{
@@ -221,7 +217,7 @@ sub form_data # RFC1867
# or perhaps a file in the /proc file system where
# stat may return a 0 size even though reading it
# will produce data. So we cannot make
- # a Content-Length header.
+ # a Content-Length header.
undef $length;
last;
}
@@ -265,7 +261,7 @@ sub form_data # RFC1867
}
if ($buflength) {
defined $length && ($length -= $buflength);
- return $buf
+ return $buf
}
}
};
@@ -306,25 +302,37 @@ sub boundary
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
HTTP::Request::Common - Construct common HTTP::Request objects
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
use HTTP::Request::Common;
$ua = LWP::UserAgent->new;
$ua->request(GET 'http://www.sn.no/');
$ua->request(POST 'http://somewhere/foo', [foo => bar, bar => foo]);
+ $ua->request(PATCH 'http://somewhere/foo', [foo => bar, bar => foo]);
+ $ua->request(PUT 'http://somewhere/foo', [foo => bar, bar => foo]);
=head1 DESCRIPTION
-This module provide functions that return newly created C<HTTP::Request>
+This module provides functions that return newly created C<HTTP::Request>
objects. These functions are usually more convenient to use than the
-standard C<HTTP::Request> constructor for the most common requests. The
-following functions are provided:
+standard C<HTTP::Request> constructor for the most common requests.
+
+Note that L<LWP::UserAgent> has several convenience methods, including
+C<get>, C<head>, C<delete>, C<post> and C<put>.
+
+The following functions are provided:
=over 4
@@ -332,7 +340,7 @@ following functions are provided:
=item GET $url, Header => Value,...
-The GET() function returns an C<HTTP::Request> object initialized with
+The C<GET> function returns an L<HTTP::Request> object initialized with
the "GET" method and the specified URL. It is roughly equivalent to the
following call
@@ -344,11 +352,11 @@ following call
but is less cluttered. What is different is that a header named
C<Content> will initialize the content part of the request instead of
setting a header field. Note that GET requests should normally not
-have a content, so this hack makes more sense for the PUT() and POST()
-functions described below.
+have a content, so this hack makes more sense for the C<PUT>, C<PATCH>
+ and C<POST> functions described below.
-The get(...) method of C<LWP::UserAgent> exists as a shortcut for
-$ua->request(GET ...).
+The C<get(...)> method of L<LWP::UserAgent> exists as a shortcut for
+C<< $ua->request(GET ...) >>.
=item HEAD $url
@@ -356,29 +364,39 @@ $ua->request(GET ...).
Like GET() but the method in the request is "HEAD".
-The head(...) method of "LWP::UserAgent" exists as a shortcut for
-$ua->request(HEAD ...).
+The C<head(...)> method of L<LWP::UserAgent> exists as a shortcut for
+C<< $ua->request(HEAD ...) >>.
-=item PUT $url
+=item DELETE $url
-=item PUT $url, Header => Value,...
+=item DELETE $url, Header => Value,...
-=item PUT $url, Header => Value,..., Content => $content
+Like C<GET> but the method in the request is C<DELETE>. This function
+is not exported by default.
-Like GET() but the method in the request is "PUT".
+=item PATCH $url
-The content of the request can be specified using the "Content"
-pseudo-header. This steals a bit of the header field namespace as
-there is no way to directly specify a header that is actually called
-"Content". If you really need this you must update the request
-returned in a separate statement.
+=item PATCH $url, Header => Value,...
-=item DELETE $url
+=item PATCH $url, $form_ref, Header => Value,...
-=item DELETE $url, Header => Value,...
+=item PATCH $url, Header => Value,..., Content => $form_ref
-Like GET() but the method in the request is "DELETE". This function
-is not exported by default.
+=item PATCH $url, Header => Value,..., Content => $content
+
+The same as C<POST> below, but the method in the request is C<PATCH>.
+
+=item PUT $url
+
+=item PUT $url, Header => Value,...
+
+=item PUT $url, $form_ref, Header => Value,...
+
+=item PUT $url, Header => Value,..., Content => $form_ref
+
+=item PUT $url, Header => Value,..., Content => $content
+
+The same as C<POST> below, but the method in the request is C<PUT>
=item POST $url
@@ -390,13 +408,24 @@ is not exported by default.
=item POST $url, Header => Value,..., Content => $content
-This works mostly like PUT() with "POST" as the method, but this
-function also takes a second optional array or hash reference
-parameter $form_ref. As for PUT() the content can also be specified
-directly using the "Content" pseudo-header, and you may also provide
-the $form_ref this way.
+C<POST>, C<PATCH> and C<PUT> all work with the same parameters.
+
+ %data = ( title => 'something', body => something else' );
+ $ua = LWP::UserAgent->new();
+ $request = HTTP::Request::Common::POST( $url, [ %data ] );
+ $response = $ua->request($request);
-The $form_ref argument can be used to pass key/value pairs for the
+They take a second optional array or hash reference
+parameter C<$form_ref>. The content can also be specified
+directly using the C<Content> pseudo-header, and you may also provide
+the C<$form_ref> this way.
+
+The C<Content> pseudo-header steals a bit of the header field namespace as
+there is no way to directly specify a header that is actually called
+"Content". If you really need this you must update the request
+returned in a separate statement.
+
+The C<$form_ref> argument can be used to pass key/value pairs for the
form content. By default we will initialize a request using the
C<application/x-www-form-urlencoded> content type. This means that
you can emulate an HTML E<lt>form> POSTing like this:
@@ -409,7 +438,7 @@ you can emulate an HTML E<lt>form> POSTing like this:
perc => '3%',
];
-This will create an HTTP::Request object that looks like this:
+This will create an L<HTTP::Request> object that looks like this:
POST http://www.perl.org/survey.cgi
Content-Length: 66
@@ -423,7 +452,7 @@ name or by passing the value as an array reference.
The POST method also supports the C<multipart/form-data> content used
for I<Form-based File Upload> as specified in RFC 1867. You trigger
this content format by specifying a content type of C<'form-data'> as
-one of the request headers. If one of the values in the $form_ref is
+one of the request headers. If one of the values in the C<$form_ref> is
an array reference, then it is treated as a file part specification
with the following interpretation:
@@ -441,7 +470,7 @@ want to suppress sending the filename when you provide a $file value.
If a $file is provided by no C<Content-Type> header, then C<Content-Type>
and C<Content-Encoding> will be filled in automatically with the values
-returned by LWP::MediaTypes::guess_media_type()
+returned by C<LWP::MediaTypes::guess_media_type()>
Sending my F<~/.profile> to the survey used as example above can be
achieved by this:
@@ -455,7 +484,7 @@ achieved by this:
init => ["$ENV{HOME}/.profile"],
]
-This will create an HTTP::Request object that almost looks this (the
+This will create an L<HTTP::Request> object that almost looks this (the
boundary and the content of your F<~/.profile> is likely to be
different):
@@ -488,20 +517,20 @@ different):
--6G+f--
-If you set the $DYNAMIC_FILE_UPLOAD variable (exportable) to some TRUE
+If you set the C<$DYNAMIC_FILE_UPLOAD> variable (exportable) to some TRUE
value, then you get back a request object with a subroutine closure as
the content attribute. This subroutine will read the content of any
files on demand and return it in suitable chunks. This allow you to
upload arbitrary big files without using lots of memory. You can even
upload infinite files like F</dev/audio> if you wish; however, if
-the file is not a plain file, there will be no Content-Length header
+the file is not a plain file, there will be no C<Content-Length> header
defined for the request. Not all servers (or server
applications) like this. Also, if the file(s) change in size between
-the time the Content-Length is calculated and the time that the last
+the time the C<Content-Length> is calculated and the time that the last
chunk is delivered, the subroutine will C<Croak>.
-The post(...) method of "LWP::UserAgent" exists as a shortcut for
-$ua->request(POST ...).
+The C<post(...)> method of L<LWP::UserAgent> exists as a shortcut for
+C<< $ua->request(POST ...) >>.
=back
@@ -509,13 +538,23 @@ $ua->request(POST ...).
L<HTTP::Request>, L<LWP::UserAgent>
+Also, there are some examples in L<HTTP::Request/"EXAMPLES"> that you might
+find useful. For example, batch requests are explained there.
-=head1 COPYRIGHT
+=head1 AUTHOR
-Copyright 1997-2004, Gisle Aas
+Gisle Aas <gisle@activestate.com>
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
=cut
+__END__
+
+
+#ABSTRACT: Construct common HTTP::Request objects
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Response.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Response.pm
index 7b6bcadd674..51a2cd08d28 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Response.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Response.pm
@@ -3,9 +3,9 @@ package HTTP::Response;
use strict;
use warnings;
-use base 'HTTP::Message';
+our $VERSION = '6.14';
-our $VERSION = "6.11";
+use base 'HTTP::Message';
use HTTP::Status ();
@@ -23,8 +23,9 @@ sub new
sub parse
{
my($class, $str) = @_;
+ Carp::carp('Undefined argument to parse()') if $^W && ! defined $str;
my $status_line;
- if ($str =~ s/^(.*)\n//) {
+ if (defined $str && $str =~ s/^(.*)\n//) {
$status_line = $1;
}
else {
@@ -32,17 +33,21 @@ sub parse
$str = "";
}
+ $status_line =~ s/\r\z// if defined $status_line;
+
my $self = $class->SUPER::parse($str);
- my($protocol, $code, $message);
- if ($status_line =~ /^\d{3} /) {
- # Looks like a response created by HTTP::Response->new
- ($code, $message) = split(' ', $status_line, 2);
- } else {
- ($protocol, $code, $message) = split(' ', $status_line, 3);
+ if (defined $status_line) {
+ my($protocol, $code, $message);
+ if ($status_line =~ /^\d{3} /) {
+ # Looks like a response created by HTTP::Response->new
+ ($code, $message) = split(' ', $status_line, 2);
+ } else {
+ ($protocol, $code, $message) = split(' ', $status_line, 3);
+ }
+ $self->protocol($protocol) if $protocol;
+ $self->code($code) if defined($code);
+ $self->message($message) if defined($message);
}
- $self->protocol($protocol) if $protocol;
- $self->code($code) if defined($code);
- $self->message($message) if defined($message);
$self;
}
@@ -336,19 +341,24 @@ sub fresh_until
1;
+=pod
-__END__
+=encoding UTF-8
=head1 NAME
HTTP::Response - HTTP style response message
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
Response objects are returned by the request() method of the C<LWP::UserAgent>:
# ...
- $response = $ua->request($request)
+ $response = $ua->request($request);
if ($response->is_success) {
print $response->decoded_content;
}
@@ -487,10 +497,10 @@ received some redirect responses first.
If none of these sources provide an absolute URI, undef is returned.
-When the LWP protocol modules produce the HTTP::Response object, then
-any base URI embedded in the document (step 1) will already have
-initialized the "Content-Base:" header. This means that this method
-only performs the last 2 steps (the content is not always available
+When the LWP protocol modules produce the HTTP::Response object, then any base
+URI embedded in the document (step 1) will already have initialized the
+"Content-Base:" header. (See L<LWP::UserAgent/parse_head>). This means that
+this method only performs the last 2 steps (the content is not always available
either).
=item $r->filename
@@ -635,10 +645,21 @@ description of freshness_lifetime().
L<HTTP::Headers>, L<HTTP::Message>, L<HTTP::Status>, L<HTTP::Request>
-=head1 COPYRIGHT
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
-Copyright 1995-2004 Gisle Aas.
-This library is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+#ABSTRACT: HTTP style response message
diff --git a/Master/tlpkg/tlperl/site/lib/HTTP/Status.pm b/Master/tlpkg/tlperl/site/lib/HTTP/Status.pm
index 744cec10690..ac181b138c3 100644
--- a/Master/tlpkg/tlperl/site/lib/HTTP/Status.pm
+++ b/Master/tlpkg/tlperl/site/lib/HTTP/Status.pm
@@ -3,14 +3,14 @@ package HTTP::Status;
use strict;
use warnings;
+our $VERSION = '6.14';
+
require 5.002; # because we use prototypes
use base 'Exporter';
our @EXPORT = qw(is_info is_success is_redirect is_error status_message);
our @EXPORT_OK = qw(is_client_error is_server_error);
-our $VERSION = "6.11";
-
# Note also addition of mnemonics to @EXPORT below
# Unmarked codes are from RFC 2616
@@ -20,6 +20,7 @@ my %StatusCode = (
100 => 'Continue',
101 => 'Switching Protocols',
102 => 'Processing', # RFC 2518 (WebDAV)
+ 103 => 'Early Hints', # RFC 8297
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
@@ -104,22 +105,27 @@ our %EXPORT_TAGS = (
sub status_message ($) { $StatusCode{$_[0]}; }
-sub is_info ($) { $_[0] >= 100 && $_[0] < 200; }
-sub is_success ($) { $_[0] >= 200 && $_[0] < 300; }
-sub is_redirect ($) { $_[0] >= 300 && $_[0] < 400; }
-sub is_error ($) { $_[0] >= 400 && $_[0] < 600; }
-sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
-sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
+sub is_info ($) { $_[0] && $_[0] >= 100 && $_[0] < 200; }
+sub is_success ($) { $_[0] && $_[0] >= 200 && $_[0] < 300; }
+sub is_redirect ($) { $_[0] && $_[0] >= 300 && $_[0] < 400; }
+sub is_error ($) { $_[0] && $_[0] >= 400 && $_[0] < 600; }
+sub is_client_error ($) { $_[0] && $_[0] >= 400 && $_[0] < 500; }
+sub is_server_error ($) { $_[0] && $_[0] >= 500 && $_[0] < 600; }
1;
+=pod
-__END__
+=encoding UTF-8
=head1 NAME
HTTP::Status - HTTP Status code processing
+=head1 VERSION
+
+version 6.14
+
=head1 SYNOPSIS
use HTTP::Status qw(:constants :is status_message);
@@ -148,6 +154,7 @@ tag to import them all.
HTTP_CONTINUE (100)
HTTP_SWITCHING_PROTOCOLS (101)
HTTP_PROCESSING (102)
+ HTTP_EARLY_HINTS (103)
HTTP_OK (200)
HTTP_CREATED (201)
@@ -267,3 +274,21 @@ This function is B<not> exported by default.
For legacy reasons all the C<HTTP_> constants are exported by default
with the prefix C<RC_>. It's recommended to use explicit imports and
the C<:constants> tag instead of relying on this.
+
+=head1 AUTHOR
+
+Gisle Aas <gisle@activestate.com>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 1994-2017 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+__END__
+
+
+#ABSTRACT: HTTP Status code processing
diff --git a/Master/tlpkg/tlperl/site/lib/JSON.pm b/Master/tlpkg/tlperl/site/lib/JSON.pm
deleted file mode 100644
index 9170fa6925c..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON.pm
+++ /dev/null
@@ -1,1659 +0,0 @@
-package JSON;
-
-
-use strict;
-use Carp ();
-use Exporter;
-BEGIN { @JSON::ISA = 'Exporter' }
-
-@JSON::EXPORT = qw(from_json to_json jsonToObj objToJson encode_json decode_json);
-
-BEGIN {
- $JSON::VERSION = '2.94';
- $JSON::DEBUG = 0 unless (defined $JSON::DEBUG);
- $JSON::DEBUG = $ENV{ PERL_JSON_DEBUG } if exists $ENV{ PERL_JSON_DEBUG };
-}
-
-my %RequiredVersion = (
- 'JSON::PP' => '2.27203',
- 'JSON::XS' => '2.34',
-);
-
-# XS and PP common methods
-
-my @PublicMethods = qw/
- ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
- allow_blessed convert_blessed filter_json_object filter_json_single_key_object
- shrink max_depth max_size encode decode decode_prefix allow_unknown
-/;
-
-my @Properties = qw/
- ascii latin1 utf8 indent space_before space_after relaxed canonical allow_nonref
- allow_blessed convert_blessed shrink max_depth max_size allow_unknown
-/;
-
-my @XSOnlyMethods = qw/allow_tags/; # Currently nothing
-
-my @PPOnlyMethods = qw/
- indent_length sort_by
- allow_singlequote allow_bignum loose allow_barekey escape_slash as_nonblessed
-/; # JSON::PP specific
-
-
-# used in _load_xs and _load_pp ($INSTALL_ONLY is not used currently)
-my $_INSTALL_DONT_DIE = 1; # When _load_xs fails to load XS, don't die.
-my $_ALLOW_UNSUPPORTED = 0;
-my $_UNIV_CONV_BLESSED = 0;
-
-
-# Check the environment variable to decide worker module.
-
-unless ($JSON::Backend) {
- $JSON::DEBUG and Carp::carp("Check used worker module...");
-
- my $backend = exists $ENV{PERL_JSON_BACKEND} ? $ENV{PERL_JSON_BACKEND} : 1;
-
- if ($backend eq '1') {
- $backend = 'JSON::XS,JSON::PP';
- }
- elsif ($backend eq '0') {
- $backend = 'JSON::PP';
- }
- elsif ($backend eq '2') {
- $backend = 'JSON::XS';
- }
- $backend =~ s/\s+//g;
-
- my @backend_modules = split /,/, $backend;
- while(my $module = shift @backend_modules) {
- if ($module =~ /JSON::XS/) {
- _load_xs($module, @backend_modules ? $_INSTALL_DONT_DIE : 0);
- }
- elsif ($module =~ /JSON::PP/) {
- _load_pp($module);
- }
- elsif ($module =~ /JSON::backportPP/) {
- _load_pp($module);
- }
- else {
- Carp::croak "The value of environmental variable 'PERL_JSON_BACKEND' is invalid.";
- }
- last if $JSON::Backend;
- }
-}
-
-
-sub import {
- my $pkg = shift;
- my @what_to_export;
- my $no_export;
-
- for my $tag (@_) {
- if ($tag eq '-support_by_pp') {
- if (!$_ALLOW_UNSUPPORTED++) {
- JSON::Backend::XS
- ->support_by_pp(@PPOnlyMethods) if ($JSON::Backend->is_xs);
- }
- next;
- }
- elsif ($tag eq '-no_export') {
- $no_export++, next;
- }
- elsif ( $tag eq '-convert_blessed_universally' ) {
- my $org_encode = $JSON::Backend->can('encode');
- eval q|
- require B;
- local $^W;
- no strict 'refs';
- *{"${JSON::Backend}\::encode"} = sub {
- # only works with Perl 5.18+
- local *UNIVERSAL::TO_JSON = sub {
- my $b_obj = B::svref_2object( $_[0] );
- return $b_obj->isa('B::HV') ? { %{ $_[0] } }
- : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
- : undef
- ;
- };
- $org_encode->(@_);
- };
- | if ( !$_UNIV_CONV_BLESSED++ );
- next;
- }
- push @what_to_export, $tag;
- }
-
- return if ($no_export);
-
- __PACKAGE__->export_to_level(1, $pkg, @what_to_export);
-}
-
-
-# OBSOLETED
-
-sub jsonToObj {
- my $alternative = 'from_json';
- if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
- shift @_; $alternative = 'decode';
- }
- Carp::carp "'jsonToObj' will be obsoleted. Please use '$alternative' instead.";
- return JSON::from_json(@_);
-};
-
-sub objToJson {
- my $alternative = 'to_json';
- if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
- shift @_; $alternative = 'encode';
- }
- Carp::carp "'objToJson' will be obsoleted. Please use '$alternative' instead.";
- JSON::to_json(@_);
-};
-
-
-# INTERFACES
-
-sub to_json ($@) {
- if (
- ref($_[0]) eq 'JSON'
- or (@_ > 2 and $_[0] eq 'JSON')
- ) {
- Carp::croak "to_json should not be called as a method.";
- }
- my $json = JSON->new;
-
- if (@_ == 2 and ref $_[1] eq 'HASH') {
- my $opt = $_[1];
- for my $method (keys %$opt) {
- $json->$method( $opt->{$method} );
- }
- }
-
- $json->encode($_[0]);
-}
-
-
-sub from_json ($@) {
- if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) {
- Carp::croak "from_json should not be called as a method.";
- }
- my $json = JSON->new;
-
- if (@_ == 2 and ref $_[1] eq 'HASH') {
- my $opt = $_[1];
- for my $method (keys %$opt) {
- $json->$method( $opt->{$method} );
- }
- }
-
- return $json->decode( $_[0] );
-}
-
-
-
-sub true { $JSON::true }
-
-sub false { $JSON::false }
-
-sub null { undef; }
-
-
-sub require_xs_version { $RequiredVersion{'JSON::XS'}; }
-
-sub backend {
- my $proto = shift;
- $JSON::Backend;
-}
-
-#*module = *backend;
-
-
-sub is_xs {
- return $_[0]->backend->is_xs;
-}
-
-
-sub is_pp {
- return $_[0]->backend->is_pp;
-}
-
-
-sub pureperl_only_methods { @PPOnlyMethods; }
-
-
-sub property {
- my ($self, $name, $value) = @_;
-
- if (@_ == 1) {
- my %props;
- for $name (@Properties) {
- my $method = 'get_' . $name;
- if ($name eq 'max_size') {
- my $value = $self->$method();
- $props{$name} = $value == 1 ? 0 : $value;
- next;
- }
- $props{$name} = $self->$method();
- }
- return \%props;
- }
- elsif (@_ > 3) {
- Carp::croak('property() can take only the option within 2 arguments.');
- }
- elsif (@_ == 2) {
- if ( my $method = $self->can('get_' . $name) ) {
- if ($name eq 'max_size') {
- my $value = $self->$method();
- return $value == 1 ? 0 : $value;
- }
- $self->$method();
- }
- }
- else {
- $self->$name($value);
- }
-
-}
-
-
-
-# INTERNAL
-
-sub __load_xs {
- my ($module, $opt) = @_;
-
- $JSON::DEBUG and Carp::carp "Load $module.";
- my $required_version = $RequiredVersion{$module} || '';
-
- eval qq|
- use $module $required_version ();
- |;
-
- if ($@) {
- if (defined $opt and $opt & $_INSTALL_DONT_DIE) {
- $JSON::DEBUG and Carp::carp "Can't load $module...($@)";
- return 0;
- }
- Carp::croak $@;
- }
- $JSON::BackendModuleXS = $module;
- return 1;
-}
-
-sub _load_xs {
- my ($module, $opt) = @_;
- __load_xs($module, $opt) or return;
-
- my $data = join("", <DATA>); # this code is from Jcode 2.xx.
- close(DATA);
- eval $data;
- JSON::Backend::XS->init($module);
-
- return 1;
-};
-
-
-sub __load_pp {
- my ($module, $opt) = @_;
-
- $JSON::DEBUG and Carp::carp "Load $module.";
- my $required_version = $RequiredVersion{$module} || '';
-
- eval qq| use $module $required_version () |;
-
- if ($@) {
- if ( $module eq 'JSON::PP' ) {
- $JSON::DEBUG and Carp::carp "Can't load $module ($@), so try to load JSON::backportPP";
- $module = 'JSON::backportPP';
- local $^W; # if PP installed but invalid version, backportPP redefines methods.
- eval qq| require $module |;
- }
- Carp::croak $@ if $@;
- }
- $JSON::BackendModulePP = $module;
- return 1;
-}
-
-sub _load_pp {
- my ($module, $opt) = @_;
- __load_pp($module, $opt);
-
- JSON::Backend::PP->init($module);
-};
-
-#
-# Helper classes for Backend Module (PP)
-#
-
-package JSON::Backend::PP;
-
-sub init {
- my ($class, $module) = @_;
-
- # name may vary, but the module should (always) be a JSON::PP
-
- local $^W;
- no strict qw(refs); # this routine may be called after JSON::Backend::XS init was called.
- *{"JSON::decode_json"} = \&{"JSON::PP::decode_json"};
- *{"JSON::encode_json"} = \&{"JSON::PP::encode_json"};
- *{"JSON::is_bool"} = \&{"JSON::PP::is_bool"};
-
- $JSON::true = ${"JSON::PP::true"};
- $JSON::false = ${"JSON::PP::false"};
-
- push @JSON::Backend::PP::ISA, 'JSON::PP';
- push @JSON::ISA, $class;
- $JSON::Backend = $class;
- $JSON::BackendModule = $module;
- ${"$class\::VERSION"} = $module->VERSION;
-
- for my $method (@XSOnlyMethods) {
- *{"JSON::$method"} = sub {
- Carp::carp("$method is not supported in $module.");
- $_[0];
- };
- }
-
- return 1;
-}
-
-sub is_xs { 0 };
-sub is_pp { 1 };
-
-#
-# To save memory, the below lines are read only when XS backend is used.
-#
-
-package JSON;
-
-1;
-__DATA__
-
-
-#
-# Helper classes for Backend Module (XS)
-#
-
-package JSON::Backend::XS;
-
-sub init {
- my ($class, $module) = @_;
-
- local $^W;
- no strict qw(refs);
- *{"JSON::decode_json"} = \&{"$module\::decode_json"};
- *{"JSON::encode_json"} = \&{"$module\::encode_json"};
- *{"JSON::is_bool"} = \&{"$module\::is_bool"};
-
- $JSON::true = ${"$module\::true"};
- $JSON::false = ${"$module\::false"};
-
- push @JSON::Backend::XS::ISA, $module;
- push @JSON::ISA, $class;
- $JSON::Backend = $class;
- $JSON::BackendModule = $module;
- ${"$class\::VERSION"} = $module->VERSION;
-
- if ( $module->VERSION < 3 ) {
- eval 'package JSON::PP::Boolean';
- push @{"$module\::Boolean::ISA"}, qw(JSON::PP::Boolean);
- }
-
- for my $method (@PPOnlyMethods) {
- *{"JSON::$method"} = sub {
- Carp::carp("$method is not supported in $module.");
- $_[0];
- };
- }
-
- return 1;
-}
-
-sub is_xs { 1 };
-sub is_pp { 0 };
-
-sub support_by_pp {
- my ($class, @methods) = @_;
-
- JSON::__load_pp('JSON::PP');
-
- local $^W;
- no strict qw(refs);
-
- for my $method (@methods) {
- my $pp_method = JSON::PP->can($method) or next;
- *{"JSON::$method"} = sub {
- if (!$_[0]->isa('JSON::PP')) {
- my $xs_self = $_[0];
- my $pp_self = JSON::PP->new;
- for (@Properties) {
- my $getter = "get_$_";
- $pp_self->$_($xs_self->$getter);
- }
- $_[0] = $pp_self;
- }
- $pp_method->(@_);
- };
- }
-
- $JSON::DEBUG and Carp::carp("set -support_by_pp mode.");
-}
-
-1;
-__END__
-
-=head1 NAME
-
-JSON - JSON (JavaScript Object Notation) encoder/decoder
-
-=head1 SYNOPSIS
-
- use JSON; # imports encode_json, decode_json, to_json and from_json.
-
- # simple and fast interfaces (expect/generate UTF-8)
-
- $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
- $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text;
-
- # OO-interface
-
- $json = JSON->new->allow_nonref;
-
- $json_text = $json->encode( $perl_scalar );
- $perl_scalar = $json->decode( $json_text );
-
- $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing
-
-=head1 VERSION
-
- 2.93
-
-=head1 DESCRIPTION
-
-This module is a thin wrapper for L<JSON::XS>-compatible modules with a few
-additional features. All the backend modules convert a Perl data structure
-to a JSON text as of RFC4627 (which we know is obsolete but we still stick
-to; see below for an option to support part of RFC7159) and vice versa.
-This module uses L<JSON::XS> by default, and when JSON::XS is not available,
-this module falls back on L<JSON::PP>, which is in the Perl core since 5.14.
-If JSON::PP is not available either, this module then falls back on
-JSON::backportPP (which is actually JSON::PP in a different .pm file)
-bundled in the same distribution as this module. You can also explicitly
-specify to use L<Cpanel::JSON::XS>, a fork of JSON::XS by Reini Urban.
-
-All these backend modules have slight incompatibilities between them,
-including extra features that other modules don't support, but as long as you
-use only common features (most important ones are described below), migration
-from backend to backend should be reasonably easy. For details, see each
-backend module you use.
-
-=head1 CHOOSING BACKEND
-
-This module respects an environmental variable called C<PERL_JSON_BACKEND>
-when it decides a backend module to use. If this environmental variable is
-not set, it tries to load JSON::XS, and if JSON::XS is not available, it
-falls back on JSON::PP, and then JSON::backportPP if JSON::PP is not available
-either.
-
-If you always don't want it to fall back on pure perl modules, set the
-variable like this (C<export> may be C<setenv>, C<set> and the likes,
-depending on your environment):
-
- > export PERL_JSON_BACKEND=JSON::XS
-
-If you prefer Cpanel::JSON::XS to JSON::XS, then:
-
- > export PERL_JSON_BACKEND=Cpanel::JSON::XS,JSON::XS,JSON::PP
-
-You may also want to set this variable at the top of your test files, in order
-not to be bothered with incompatibilities between backends (you need to wrap
-this in C<BEGIN>, and set before actually C<use>-ing JSON module, as it decides
-its backend as soon as it's loaded):
-
- BEGIN { $ENV{PERL_JSON_BACKEND}='JSON::backportPP'; }
- use JSON;
-
-=head1 USING OPTIONAL FEATURES
-
-There are a few options you can set when you C<use> this module:
-
-=over
-
-=item -support_by_pp
-
- BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' }
-
- use JSON -support_by_pp;
-
- my $json = JSON->new;
- # escape_slash is for JSON::PP only.
- $json->allow_nonref->escape_slash->encode("/");
-
-With this option, this module loads its pure perl backend along with
-its XS backend (if available), and lets the XS backend to watch if you set
-a flag only JSON::PP supports. When you do, the internal JSON::XS object
-is replaced with a newly created JSON::PP object with the setting copied
-from the XS object, so that you can use JSON::PP flags (and its slower
-C<decode>/C<encode> methods) from then on. In other words, this is not
-something that allows you to hook JSON::XS to change its behavior while
-keeping its speed. JSON::XS and JSON::PP objects are quite different
-(JSON::XS object is a blessed scalar reference, while JSON::PP object is
-a blessed hash reference), and can't share their internals.
-
-To avoid needless overhead (by copying settings), you are advised not
-to use this option and just to use JSON::PP explicitly when you need
-JSON::PP features.
-
-=item -convert_blessed_universally
-
- use JSON -convert_blessed_universally;
-
- my $json = JSON->new->allow_nonref->convert_blessed;
- my $object = bless {foo => 'bar'}, 'Foo';
- $json->encode($object); # => {"foo":"bar"}
-
-JSON::XS-compatible backend modules don't encode blessed objects by
-default (except for their boolean values, which are typically blessed
-JSON::PP::Boolean objects). If you need to encode a data structure
-that may contain objects, you usually need to look into the structure
-and replace objects with alternative non-blessed values, or enable
-C<convert_blessed> and provide a C<TO_JSON> method for each object's
-(base) class that may be found in the structure, in order to let the
-methods replace the objects with whatever scalar values the methods
-return.
-
-If you need to serialise data structures that may contain arbitrary
-objects, it's probably better to use other serialisers (such as
-L<Sereal> or L<Storable> for example), but if you do want to use
-this module for that purpose, C<-convert_blessed_universally> option
-may help, which tweaks C<encode> method of the backend to install
-C<UNIVERSAL::TO_JSON> method (locally) before encoding, so that
-all the objects that don't have their own C<TO_JSON> method can
-fall back on the method in the C<UNIVERSAL> namespace. Note that you
-still need to enable C<convert_blessed> flag to actually encode
-objects in a data structure, and C<UNIVERSAL::TO_JSON> method
-installed by this option only converts blessed hash/array references
-into their unblessed clone (including private keys/values that are
-not supposed to be exposed). Other blessed references will be
-converted into null.
-
-This feature is experimental and may be removed in the future.
-
-=item -no_export
-
-When you don't want to import functional interfaces from a module, you
-usually supply C<()> to its C<use> statement.
-
- use JSON (); # no functional interfaces
-
-If you don't want to import functional interfaces, but you also want to
-use any of the above options, add C<-no_export> to the option list.
-
- # no functional interfaces, while JSON::PP support is enabled.
- use JSON -support_by_pp, -no_export;
-
-=back
-
-=head1 FUNCTIONAL INTERFACE
-
-This section is taken from JSON::XS. C<encode_json> and C<decode_json>
-are exported by default.
-
-This module also exports C<to_json> and C<from_json> for backward
-compatibility. These are slower, and may expect/generate different stuff
-from what C<encode_json> and C<decode_json> do, depending on their
-options. It's better just to use Object-Oriented interfaces than using
-these two functions.
-
-=head2 encode_json
-
- $json_text = encode_json $perl_scalar
-
-Converts the given Perl data structure to a UTF-8 encoded, binary string
-(that is, the string contains octets only). Croaks on error.
-
-This function call is functionally identical to:
-
- $json_text = JSON->new->utf8->encode($perl_scalar)
-
-Except being faster.
-
-=head2 decode_json
-
- $perl_scalar = decode_json $json_text
-
-The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
-to parse that as an UTF-8 encoded JSON text, returning the resulting
-reference. Croaks on error.
-
-This function call is functionally identical to:
-
- $perl_scalar = JSON->new->utf8->decode($json_text)
-
-Except being faster.
-
-=head2 to_json
-
- $json_text = to_json($perl_scalar[, $optional_hashref])
-
-Converts the given Perl data structure to a Unicode string by default.
-Croaks on error.
-
-Basically, this function call is functionally identical to:
-
- $json_text = JSON->new->encode($perl_scalar)
-
-Except being slower.
-
-You can pass an optional hash reference to modify its behavior, but
-that may change what C<to_json> expects/generates (see
-C<ENCODING/CODESET FLAG NOTES> for details).
-
- $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1})
- # => JSON->new->utf8(1)->pretty(1)->encode($perl_scalar)
-
-=head2 from_json
-
- $perl_scalar = from_json($json_text[, $optional_hashref])
-
-The opposite of C<to_json>: expects a Unicode string and tries
-to parse it, returning the resulting reference. Croaks on error.
-
-Basically, this function call is functionally identical to:
-
- $perl_scalar = JSON->new->decode($json_text)
-
-You can pass an optional hash reference to modify its behavior, but
-that may change what C<from_json> expects/generates (see
-C<ENCODING/CODESET FLAG NOTES> for details).
-
- $perl_scalar = from_json($json_text, {utf8 => 1})
- # => JSON->new->utf8(1)->decode($json_text)
-
-=head2 JSON::is_bool
-
- $is_boolean = JSON::is_bool($scalar)
-
-Returns true if the passed scalar represents either JSON::true or
-JSON::false, two constants that act like C<1> and C<0> respectively
-and are also used to represent JSON C<true> and C<false> in Perl strings.
-
-See L<MAPPING>, below, for more information on how JSON values are mapped to
-Perl.
-
-=head1 COMMON OBJECT-ORIENTED INTERFACE
-
-This section is also taken from JSON::XS.
-
-The object oriented interface lets you configure your own encoding or
-decoding style, within the limits of supported formats.
-
-=head2 new
-
- $json = JSON->new
-
-Creates a new JSON::XS-compatible backend object that can be used to de/encode JSON
-strings. All boolean flags described below are by default I<disabled>.
-
-The mutators for flags all return the backend object again and thus calls can
-be chained:
-
- my $json = JSON->new->utf8->space_after->encode({a => [1,2]})
- => {"a": [1, 2]}
-
-=head2 ascii
-
- $json = $json->ascii([$enable])
-
- $enabled = $json->get_ascii
-
-If C<$enable> is true (or missing), then the C<encode> method will not
-generate characters outside the code range C<0..127> (which is ASCII). Any
-Unicode characters outside that range will be escaped using either a
-single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
-as per RFC4627. The resulting encoded JSON text can be treated as a native
-Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string,
-or any other superset of ASCII.
-
-If C<$enable> is false, then the C<encode> method will not escape Unicode
-characters unless required by the JSON syntax or other flags. This results
-in a faster and more compact format.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-The main use for this flag is to produce JSON texts that can be
-transmitted over a 7-bit channel, as the encoded JSON texts will not
-contain any 8 bit characters.
-
- JSON->new->ascii(1)->encode([chr 0x10401])
- => ["\ud801\udc01"]
-
-=head2 latin1
-
- $json = $json->latin1([$enable])
-
- $enabled = $json->get_latin1
-
-If C<$enable> is true (or missing), then the C<encode> method will encode
-the resulting JSON text as latin1 (or iso-8859-1), escaping any characters
-outside the code range C<0..255>. The resulting string can be treated as a
-latin1-encoded JSON text or a native Unicode string. The C<decode> method
-will not be affected in any way by this flag, as C<decode> by default
-expects Unicode, which is a strict superset of latin1.
-
-If C<$enable> is false, then the C<encode> method will not escape Unicode
-characters unless required by the JSON syntax or other flags.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-The main use for this flag is efficiently encoding binary data as JSON
-text, as most octets will not be escaped, resulting in a smaller encoded
-size. The disadvantage is that the resulting JSON text is encoded
-in latin1 (and must correctly be treated as such when storing and
-transferring), a rare encoding for JSON. It is therefore most useful when
-you want to store data structures known to contain binary data efficiently
-in files or databases, not when talking to other JSON encoders/decoders.
-
- JSON->new->latin1->encode (["\x{89}\x{abc}"]
- => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
-
-=head2 utf8
-
- $json = $json->utf8([$enable])
-
- $enabled = $json->get_utf8
-
-If C<$enable> is true (or missing), then the C<encode> method will encode
-the JSON result into UTF-8, as required by many protocols, while the
-C<decode> method expects to be handled an UTF-8-encoded string. Please
-note that UTF-8-encoded strings do not contain any characters outside the
-range C<0..255>, they are thus useful for bytewise/binary I/O. In future
-versions, enabling this option might enable autodetection of the UTF-16
-and UTF-32 encoding families, as described in RFC4627.
-
-If C<$enable> is false, then the C<encode> method will return the JSON
-string as a (non-encoded) Unicode string, while C<decode> expects thus a
-Unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs
-to be done yourself, e.g. using the Encode module.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-Example, output UTF-16BE-encoded JSON:
-
- use Encode;
- $jsontext = encode "UTF-16BE", JSON->new->encode ($object);
-
-Example, decode UTF-32LE-encoded JSON:
-
- use Encode;
- $object = JSON->new->decode (decode "UTF-32LE", $jsontext);
-
-=head2 pretty
-
- $json = $json->pretty([$enable])
-
-This enables (or disables) all of the C<indent>, C<space_before> and
-C<space_after> (and in the future possibly more) flags in one call to
-generate the most readable (or most compact) form possible.
-
-=head2 indent
-
- $json = $json->indent([$enable])
-
- $enabled = $json->get_indent
-
-If C<$enable> is true (or missing), then the C<encode> method will use a multiline
-format as output, putting every array member or object/hash key-value pair
-into its own line, indenting them properly.
-
-If C<$enable> is false, no newlines or indenting will be produced, and the
-resulting JSON text is guaranteed not to contain any C<newlines>.
-
-This setting has no effect when decoding JSON texts.
-
-=head2 space_before
-
- $json = $json->space_before([$enable])
-
- $enabled = $json->get_space_before
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space before the C<:> separating keys from values in JSON objects.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts. You will also
-most likely combine this setting with C<space_after>.
-
-Example, space_before enabled, space_after and indent disabled:
-
- {"key" :"value"}
-
-=head2 space_after
-
- $json = $json->space_after([$enable])
-
- $enabled = $json->get_space_after
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space after the C<:> separating keys from values in JSON objects
-and extra whitespace after the C<,> separating key-value pairs and array
-members.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts.
-
-Example, space_before and indent disabled, space_after enabled:
-
- {"key": "value"}
-
-=head2 relaxed
-
- $json = $json->relaxed([$enable])
-
- $enabled = $json->get_relaxed
-
-If C<$enable> is true (or missing), then C<decode> will accept some
-extensions to normal JSON syntax (see below). C<encode> will not be
-affected in anyway. I<Be aware that this option makes you accept invalid
-JSON texts as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration files,
-resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
-Currently accepted extensions are:
-
-=over 4
-
-=item * list items can have an end-comma
-
-JSON I<separates> array elements and key-value pairs with commas. This
-can be annoying if you write JSON texts manually and want to be able to
-quickly append elements, so this extension accepts comma at the end of
-such items not just between them:
-
- [
- 1,
- 2, <- this comma not normally allowed
- ]
- {
- "k1": "v1",
- "k2": "v2", <- this comma not normally allowed
- }
-
-=item * shell-style '#'-comments
-
-Whenever JSON allows whitespace, shell-style comments are additionally
-allowed. They are terminated by the first carriage-return or line-feed
-character, after which more white-space and comments are allowed.
-
- [
- 1, # this comment not allowed in JSON
- # neither this one...
- ]
-
-=back
-
-=head2 canonical
-
- $json = $json->canonical([$enable])
-
- $enabled = $json->get_canonical
-
-If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
-by sorting their keys. This is adding a comparatively high overhead.
-
-If C<$enable> is false, then the C<encode> method will output key-value
-pairs in the order Perl stores them (which will likely change between runs
-of the same script, and can change even within the same run from 5.18
-onwards).
-
-This option is useful if you want the same data structure to be encoded as
-the same JSON text (given the same overall settings). If it is disabled,
-the same hash might be encoded differently even if contains the same data,
-as key-value pairs have no inherent ordering in Perl.
-
-This setting has no effect when decoding JSON texts.
-
-This setting has currently no effect on tied hashes.
-
-=head2 allow_nonref
-
- $json = $json->allow_nonref([$enable])
-
- $enabled = $json->get_allow_nonref
-
-If C<$enable> is true (or missing), then the C<encode> method can convert a
-non-reference into its corresponding string, number or null JSON value,
-which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
-values instead of croaking.
-
-If C<$enable> is false, then the C<encode> method will croak if it isn't
-passed an arrayref or hashref, as JSON texts must either be an object
-or array. Likewise, C<decode> will croak if given something that is not a
-JSON object or array.
-
-Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
-resulting in an invalid JSON text:
-
- JSON->new->allow_nonref->encode ("Hello, World!")
- => "Hello, World!"
-
-=head2 allow_unknown
-
- $json = $json->allow_unknown ([$enable])
-
- $enabled = $json->get_allow_unknown
-
-If C<$enable> is true (or missing), then C<encode> will I<not> throw an
-exception when it encounters values it cannot represent in JSON (for
-example, filehandles) but instead will encode a JSON C<null> value. Note
-that blessed objects are not included here and are handled separately by
-c<allow_nonref>.
-
-If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters anything it cannot encode as JSON.
-
-This option does not affect C<decode> in any way, and it is recommended to
-leave it off unless you know your communications partner.
-
-=head2 allow_blessed
-
- $json = $json->allow_blessed([$enable])
-
- $enabled = $json->get_allow_blessed
-
-See L<OBJECT SERIALISATION> for details.
-
-If C<$enable> is true (or missing), then the C<encode> method will not
-barf when it encounters a blessed reference that it cannot convert
-otherwise. Instead, a JSON C<null> value is encoded instead of the object.
-
-If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters a blessed object that it cannot convert
-otherwise.
-
-This setting has no effect on C<decode>.
-
-=head2 convert_blessed
-
- $json = $json->convert_blessed([$enable])
-
- $enabled = $json->get_convert_blessed
-
-See L<OBJECT SERIALISATION> for details.
-
-If C<$enable> is true (or missing), then C<encode>, upon encountering a
-blessed object, will check for the availability of the C<TO_JSON> method
-on the object's class. If found, it will be called in scalar context and
-the resulting scalar will be encoded instead of the object.
-
-The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
-returns other blessed objects, those will be handled in the same
-way. C<TO_JSON> must take care of not causing an endless recursion cycle
-(== crash) in this case. The name of C<TO_JSON> was chosen because other
-methods called by the Perl core (== not by the user of the object) are
-usually in upper case letters and to avoid collisions with any C<to_json>
-function or method.
-
-If C<$enable> is false (the default), then C<encode> will not consider
-this type of conversion.
-
-This setting has no effect on C<decode>.
-
-=head2 filter_json_object
-
- $json = $json->filter_json_object([$coderef])
-
-When C<$coderef> is specified, it will be called from C<decode> each
-time it decodes a JSON object. The only argument is a reference to the
-newly-created hash. If the code references returns a single scalar (which
-need not be a reference), this value (i.e. a copy of that scalar to avoid
-aliasing) is inserted into the deserialised data structure. If it returns
-an empty list (NOTE: I<not> C<undef>, which is a valid scalar), the
-original deserialised hash will be inserted. This setting can slow down
-decoding considerably.
-
-When C<$coderef> is omitted or undefined, any existing callback will
-be removed and C<decode> will not change the deserialised hash in any
-way.
-
-Example, convert all JSON objects into the integer 5:
-
- my $js = JSON->new->filter_json_object (sub { 5 });
- # returns [5]
- $js->decode ('[{}]'); # the given subroutine takes a hash reference.
- # throw an exception because allow_nonref is not enabled
- # so a lone 5 is not allowed.
- $js->decode ('{"a":1, "b":2}');
-
-=head2 filter_json_single_key_object
-
- $json = $json->filter_json_single_key_object($key [=> $coderef])
-
-Works remotely similar to C<filter_json_object>, but is only called for
-JSON objects having a single key named C<$key>.
-
-This C<$coderef> is called before the one specified via
-C<filter_json_object>, if any. It gets passed the single value in the JSON
-object. If it returns a single value, it will be inserted into the data
-structure. If it returns nothing (not even C<undef> but the empty list),
-the callback from C<filter_json_object> will be called next, as if no
-single-key callback were specified.
-
-If C<$coderef> is omitted or undefined, the corresponding callback will be
-disabled. There can only ever be one callback for a given key.
-
-As this callback gets called less often then the C<filter_json_object>
-one, decoding speed will not usually suffer as much. Therefore, single-key
-objects make excellent targets to serialise Perl objects into, especially
-as single-key JSON objects are as close to the type-tagged value concept
-as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
-support this in any way, so you need to make sure your data never looks
-like a serialised Perl hash.
-
-Typical names for the single object key are C<__class_whatever__>, or
-C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
-things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
-with real hashes.
-
-Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
-into the corresponding C<< $WIDGET{<id>} >> object:
-
- # return whatever is in $WIDGET{5}:
- JSON
- ->new
- ->filter_json_single_key_object (__widget__ => sub {
- $WIDGET{ $_[0] }
- })
- ->decode ('{"__widget__": 5')
-
- # this can be used with a TO_JSON method in some "widget" class
- # for serialisation to json:
- sub WidgetBase::TO_JSON {
- my ($self) = @_;
-
- unless ($self->{id}) {
- $self->{id} = ..get..some..id..;
- $WIDGET{$self->{id}} = $self;
- }
-
- { __widget__ => $self->{id} }
- }
-
-=head2 max_depth
-
- $json = $json->max_depth([$maximum_nesting_depth])
-
- $max_depth = $json->get_max_depth
-
-Sets the maximum nesting level (default C<512>) accepted while encoding
-or decoding. If a higher nesting level is detected in JSON text or a Perl
-data structure, then the encoder and decoder will stop and croak at that
-point.
-
-Nesting level is defined by number of hash- or arrayrefs that the encoder
-needs to traverse to reach a given point or the number of C<{> or C<[>
-characters without their matching closing parenthesis crossed to reach a
-given character in a string.
-
-Setting the maximum depth to one disallows any nesting, so that ensures
-that the object is only a single hash/object or array.
-
-If no argument is given, the highest possible setting will be used, which
-is rarely useful.
-
-=head2 max_size
-
- $json = $json->max_size([$maximum_string_size])
-
- $max_size = $json->get_max_size
-
-Set the maximum length a JSON text may have (in bytes) where decoding is
-being attempted. The default is C<0>, meaning no limit. When C<decode>
-is called on a string that is longer then this many bytes, it will not
-attempt to decode the string but throw an exception. This setting has no
-effect on C<encode> (yet).
-
-If no argument is given, the limit check will be deactivated (same as when
-C<0> is specified).
-
-=head2 encode
-
- $json_text = $json->encode($perl_scalar)
-
-Converts the given Perl value or data structure to its JSON
-representation. Croaks on error.
-
-=head2 decode
-
- $perl_scalar = $json->decode($json_text)
-
-The opposite of C<encode>: expects a JSON text and tries to parse it,
-returning the resulting simple scalar or reference. Croaks on error.
-
-=head2 decode_prefix
-
- ($perl_scalar, $characters) = $json->decode_prefix($json_text)
-
-This works like the C<decode> method, but instead of raising an exception
-when there is trailing garbage after the first JSON object, it will
-silently stop parsing there and return the number of characters consumed
-so far.
-
-This is useful if your JSON texts are not delimited by an outer protocol
-and you need to know where the JSON text ends.
-
- JSON->new->decode_prefix ("[1] the tail")
- => ([1], 3)
-
-=head1 ADDITIONAL METHODS
-
-The following methods are for this module only.
-
-=head2 backend
-
- $backend = $json->backend
-
-Since 2.92, C<backend> method returns an abstract backend module used currently,
-which should be JSON::Backend::XS (which inherits JSON::XS or Cpanel::JSON::XS),
-or JSON::Backend::PP (which inherits JSON::PP), not to monkey-patch the actual
-backend module globally.
-
-If you need to know what is used actually, use C<isa>, instead of string comparison.
-
-=head2 is_xs
-
- $boolean = $json->is_xs
-
-Returns true if the backend inherits JSON::XS or Cpanel::JSON::XS.
-
-=head2 is_pp
-
- $boolean = $json->is_pp
-
-Returns true if the backend inherits JSON::PP.
-
-=head2 property
-
- $settings = $json->property()
-
-Returns a reference to a hash that holds all the common flag settings.
-
- $json = $json->property('utf8' => 1)
- $value = $json->property('utf8') # 1
-
-You can use this to get/set a value of a particular flag.
-
-=head1 INCREMENTAL PARSING
-
-This section is also taken from JSON::XS.
-
-In some cases, there is the need for incremental parsing of JSON
-texts. While this module always has to keep both JSON text and resulting
-Perl data structure in memory at one time, it does allow you to parse a
-JSON stream incrementally. It does so by accumulating text until it has
-a full JSON object, which it then can decode. This process is similar to
-using C<decode_prefix> to see if a full JSON object is available, but
-is much more efficient (and can be implemented with a minimum of method
-calls).
-
-This module will only attempt to parse the JSON text once it is sure it
-has enough text to get a decisive result, using a very simple but
-truly incremental parser. This means that it sometimes won't stop as
-early as the full parser, for example, it doesn't detect mismatched
-parentheses. The only thing it guarantees is that it starts decoding as
-soon as a syntactically valid JSON text has been seen. This means you need
-to set resource limits (e.g. C<max_size>) to ensure the parser will stop
-parsing in the presence if syntax errors.
-
-The following methods implement this incremental parser.
-
-=head2 incr_parse
-
- $json->incr_parse( [$string] ) # void context
-
- $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
-
- @obj_or_empty = $json->incr_parse( [$string] ) # list context
-
-This is the central parsing function. It can both append new text and
-extract objects from the stream accumulated so far (both of these
-functions are optional).
-
-If C<$string> is given, then this string is appended to the already
-existing JSON fragment stored in the C<$json> object.
-
-After that, if the function is called in void context, it will simply
-return without doing anything further. This can be used to add more text
-in as many chunks as you want.
-
-If the method is called in scalar context, then it will try to extract
-exactly I<one> JSON object. If that is successful, it will return this
-object, otherwise it will return C<undef>. If there is a parse error,
-this method will croak just as C<decode> would do (one can then use
-C<incr_skip> to skip the erroneous part). This is the most common way of
-using the method.
-
-And finally, in list context, it will try to extract as many objects
-from the stream as it can find and return them, or the empty list
-otherwise. For this to work, there must be no separators (other than
-whitespace) between the JSON objects or arrays, instead they must be
-concatenated back-to-back. If an error occurs, an exception will be
-raised as in the scalar context case. Note that in this case, any
-previously-parsed JSON texts will be lost.
-
-Example: Parse some JSON arrays/objects in a given string and return
-them.
-
- my @objs = JSON->new->incr_parse ("[5][7][1,2]");
-
-=head2 incr_text
-
- $lvalue_string = $json->incr_text
-
-This method returns the currently stored JSON fragment as an lvalue, that
-is, you can manipulate it. This I<only> works when a preceding call to
-C<incr_parse> in I<scalar context> successfully returned an object. Under
-all other circumstances you must not call this function (I mean it.
-although in simple tests it might actually work, it I<will> fail under
-real world conditions). As a special exception, you can also call this
-method before having parsed anything.
-
-That means you can only use this function to look at or manipulate text
-before or after complete JSON objects, not while the parser is in the
-middle of parsing a JSON object.
-
-This function is useful in two cases: a) finding the trailing text after a
-JSON object or b) parsing multiple JSON objects separated by non-JSON text
-(such as commas).
-
-=head2 incr_skip
-
- $json->incr_skip
-
-This will reset the state of the incremental parser and will remove
-the parsed text from the input buffer so far. This is useful after
-C<incr_parse> died, in which case the input buffer and incremental parser
-state is left unchanged, to skip the text parsed so far and to reset the
-parse state.
-
-The difference to C<incr_reset> is that only text until the parse error
-occurred is removed.
-
-=head2 incr_reset
-
- $json->incr_reset
-
-This completely resets the incremental parser, that is, after this call,
-it will be as if the parser had never parsed anything.
-
-This is useful if you want to repeatedly parse JSON objects and want to
-ignore any trailing data, which means you have to reset the parser after
-each successful decode.
-
-=head1 MAPPING
-
-Most of this section is also taken from JSON::XS.
-
-This section describes how the backend modules map Perl values to JSON values and
-vice versa. These mappings are designed to "do the right thing" in most
-circumstances automatically, preserving round-tripping characteristics
-(what you put in comes out as something equivalent).
-
-For the more enlightened: note that in the following descriptions,
-lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl>
-refers to the abstract Perl language itself.
-
-=head2 JSON -> PERL
-
-=over 4
-
-=item object
-
-A JSON object becomes a reference to a hash in Perl. No ordering of object
-keys is preserved (JSON does not preserver object key ordering itself).
-
-=item array
-
-A JSON array becomes a reference to an array in Perl.
-
-=item string
-
-A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
-are represented by the same codepoints in the Perl string, so no manual
-decoding is necessary.
-
-=item number
-
-A JSON number becomes either an integer, numeric (floating point) or
-string scalar in perl, depending on its range and any fractional parts. On
-the Perl level, there is no difference between those as Perl handles all
-the conversion details, but an integer may take slightly less memory and
-might represent more values exactly than floating point numbers.
-
-If the number consists of digits only, this module will try to represent
-it as an integer value. If that fails, it will try to represent it as
-a numeric (floating point) value if that is possible without loss of
-precision. Otherwise it will preserve the number as a string value (in
-which case you lose roundtripping ability, as the JSON number will be
-re-encoded to a JSON string).
-
-Numbers containing a fractional or exponential part will always be
-represented as numeric (floating point) values, possibly at a loss of
-precision (in which case you might lose perfect roundtripping ability, but
-the JSON number will still be re-encoded as a JSON number).
-
-Note that precision is not accuracy - binary floating point values cannot
-represent most decimal fractions exactly, and when converting from and to
-floating point, this module only guarantees precision up to but not including
-the least significant bit.
-
-=item true, false
-
-These JSON atoms become C<JSON::true> and C<JSON::false>,
-respectively. They are overloaded to act almost exactly like the numbers
-C<1> and C<0>. You can check whether a scalar is a JSON boolean by using
-the C<JSON::is_bool> function.
-
-=item null
-
-A JSON null atom becomes C<undef> in Perl.
-
-=item shell-style comments (C<< # I<text> >>)
-
-As a nonstandard extension to the JSON syntax that is enabled by the
-C<relaxed> setting, shell-style comments are allowed. They can start
-anywhere outside strings and go till the end of the line.
-
-=back
-
-
-=head2 PERL -> JSON
-
-The mapping from Perl to JSON is slightly more difficult, as Perl is a
-truly typeless language, so we can only guess which JSON type is meant by
-a Perl value.
-
-=over 4
-
-=item hash references
-
-Perl hash references become JSON objects. As there is no inherent
-ordering in hash keys (or JSON objects), they will usually be encoded
-in a pseudo-random order. This module can optionally sort the hash keys
-(determined by the I<canonical> flag), so the same data structure will
-serialise to the same JSON text (given same settings and version of
-the same backend), but this incurs a runtime overhead and is only rarely useful,
-e.g. when you want to compare some JSON text against another for equality.
-
-=item array references
-
-Perl array references become JSON arrays.
-
-=item other references
-
-Other unblessed references are generally not allowed and will cause an
-exception to be thrown, except for references to the integers C<0> and
-C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
-also use C<JSON::false> and C<JSON::true> to improve readability.
-
- encode_json [\0,JSON::true] # yields [false,true]
-
-=item JSON::true, JSON::false, JSON::null
-
-These special values become JSON true and JSON false values,
-respectively. You can also use C<\1> and C<\0> directly if you want.
-
-=item blessed objects
-
-Blessed objects are not directly representable in JSON, but C<JSON::XS>
-allows various ways of handling objects. See L<OBJECT SERIALISATION>,
-below, for details.
-
-=item simple scalars
-
-Simple Perl scalars (any scalar that is not a reference) are the most
-difficult objects to encode: this module will encode undefined scalars as
-JSON C<null> values, scalars that have last been used in a string context
-before encoding as JSON strings, and anything else as number value:
-
- # dump as number
- encode_json [2] # yields [2]
- encode_json [-3.0e17] # yields [-3e+17]
- my $value = 5; encode_json [$value] # yields [5]
-
- # used as string, so dump as string
- print $value;
- encode_json [$value] # yields ["5"]
-
- # undef becomes null
- encode_json [undef] # yields [null]
-
-You can force the type to be a string by stringifying it:
-
- my $x = 3.1; # some variable containing a number
- "$x"; # stringified
- $x .= ""; # another, more awkward way to stringify
- print $x; # perl does it for you, too, quite often
-
-You can force the type to be a number by numifying it:
-
- my $x = "3"; # some variable containing a string
- $x += 0; # numify it, ensuring it will be dumped as a number
- $x *= 1; # same thing, the choice is yours.
-
-You can not currently force the type in other, less obscure, ways. Tell me
-if you need this capability (but don't forget to explain why it's needed
-:).
-
-Note that numerical precision has the same meaning as under Perl (so
-binary to decimal conversion follows the same rules as in Perl, which
-can differ to other languages). Also, your perl interpreter might expose
-extensions to the floating point numbers of your platform, such as
-infinities or NaN's - these cannot be represented in JSON, and it is an
-error to pass those in.
-
-=back
-
-=head2 OBJECT SERIALISATION
-
-As for Perl objects, this module only supports a pure JSON representation
-(without the ability to deserialise the object automatically again).
-
-=head3 SERIALISATION
-
-What happens when this module encounters a Perl object depends on the
-C<allow_blessed> and C<convert_blessed> settings, which are used in
-this order:
-
-=over 4
-
-=item 1. C<convert_blessed> is enabled and the object has a C<TO_JSON> method.
-
-In this case, the C<TO_JSON> method of the object is invoked in scalar
-context. It must return a single scalar that can be directly encoded into
-JSON. This scalar replaces the object in the JSON text.
-
-For example, the following C<TO_JSON> method will convert all L<URI>
-objects to JSON strings when serialised. The fact that these values
-originally were L<URI> objects is lost.
-
- sub URI::TO_JSON {
- my ($uri) = @_;
- $uri->as_string
- }
-
-=item 2. C<allow_blessed> is enabled.
-
-The object will be serialised as a JSON null value.
-
-=item 3. none of the above
-
-If none of the settings are enabled or the respective methods are missing,
-this module throws an exception.
-
-=back
-
-=head1 ENCODING/CODESET FLAG NOTES
-
-This section is taken from JSON::XS.
-
-The interested reader might have seen a number of flags that signify
-encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be
-some confusion on what these do, so here is a short comparison:
-
-C<utf8> controls whether the JSON text created by C<encode> (and expected
-by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only
-control whether C<encode> escapes character values outside their respective
-codeset range. Neither of these flags conflict with each other, although
-some combinations make less sense than others.
-
-Care has been taken to make all flags symmetrical with respect to
-C<encode> and C<decode>, that is, texts encoded with any combination of
-these flag values will be correctly decoded when the same flags are used
-- in general, if you use different flag settings while encoding vs. when
-decoding you likely have a bug somewhere.
-
-Below comes a verbose discussion of these flags. Note that a "codeset" is
-simply an abstract set of character-codepoint pairs, while an encoding
-takes those codepoint numbers and I<encodes> them, in our case into
-octets. Unicode is (among other things) a codeset, UTF-8 is an encoding,
-and ISO-8859-1 (= latin 1) and ASCII are both codesets I<and> encodings at
-the same time, which can be confusing.
-
-=over 4
-
-=item C<utf8> flag disabled
-
-When C<utf8> is disabled (the default), then C<encode>/C<decode> generate
-and expect Unicode strings, that is, characters with high ordinal Unicode
-values (> 255) will be encoded as such characters, and likewise such
-characters are decoded as-is, no changes to them will be done, except
-"(re-)interpreting" them as Unicode codepoints or Unicode characters,
-respectively (to Perl, these are the same thing in strings unless you do
-funny/weird/dumb stuff).
-
-This is useful when you want to do the encoding yourself (e.g. when you
-want to have UTF-16 encoded JSON texts) or when some other layer does
-the encoding for you (for example, when printing to a terminal using a
-filehandle that transparently encodes to UTF-8 you certainly do NOT want
-to UTF-8 encode your data first and have Perl encode it another time).
-
-=item C<utf8> flag enabled
-
-If the C<utf8>-flag is enabled, C<encode>/C<decode> will encode all
-characters using the corresponding UTF-8 multi-byte sequence, and will
-expect your input strings to be encoded as UTF-8, that is, no "character"
-of the input string must have any value > 255, as UTF-8 does not allow
-that.
-
-The C<utf8> flag therefore switches between two modes: disabled means you
-will get a Unicode string in Perl, enabled means you get an UTF-8 encoded
-octet/binary string in Perl.
-
-=item C<latin1> or C<ascii> flags enabled
-
-With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters
-with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining
-characters as specified by the C<utf8> flag.
-
-If C<utf8> is disabled, then the result is also correctly encoded in those
-character sets (as both are proper subsets of Unicode, meaning that a
-Unicode string with all character values < 256 is the same thing as a
-ISO-8859-1 string, and a Unicode string with all character values < 128 is
-the same thing as an ASCII string in Perl).
-
-If C<utf8> is enabled, you still get a correct UTF-8-encoded string,
-regardless of these flags, just some more characters will be escaped using
-C<\uXXXX> then before.
-
-Note that ISO-8859-1-I<encoded> strings are not compatible with UTF-8
-encoding, while ASCII-encoded strings are. That is because the ISO-8859-1
-encoding is NOT a subset of UTF-8 (despite the ISO-8859-1 I<codeset> being
-a subset of Unicode), while ASCII is.
-
-Surprisingly, C<decode> will ignore these flags and so treat all input
-values as governed by the C<utf8> flag. If it is disabled, this allows you
-to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of
-Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings.
-
-So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag -
-they only govern when the JSON output engine escapes a character or not.
-
-The main use for C<latin1> is to relatively efficiently store binary data
-as JSON, at the expense of breaking compatibility with most JSON decoders.
-
-The main use for C<ascii> is to force the output to not contain characters
-with values > 127, which means you can interpret the resulting string
-as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about any character set and
-8-bit-encoding, and still get the same data structure back. This is useful
-when your channel for JSON transfer is not 8-bit clean or the encoding
-might be mangled in between (e.g. in mail), and works because ASCII is a
-proper subset of most 8-bit and multibyte encodings in use in the world.
-
-=back
-
-=head1 BACKWARD INCOMPATIBILITY
-
-Since version 2.90, stringification (and string comparison) for
-C<JSON::true> and C<JSON::false> has not been overloaded. It shouldn't
-matter as long as you treat them as boolean values, but a code that
-expects they are stringified as "true" or "false" doesn't work as
-you have expected any more.
-
- if (JSON::true eq 'true') { # now fails
-
- print "The result is $JSON::true now."; # => The result is 1 now.
-
-And now these boolean values don't inherit JSON::Boolean, either.
-When you need to test a value is a JSON boolean value or not, use
-C<JSON::is_bool> function, instead of testing the value inherits
-a particular boolean class or not.
-
-=head1 BUGS
-
-Please report bugs on backend selection and additional features
-this module provides to RT or GitHub issues for this module:
-
-=over 4
-
-=item https://rt.cpan.org/Public/Dist/Display.html?Queue=JSON
-
-=item https://github.com/makamaka/JSON/issues
-
-=back
-
-Please report bugs and feature requests on decoding/encoding
-and boolean behaviors to the author of the backend module you
-are using.
-
-=head1 SEE ALSO
-
-L<JSON::XS>, L<Cpanel::JSON::XS>, L<JSON::PP> for backends.
-
-L<JSON::MaybeXS>, an alternative that prefers Cpanel::JSON::XS.
-
-C<RFC4627>(L<http://www.ietf.org/rfc/rfc4627.txt>)
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-JSON::XS was written by Marc Lehmann <schmorp[at]schmorp.de>
-
-The release of this new version owes to the courtesy of Marc Lehmann.
-
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2005-2013 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/MaybeXS.pm b/Master/tlpkg/tlperl/site/lib/JSON/MaybeXS.pm
new file mode 100755
index 00000000000..eee84f2e269
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/JSON/MaybeXS.pm
@@ -0,0 +1,323 @@
+package JSON::MaybeXS;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(Exporter);
+
+our $VERSION = '1.003010';
+$VERSION = eval $VERSION;
+
+sub _choose_json_module {
+ return 'Cpanel::JSON::XS' if $INC{'Cpanel/JSON/XS.pm'};
+ return 'JSON::XS' if $INC{'JSON/XS.pm'};
+
+ my @err;
+
+ return 'Cpanel::JSON::XS' if eval { require Cpanel::JSON::XS; 1; };
+ push @err, "Error loading Cpanel::JSON::XS: $@";
+
+ return 'JSON::XS' if eval { require JSON::XS; 1; };
+ push @err, "Error loading JSON::XS: $@";
+
+ return 'JSON::PP' if eval { require JSON::PP; 1 };
+ push @err, "Error loading JSON::PP: $@";
+
+ die join( "\n", "Couldn't load a JSON module:", @err );
+
+}
+
+BEGIN {
+ our $JSON_Class = _choose_json_module();
+ $JSON_Class->import(qw(encode_json decode_json));
+}
+
+our @EXPORT = qw(encode_json decode_json JSON);
+my @EXPORT_ALL = qw(is_bool);
+our @EXPORT_OK = qw(is_bool to_json from_json);
+our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_ALL ],
+ legacy => [ @EXPORT, @EXPORT_OK ],
+ );
+
+sub JSON () { our $JSON_Class }
+
+sub new {
+ shift;
+ my %args = @_ == 1 ? %{$_[0]} : @_;
+ my $new = (our $JSON_Class)->new;
+ $new->$_($args{$_}) for keys %args;
+ return $new;
+}
+
+use Scalar::Util ();
+
+sub is_bool {
+ die 'is_bool is not a method' if $_[1];
+
+ Scalar::Util::blessed($_[0])
+ and ($_[0]->isa('JSON::XS::Boolean')
+ or $_[0]->isa('Cpanel::JSON::XS::Boolean')
+ or $_[0]->isa('JSON::PP::Boolean'));
+}
+
+# (mostly) CopyPasta from JSON.pm version 2.90
+use Carp ();
+
+sub from_json ($@) {
+ if ( ref($_[0]) =~ /^JSON/ or $_[0] =~ /^JSON/ ) {
+ Carp::croak "from_json should not be called as a method.";
+ }
+ my $json = JSON()->new;
+
+ if (@_ == 2 and ref $_[1] eq 'HASH') {
+ my $opt = $_[1];
+ for my $method (keys %$opt) {
+ $json->$method( $opt->{$method} );
+ }
+ }
+
+ return $json->decode( $_[0] );
+}
+
+sub to_json ($@) {
+ if (
+ ref($_[0]) =~ /^JSON/
+ or (@_ > 2 and $_[0] =~ /^JSON/)
+ ) {
+ Carp::croak "to_json should not be called as a method.";
+ }
+ my $json = JSON()->new;
+
+ if (@_ == 2 and ref $_[1] eq 'HASH') {
+ my $opt = $_[1];
+ for my $method (keys %$opt) {
+ $json->$method( $opt->{$method} );
+ }
+ }
+
+ $json->encode($_[0]);
+}
+
+1;
+
+=head1 NAME
+
+JSON::MaybeXS - Use L<Cpanel::JSON::XS> with a fallback to L<JSON::XS> and L<JSON::PP>
+
+=head1 SYNOPSIS
+
+ use JSON::MaybeXS;
+
+ my $data_structure = decode_json($json_input);
+
+ my $json_output = encode_json($data_structure);
+
+ my $json = JSON()->new;
+
+ my $json_with_args = JSON::MaybeXS->new(utf8 => 1); # or { utf8 => 1 }
+
+=head1 DESCRIPTION
+
+This module first checks to see if either L<Cpanel::JSON::XS> or
+L<JSON::XS> is already loaded, in which case it uses that module. Otherwise
+it tries to load L<Cpanel::JSON::XS>, then L<JSON::XS>, then L<JSON::PP>
+in order, and either uses the first module it finds or throws an error.
+
+It then exports the C<encode_json> and C<decode_json> functions from the
+loaded module, along with a C<JSON> constant that returns the class name
+for calling C<new> on.
+
+If you're writing fresh code rather than replacing L<JSON.pm|JSON> usage, you might
+want to pass options as constructor args rather than calling mutators, so
+we provide our own C<new> method that supports that.
+
+=head1 EXPORTS
+
+C<encode_json>, C<decode_json> and C<JSON> are exported by default; C<is_bool>
+is exported on request.
+
+To import only some symbols, specify them on the C<use> line:
+
+ use JSON::MaybeXS qw(encode_json decode_json is_bool); # functions only
+
+ use JSON::MaybeXS qw(JSON); # JSON constant only
+
+To import all available sensible symbols (C<encode_json>, C<decode_json>, and
+C<is_bool>), use C<:all>:
+
+ use JSON::MaybeXS ':all';
+
+To import all symbols including those needed by legacy apps that use L<JSON::PP>:
+
+ use JSON::MaybeXS ':legacy';
+
+This imports the C<to_json> and C<from_json> symbols as well as everything in
+C<:all>. NOTE: This is to support legacy code that makes extensive
+use of C<to_json> and C<from_json> which you are not yet in a position to
+refactor. DO NOT use this import tag in new code, in order to avoid
+the crawling horrors of getting UTF-8 support subtly wrong. See the
+documentation for L<JSON> for further details.
+
+=head2 encode_json
+
+This is the C<encode_json> function provided by the selected implementation
+module, and takes a perl data structure which is serialised to JSON text.
+
+ my $json_text = encode_json($data_structure);
+
+=head2 decode_json
+
+This is the C<decode_json> function provided by the selected implementation
+module, and takes a string of JSON text to deserialise to a perl data structure.
+
+ my $data_structure = decode_json($json_text);
+
+=head2 to_json, from_json
+
+See L<JSON> for details. These are included to support legacy code
+B<only>.
+
+=head2 JSON
+
+The C<JSON> constant returns the selected implementation module's name for
+use as a class name - so:
+
+ my $json_obj = JSON()->new; # returns a Cpanel::JSON::XS or JSON::PP object
+
+and that object can then be used normally:
+
+ my $data_structure = $json_obj->decode($json_text); # etc.
+
+The use of parentheses here is optional, and only used as a hint to the reader
+that this use of C<JSON> is a I<subroutine> call, I<not> a class name.
+
+=head2 is_bool
+
+ $is_boolean = is_bool($scalar)
+
+Returns true if the passed scalar represents either C<true> or
+C<false>, two constants that act like C<1> and C<0>, respectively
+and are used to represent JSON C<true> and C<false> values in Perl.
+
+Since this is a bare sub in the various backend classes, it cannot be called as
+a class method like the other interfaces; it must be called as a function, with
+no invocant. It supports the representation used in all JSON backends.
+
+=head1 CONSTRUCTOR
+
+=head2 new
+
+With L<JSON::PP>, L<JSON::XS> and L<Cpanel::JSON::XS> you are required to call
+mutators to set options, such as:
+
+ my $json = $class->new->utf8(1)->pretty(1);
+
+Since this is a trifle irritating and noticeably un-perlish, we also offer:
+
+ my $json = JSON::MaybeXS->new(utf8 => 1, pretty => 1);
+
+which works equivalently to the above (and in the usual tradition will accept
+a hashref instead of a hash, should you so desire).
+
+The resulting object is blessed into the underlying backend, which offers (at
+least) the methods C<encode> and C<decode>.
+
+=head1 BOOLEANS
+
+To include JSON-aware booleans (C<true>, C<false>) in your data, just do:
+
+ use JSON::MaybeXS;
+ my $true = JSON()->true;
+ my $false = JSON()->false;
+
+=head1 CONVERTING FROM JSON::Any
+
+L<JSON::Any> used to be the favoured compatibility layer above the various
+JSON backends, but over time has grown a lot of extra code to deal with legacy
+backends (e.g. L<JSON::Syck>) that are no longer needed. This is a rough guide of translating such code:
+
+Change code from:
+
+ use JSON::Any;
+ my $json = JSON::Any->new->objToJson($data); # or to_json($data), or Dump($data)
+
+to:
+
+ use JSON::MaybeXS;
+ my $json = encode_json($data);
+
+
+Change code from:
+
+ use JSON::Any;
+ my $data = JSON::Any->new->jsonToObj($json); # or from_json($json), or Load($json)
+
+to:
+
+ use JSON::MaybeXS;
+ my $json = decode_json($data);
+
+=head1 CAVEATS
+
+The C<new()> method in this module is technically a factory, not a
+constructor, because the objects it returns will I<NOT> be blessed into the
+C<JSON::MaybeXS> class.
+
+If you are using an object returned by this module as a Moo(se) attribute,
+this type constraint code:
+
+ is 'json' => ( isa => 'JSON::MaybeXS' );
+
+will I<NOT> do what you expect. Instead, either rely on the C<JSON> class
+constant described above, as so:
+
+ is 'json' => ( isa => JSON::MaybeXS::JSON() );
+
+Alternatively, you can use duck typing:
+
+ use Moose::Util::TypeConstraints 'duck_type';
+ is 'json' => ( isa => Object , duck_type([qw/ encode decode /]));
+
+=head1 INSTALLATION
+
+At installation time, F<Makefile.PL> will attempt to determine if you have a
+working compiler available, and therefore whether you are able to run XS code.
+If so, L<Cpanel::JSON::XS> will be added to the prerequisite list, unless
+L<JSON::XS> is already installed at a high enough version. L<JSON::XS> may
+also be upgraded to fix any incompatibility issues.
+
+Because running XS code is not mandatory and L<JSON::PP> (which is in perl
+core) is used as a fallback backend, this module is safe to be used in a suite
+of code that is fatpacked or installed into a restricted-resource environment.
+
+You can also prevent any XS dependencies from being installed by setting
+C<PUREPERL_ONLY=1> in F<Makefile.PL> options (or in the C<PERL_MM_OPT>
+environment variable), or using the C<--pp> or C<--pureperl> flags with the
+L<cpanminus client|cpanm>.
+
+=head1 AUTHOR
+
+mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
+
+=head1 CONTRIBUTORS
+
+=over 4
+
+=item * Clinton Gormley <drtech@cpan.org>
+
+=item * Karen Etheridge <ether@cpan.org>
+
+=item * Kieren Diment <diment@gmail.com>
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (c) 2013 the C<JSON::MaybeXS> L</AUTHOR> and L</CONTRIBUTORS>
+as listed above.
+
+=head1 LICENSE
+
+This library is free software and may be distributed under the same terms
+as perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/XS/Boolean.pm b/Master/tlpkg/tlperl/site/lib/JSON/XS/Boolean.pm
deleted file mode 100644
index 67f704b2a72..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON/XS/Boolean.pm
+++ /dev/null
@@ -1,31 +0,0 @@
-=head1 NAME
-
-JSON::XS::Boolean - dummy module providing JSON::XS::Boolean
-
-=head1 SYNOPSIS
-
- # do not "use" yourself
-
-=head1 DESCRIPTION
-
-This module exists only to provide overload resolution for Storable and
-similar modules. It's only needed for compatibility with data serialised
-(by other modules such as Storable) that was decoded by JSON::XS versions
-before 3.0.
-
-Since 3.0, JSON::PP::Boolean has replaced it. Support for
-JSON::XS::Boolean will be removed in a future release.
-
-=cut
-
-use JSON::XS ();
-
-1;
-
-=head1 AUTHOR
-
- Marc Lehmann <schmorp@schmorp.de>
- http://home.schmorp.de/
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/backportPP.pm b/Master/tlpkg/tlperl/site/lib/JSON/backportPP.pm
deleted file mode 100644
index 36132a3307b..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON/backportPP.pm
+++ /dev/null
@@ -1,2854 +0,0 @@
-package # This is JSON::backportPP
- JSON::PP;
-
-# JSON-2.0
-
-use 5.005;
-use strict;
-
-use Exporter ();
-BEGIN { @JSON::backportPP::ISA = ('Exporter') }
-
-use overload ();
-use JSON::backportPP::Boolean;
-
-use Carp ();
-#use Devel::Peek;
-
-$JSON::backportPP::VERSION = '2.94';
-
-@JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
-
-# instead of hash-access, i tried index-access for speed.
-# but this method is not faster than what i expected. so it will be changed.
-
-use constant P_ASCII => 0;
-use constant P_LATIN1 => 1;
-use constant P_UTF8 => 2;
-use constant P_INDENT => 3;
-use constant P_CANONICAL => 4;
-use constant P_SPACE_BEFORE => 5;
-use constant P_SPACE_AFTER => 6;
-use constant P_ALLOW_NONREF => 7;
-use constant P_SHRINK => 8;
-use constant P_ALLOW_BLESSED => 9;
-use constant P_CONVERT_BLESSED => 10;
-use constant P_RELAXED => 11;
-
-use constant P_LOOSE => 12;
-use constant P_ALLOW_BIGNUM => 13;
-use constant P_ALLOW_BAREKEY => 14;
-use constant P_ALLOW_SINGLEQUOTE => 15;
-use constant P_ESCAPE_SLASH => 16;
-use constant P_AS_NONBLESSED => 17;
-
-use constant P_ALLOW_UNKNOWN => 18;
-
-use constant OLD_PERL => $] < 5.008 ? 1 : 0;
-use constant USE_B => 0;
-
-BEGIN {
-if (USE_B) {
- require B;
-}
-}
-
-BEGIN {
- my @xs_compati_bit_properties = qw(
- latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink
- allow_blessed convert_blessed relaxed allow_unknown
- );
- my @pp_bit_properties = qw(
- allow_singlequote allow_bignum loose
- allow_barekey escape_slash as_nonblessed
- );
-
- # Perl version check, Unicode handling is enabled?
- # Helper module sets @JSON::PP::_properties.
- if ( OLD_PERL ) {
- my $helper = $] >= 5.006 ? 'JSON::backportPP::Compat5006' : 'JSON::backportPP::Compat5005';
- eval qq| require $helper |;
- if ($@) { Carp::croak $@; }
- }
-
- for my $name (@xs_compati_bit_properties, @pp_bit_properties) {
- my $property_id = 'P_' . uc($name);
-
- eval qq/
- sub $name {
- my \$enable = defined \$_[1] ? \$_[1] : 1;
-
- if (\$enable) {
- \$_[0]->{PROPS}->[$property_id] = 1;
- }
- else {
- \$_[0]->{PROPS}->[$property_id] = 0;
- }
-
- \$_[0];
- }
-
- sub get_$name {
- \$_[0]->{PROPS}->[$property_id] ? 1 : '';
- }
- /;
- }
-
-}
-
-
-
-# Functions
-
-my $JSON; # cache
-
-sub encode_json ($) { # encode
- ($JSON ||= __PACKAGE__->new->utf8)->encode(@_);
-}
-
-
-sub decode_json { # decode
- ($JSON ||= __PACKAGE__->new->utf8)->decode(@_);
-}
-
-# Obsoleted
-
-sub to_json($) {
- Carp::croak ("JSON::PP::to_json has been renamed to encode_json.");
-}
-
-
-sub from_json($) {
- Carp::croak ("JSON::PP::from_json has been renamed to decode_json.");
-}
-
-
-# Methods
-
-sub new {
- my $class = shift;
- my $self = {
- max_depth => 512,
- max_size => 0,
- indent_length => 3,
- };
-
- bless $self, $class;
-}
-
-
-sub encode {
- return $_[0]->PP_encode_json($_[1]);
-}
-
-
-sub decode {
- return $_[0]->PP_decode_json($_[1], 0x00000000);
-}
-
-
-sub decode_prefix {
- return $_[0]->PP_decode_json($_[1], 0x00000001);
-}
-
-
-# accessor
-
-
-# pretty printing
-
-sub pretty {
- my ($self, $v) = @_;
- my $enable = defined $v ? $v : 1;
-
- if ($enable) { # indent_length(3) for JSON::XS compatibility
- $self->indent(1)->space_before(1)->space_after(1);
- }
- else {
- $self->indent(0)->space_before(0)->space_after(0);
- }
-
- $self;
-}
-
-# etc
-
-sub max_depth {
- my $max = defined $_[1] ? $_[1] : 0x80000000;
- $_[0]->{max_depth} = $max;
- $_[0];
-}
-
-
-sub get_max_depth { $_[0]->{max_depth}; }
-
-
-sub max_size {
- my $max = defined $_[1] ? $_[1] : 0;
- $_[0]->{max_size} = $max;
- $_[0];
-}
-
-
-sub get_max_size { $_[0]->{max_size}; }
-
-
-sub filter_json_object {
- if (defined $_[1] and ref $_[1] eq 'CODE') {
- $_[0]->{cb_object} = $_[1];
- } else {
- delete $_[0]->{cb_object};
- }
- $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
- $_[0];
-}
-
-sub filter_json_single_key_object {
- if (@_ == 1 or @_ > 3) {
- Carp::croak("Usage: JSON::PP::filter_json_single_key_object(self, key, callback = undef)");
- }
- if (defined $_[2] and ref $_[2] eq 'CODE') {
- $_[0]->{cb_sk_object}->{$_[1]} = $_[2];
- } else {
- delete $_[0]->{cb_sk_object}->{$_[1]};
- delete $_[0]->{cb_sk_object} unless %{$_[0]->{cb_sk_object} || {}};
- }
- $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
- $_[0];
-}
-
-sub indent_length {
- if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) {
- Carp::carp "The acceptable range of indent_length() is 0 to 15.";
- }
- else {
- $_[0]->{indent_length} = $_[1];
- }
- $_[0];
-}
-
-sub get_indent_length {
- $_[0]->{indent_length};
-}
-
-sub sort_by {
- $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1;
- $_[0];
-}
-
-sub allow_bigint {
- Carp::carp("allow_bigint() is obsoleted. use allow_bignum() instead.");
- $_[0]->allow_bignum;
-}
-
-###############################
-
-###
-### Perl => JSON
-###
-
-
-{ # Convert
-
- my $max_depth;
- my $indent;
- my $ascii;
- my $latin1;
- my $utf8;
- my $space_before;
- my $space_after;
- my $canonical;
- my $allow_blessed;
- my $convert_blessed;
-
- my $indent_length;
- my $escape_slash;
- my $bignum;
- my $as_nonblessed;
-
- my $depth;
- my $indent_count;
- my $keysort;
-
-
- sub PP_encode_json {
- my $self = shift;
- my $obj = shift;
-
- $indent_count = 0;
- $depth = 0;
-
- my $props = $self->{PROPS};
-
- ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed,
- $convert_blessed, $escape_slash, $bignum, $as_nonblessed)
- = @{$props}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED,
- P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED];
-
- ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/};
-
- $keysort = $canonical ? sub { $a cmp $b } : undef;
-
- if ($self->{sort_by}) {
- $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by}
- : $self->{sort_by} =~ /\D+/ ? $self->{sort_by}
- : sub { $a cmp $b };
- }
-
- encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)")
- if(!ref $obj and !$props->[ P_ALLOW_NONREF ]);
-
- my $str = $self->object_to_json($obj);
-
- $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible
-
- unless ($ascii or $latin1 or $utf8) {
- utf8::upgrade($str);
- }
-
- if ($props->[ P_SHRINK ]) {
- utf8::downgrade($str, 1);
- }
-
- return $str;
- }
-
-
- sub object_to_json {
- my ($self, $obj) = @_;
- my $type = ref($obj);
-
- if($type eq 'HASH'){
- return $self->hash_to_json($obj);
- }
- elsif($type eq 'ARRAY'){
- return $self->array_to_json($obj);
- }
- elsif ($type) { # blessed object?
- if (blessed($obj)) {
-
- return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') );
-
- if ( $convert_blessed and $obj->can('TO_JSON') ) {
- my $result = $obj->TO_JSON();
- if ( defined $result and ref( $result ) ) {
- if ( refaddr( $obj ) eq refaddr( $result ) ) {
- encode_error( sprintf(
- "%s::TO_JSON method returned same object as was passed instead of a new one",
- ref $obj
- ) );
- }
- }
-
- return $self->object_to_json( $result );
- }
-
- return "$obj" if ( $bignum and _is_bignum($obj) );
-
- if ($allow_blessed) {
- return $self->blessed_to_json($obj) if ($as_nonblessed); # will be removed.
- return 'null';
- }
- encode_error( sprintf("encountered object '%s', but neither allow_blessed "
- . "nor convert_blessed settings are enabled", $obj)
- );
- }
- else {
- return $self->value_to_json($obj);
- }
- }
- else{
- return $self->value_to_json($obj);
- }
- }
-
-
- sub hash_to_json {
- my ($self, $obj) = @_;
- my @res;
-
- encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
- if (++$depth > $max_depth);
-
- my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
- my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : '');
-
- for my $k ( _sort( $obj ) ) {
- if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized
- push @res, $self->string_to_json( $k )
- . $del
- . ( ref $obj->{$k} ? $self->object_to_json( $obj->{$k} ) : $self->value_to_json( $obj->{$k} ) );
- }
-
- --$depth;
- $self->_down_indent() if ($indent);
-
- return '{}' unless @res;
- return '{' . $pre . join( ",$pre", @res ) . $post . '}';
- }
-
-
- sub array_to_json {
- my ($self, $obj) = @_;
- my @res;
-
- encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
- if (++$depth > $max_depth);
-
- my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
-
- for my $v (@$obj){
- push @res, ref($v) ? $self->object_to_json($v) : $self->value_to_json($v);
- }
-
- --$depth;
- $self->_down_indent() if ($indent);
-
- return '[]' unless @res;
- return '[' . $pre . join( ",$pre", @res ) . $post . ']';
- }
-
- sub _looks_like_number {
- my $value = shift;
- if (USE_B) {
- my $b_obj = B::svref_2object(\$value);
- my $flags = $b_obj->FLAGS;
- return 1 if $flags & ( B::SVp_IOK() | B::SVp_NOK() ) and !( $flags & B::SVp_POK() );
- return;
- } else {
- no warnings 'numeric';
- # detect numbers
- # string & "" -> ""
- # number & "" -> 0 (with warning)
- # nan and inf can detect as numbers, so check with * 0
- return unless length((my $dummy = "") & $value);
- return unless 0 + $value eq $value;
- return 1 if $value * 0 == 0;
- return -1; # inf/nan
- }
- }
-
- sub value_to_json {
- my ($self, $value) = @_;
-
- return 'null' if(!defined $value);
-
- my $type = ref($value);
-
- if (!$type) {
- if (_looks_like_number($value)) {
- return $value;
- }
- return $self->string_to_json($value);
- }
- elsif( blessed($value) and $value->isa('JSON::PP::Boolean') ){
- return $$value == 1 ? 'true' : 'false';
- }
- else {
- if ((overload::StrVal($value) =~ /=(\w+)/)[0]) {
- return $self->value_to_json("$value");
- }
-
- if ($type eq 'SCALAR' and defined $$value) {
- return $$value eq '1' ? 'true'
- : $$value eq '0' ? 'false'
- : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null'
- : encode_error("cannot encode reference to scalar");
- }
-
- if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) {
- return 'null';
- }
- else {
- if ( $type eq 'SCALAR' or $type eq 'REF' ) {
- encode_error("cannot encode reference to scalar");
- }
- else {
- encode_error("encountered $value, but JSON can only represent references to arrays or hashes");
- }
- }
-
- }
- }
-
-
- my %esc = (
- "\n" => '\n',
- "\r" => '\r',
- "\t" => '\t',
- "\f" => '\f',
- "\b" => '\b',
- "\"" => '\"',
- "\\" => '\\\\',
- "\'" => '\\\'',
- );
-
-
- sub string_to_json {
- my ($self, $arg) = @_;
-
- $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g;
- $arg =~ s/\//\\\//g if ($escape_slash);
- $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg;
-
- if ($ascii) {
- $arg = JSON_PP_encode_ascii($arg);
- }
-
- if ($latin1) {
- $arg = JSON_PP_encode_latin1($arg);
- }
-
- if ($utf8) {
- utf8::encode($arg);
- }
-
- return '"' . $arg . '"';
- }
-
-
- sub blessed_to_json {
- my $reftype = reftype($_[1]) || '';
- if ($reftype eq 'HASH') {
- return $_[0]->hash_to_json($_[1]);
- }
- elsif ($reftype eq 'ARRAY') {
- return $_[0]->array_to_json($_[1]);
- }
- else {
- return 'null';
- }
- }
-
-
- sub encode_error {
- my $error = shift;
- Carp::croak "$error";
- }
-
-
- sub _sort {
- defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]};
- }
-
-
- sub _up_indent {
- my $self = shift;
- my $space = ' ' x $indent_length;
-
- my ($pre,$post) = ('','');
-
- $post = "\n" . $space x $indent_count;
-
- $indent_count++;
-
- $pre = "\n" . $space x $indent_count;
-
- return ($pre,$post);
- }
-
-
- sub _down_indent { $indent_count--; }
-
-
- sub PP_encode_box {
- {
- depth => $depth,
- indent_count => $indent_count,
- };
- }
-
-} # Convert
-
-
-sub _encode_ascii {
- join('',
- map {
- $_ <= 127 ?
- chr($_) :
- $_ <= 65535 ?
- sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
- } unpack('U*', $_[0])
- );
-}
-
-
-sub _encode_latin1 {
- join('',
- map {
- $_ <= 255 ?
- chr($_) :
- $_ <= 65535 ?
- sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
- } unpack('U*', $_[0])
- );
-}
-
-
-sub _encode_surrogates { # from perlunicode
- my $uni = $_[0] - 0x10000;
- return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00);
-}
-
-
-sub _is_bignum {
- $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat');
-}
-
-
-
-#
-# JSON => Perl
-#
-
-my $max_intsize;
-
-BEGIN {
- my $checkint = 1111;
- for my $d (5..64) {
- $checkint .= 1;
- my $int = eval qq| $checkint |;
- if ($int =~ /[eE]/) {
- $max_intsize = $d - 1;
- last;
- }
- }
-}
-
-{ # PARSE
-
- my %escapes = ( # by Jeremy Muhlich <jmuhlich [at] bitflood.org>
- b => "\x8",
- t => "\x9",
- n => "\xA",
- f => "\xC",
- r => "\xD",
- '\\' => '\\',
- '"' => '"',
- '/' => '/',
- );
-
- my $text; # json data
- my $at; # offset
- my $ch; # first character
- my $len; # text length (changed according to UTF8 or NON UTF8)
- # INTERNAL
- my $depth; # nest counter
- my $encoding; # json text encoding
- my $is_valid_utf8; # temp variable
- my $utf8_len; # utf8 byte length
- # FLAGS
- my $utf8; # must be utf8
- my $max_depth; # max nest number of objects and arrays
- my $max_size;
- my $relaxed;
- my $cb_object;
- my $cb_sk_object;
-
- my $F_HOOK;
-
- my $allow_bignum; # using Math::BigInt/BigFloat
- my $singlequote; # loosely quoting
- my $loose; #
- my $allow_barekey; # bareKey
-
- sub _detect_utf_encoding {
- my $text = shift;
- my @octets = unpack('C4', $text);
- return 'unknown' unless defined $octets[3];
- return ( $octets[0] and $octets[1]) ? 'UTF-8'
- : (!$octets[0] and $octets[1]) ? 'UTF-16BE'
- : (!$octets[0] and !$octets[1]) ? 'UTF-32BE'
- : ( $octets[2] ) ? 'UTF-16LE'
- : (!$octets[2] ) ? 'UTF-32LE'
- : 'unknown';
- }
-
- sub PP_decode_json {
- my ($self, $want_offset);
-
- ($self, $text, $want_offset) = @_;
-
- ($at, $ch, $depth) = (0, '', 0);
-
- if ( !defined $text or ref $text ) {
- decode_error("malformed JSON string, neither array, object, number, string or atom");
- }
-
- my $props = $self->{PROPS};
-
- ($utf8, $relaxed, $loose, $allow_bignum, $allow_barekey, $singlequote)
- = @{$props}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE];
-
- if ( $utf8 ) {
- $encoding = _detect_utf_encoding($text);
- if ($encoding ne 'UTF-8' and $encoding ne 'unknown') {
- require Encode;
- Encode::from_to($text, $encoding, 'utf-8');
- } else {
- utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry");
- }
- }
- else {
- utf8::upgrade( $text );
- utf8::encode( $text );
- }
-
- $len = length $text;
-
- ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK)
- = @{$self}{qw/max_depth max_size cb_object cb_sk_object F_HOOK/};
-
- if ($max_size > 1) {
- use bytes;
- my $bytes = length $text;
- decode_error(
- sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s"
- , $bytes, $max_size), 1
- ) if ($bytes > $max_size);
- }
-
- white(); # remove head white space
-
- decode_error("malformed JSON string, neither array, object, number, string or atom") unless defined $ch; # Is there a first character for JSON structure?
-
- my $result = value();
-
- if ( !$props->[ P_ALLOW_NONREF ] and !ref $result ) {
- decode_error(
- 'JSON text must be an object or array (but found number, string, true, false or null,'
- . ' use allow_nonref to allow this)', 1);
- }
-
- Carp::croak('something wrong.') if $len < $at; # we won't arrive here.
-
- my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length
-
- white(); # remove tail white space
-
- return ( $result, $consumed ) if $want_offset; # all right if decode_prefix
-
- decode_error("garbage after JSON object") if defined $ch;
-
- $result;
- }
-
-
- sub next_chr {
- return $ch = undef if($at >= $len);
- $ch = substr($text, $at++, 1);
- }
-
-
- sub value {
- white();
- return if(!defined $ch);
- return object() if($ch eq '{');
- return array() if($ch eq '[');
- return string() if($ch eq '"' or ($singlequote and $ch eq "'"));
- return number() if($ch =~ /[0-9]/ or $ch eq '-');
- return word();
- }
-
- sub string {
- my $utf16;
- my $is_utf8;
-
- ($is_valid_utf8, $utf8_len) = ('', 0);
-
- my $s = ''; # basically UTF8 flag on
-
- if($ch eq '"' or ($singlequote and $ch eq "'")){
- my $boundChar = $ch;
-
- OUTER: while( defined(next_chr()) ){
-
- if($ch eq $boundChar){
- next_chr();
-
- if ($utf16) {
- decode_error("missing low surrogate character in surrogate pair");
- }
-
- utf8::decode($s) if($is_utf8);
-
- return $s;
- }
- elsif($ch eq '\\'){
- next_chr();
- if(exists $escapes{$ch}){
- $s .= $escapes{$ch};
- }
- elsif($ch eq 'u'){ # UNICODE handling
- my $u = '';
-
- for(1..4){
- $ch = next_chr();
- last OUTER if($ch !~ /[0-9a-fA-F]/);
- $u .= $ch;
- }
-
- # U+D800 - U+DBFF
- if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate?
- $utf16 = $u;
- }
- # U+DC00 - U+DFFF
- elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate?
- unless (defined $utf16) {
- decode_error("missing high surrogate character in surrogate pair");
- }
- $is_utf8 = 1;
- $s .= JSON_PP_decode_surrogates($utf16, $u) || next;
- $utf16 = undef;
- }
- else {
- if (defined $utf16) {
- decode_error("surrogate pair expected");
- }
-
- if ( ( my $hex = hex( $u ) ) > 127 ) {
- $is_utf8 = 1;
- $s .= JSON_PP_decode_unicode($u) || next;
- }
- else {
- $s .= chr $hex;
- }
- }
-
- }
- else{
- unless ($loose) {
- $at -= 2;
- decode_error('illegal backslash escape sequence in string');
- }
- $s .= $ch;
- }
- }
- else{
-
- if ( ord $ch > 127 ) {
- unless( $ch = is_valid_utf8($ch) ) {
- $at -= 1;
- decode_error("malformed UTF-8 character in JSON string");
- }
- else {
- $at += $utf8_len - 1;
- }
-
- $is_utf8 = 1;
- }
-
- if (!$loose) {
- if ($ch =~ /[\x00-\x1f\x22\x5c]/) { # '/' ok
- $at--;
- decode_error('invalid character encountered while parsing JSON string');
- }
- }
-
- $s .= $ch;
- }
- }
- }
-
- decode_error("unexpected end of string while parsing JSON string");
- }
-
-
- sub white {
- while( defined $ch ){
- if($ch eq '' or $ch =~ /\A[ \t\r\n]\z/){
- next_chr();
- }
- elsif($relaxed and $ch eq '/'){
- next_chr();
- if(defined $ch and $ch eq '/'){
- 1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r");
- }
- elsif(defined $ch and $ch eq '*'){
- next_chr();
- while(1){
- if(defined $ch){
- if($ch eq '*'){
- if(defined(next_chr()) and $ch eq '/'){
- next_chr();
- last;
- }
- }
- else{
- next_chr();
- }
- }
- else{
- decode_error("Unterminated comment");
- }
- }
- next;
- }
- else{
- $at--;
- decode_error("malformed JSON string, neither array, object, number, string or atom");
- }
- }
- else{
- if ($relaxed and $ch eq '#') { # correctly?
- pos($text) = $at;
- $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g;
- $at = pos($text);
- next_chr;
- next;
- }
-
- last;
- }
- }
- }
-
-
- sub array {
- my $a = $_[0] || []; # you can use this code to use another array ref object.
-
- decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
- if (++$depth > $max_depth);
-
- next_chr();
- white();
-
- if(defined $ch and $ch eq ']'){
- --$depth;
- next_chr();
- return $a;
- }
- else {
- while(defined($ch)){
- push @$a, value();
-
- white();
-
- if (!defined $ch) {
- last;
- }
-
- if($ch eq ']'){
- --$depth;
- next_chr();
- return $a;
- }
-
- if($ch ne ','){
- last;
- }
-
- next_chr();
- white();
-
- if ($relaxed and $ch eq ']') {
- --$depth;
- next_chr();
- return $a;
- }
-
- }
- }
-
- $at-- if defined $ch and $ch ne '';
- decode_error(", or ] expected while parsing array");
- }
-
-
- sub object {
- my $o = $_[0] || {}; # you can use this code to use another hash ref object.
- my $k;
-
- decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
- if (++$depth > $max_depth);
- next_chr();
- white();
-
- if(defined $ch and $ch eq '}'){
- --$depth;
- next_chr();
- if ($F_HOOK) {
- return _json_object_hook($o);
- }
- return $o;
- }
- else {
- while (defined $ch) {
- $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string();
- white();
-
- if(!defined $ch or $ch ne ':'){
- $at--;
- decode_error("':' expected");
- }
-
- next_chr();
- $o->{$k} = value();
- white();
-
- last if (!defined $ch);
-
- if($ch eq '}'){
- --$depth;
- next_chr();
- if ($F_HOOK) {
- return _json_object_hook($o);
- }
- return $o;
- }
-
- if($ch ne ','){
- last;
- }
-
- next_chr();
- white();
-
- if ($relaxed and $ch eq '}') {
- --$depth;
- next_chr();
- if ($F_HOOK) {
- return _json_object_hook($o);
- }
- return $o;
- }
-
- }
-
- }
-
- $at-- if defined $ch and $ch ne '';
- decode_error(", or } expected while parsing object/hash");
- }
-
-
- sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition
- my $key;
- while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){
- $key .= $ch;
- next_chr();
- }
- return $key;
- }
-
-
- sub word {
- my $word = substr($text,$at-1,4);
-
- if($word eq 'true'){
- $at += 3;
- next_chr;
- return $JSON::PP::true;
- }
- elsif($word eq 'null'){
- $at += 3;
- next_chr;
- return undef;
- }
- elsif($word eq 'fals'){
- $at += 3;
- if(substr($text,$at,1) eq 'e'){
- $at++;
- next_chr;
- return $JSON::PP::false;
- }
- }
-
- $at--; # for decode_error report
-
- decode_error("'null' expected") if ($word =~ /^n/);
- decode_error("'true' expected") if ($word =~ /^t/);
- decode_error("'false' expected") if ($word =~ /^f/);
- decode_error("malformed JSON string, neither array, object, number, string or atom");
- }
-
-
- sub number {
- my $n = '';
- my $v;
- my $is_dec;
- my $is_exp;
-
- if($ch eq '-'){
- $n = '-';
- next_chr;
- if (!defined $ch or $ch !~ /\d/) {
- decode_error("malformed number (no digits after initial minus)");
- }
- }
-
- # According to RFC4627, hex or oct digits are invalid.
- if($ch eq '0'){
- my $peek = substr($text,$at,1);
- if($peek =~ /^[0-9a-dfA-DF]/){ # e may be valid (exponential)
- decode_error("malformed number (leading zero must not be followed by another digit)");
- }
- $n .= $ch;
- next_chr;
- }
-
- while(defined $ch and $ch =~ /\d/){
- $n .= $ch;
- next_chr;
- }
-
- if(defined $ch and $ch eq '.'){
- $n .= '.';
- $is_dec = 1;
-
- next_chr;
- if (!defined $ch or $ch !~ /\d/) {
- decode_error("malformed number (no digits after decimal point)");
- }
- else {
- $n .= $ch;
- }
-
- while(defined(next_chr) and $ch =~ /\d/){
- $n .= $ch;
- }
- }
-
- if(defined $ch and ($ch eq 'e' or $ch eq 'E')){
- $n .= $ch;
- $is_exp = 1;
- next_chr;
-
- if(defined($ch) and ($ch eq '+' or $ch eq '-')){
- $n .= $ch;
- next_chr;
- if (!defined $ch or $ch =~ /\D/) {
- decode_error("malformed number (no digits after exp sign)");
- }
- $n .= $ch;
- }
- elsif(defined($ch) and $ch =~ /\d/){
- $n .= $ch;
- }
- else {
- decode_error("malformed number (no digits after exp sign)");
- }
-
- while(defined(next_chr) and $ch =~ /\d/){
- $n .= $ch;
- }
-
- }
-
- $v .= $n;
-
- if ($is_dec or $is_exp) {
- if ($allow_bignum) {
- require Math::BigFloat;
- return Math::BigFloat->new($v);
- }
- } else {
- if (length $v > $max_intsize) {
- if ($allow_bignum) { # from Adam Sussman
- require Math::BigInt;
- return Math::BigInt->new($v);
- }
- else {
- return "$v";
- }
- }
- }
-
- return $is_dec ? $v/1.0 : 0+$v;
- }
-
-
- sub is_valid_utf8 {
-
- $utf8_len = $_[0] =~ /[\x00-\x7F]/ ? 1
- : $_[0] =~ /[\xC2-\xDF]/ ? 2
- : $_[0] =~ /[\xE0-\xEF]/ ? 3
- : $_[0] =~ /[\xF0-\xF4]/ ? 4
- : 0
- ;
-
- return unless $utf8_len;
-
- my $is_valid_utf8 = substr($text, $at - 1, $utf8_len);
-
- return ( $is_valid_utf8 =~ /^(?:
- [\x00-\x7F]
- |[\xC2-\xDF][\x80-\xBF]
- |[\xE0][\xA0-\xBF][\x80-\xBF]
- |[\xE1-\xEC][\x80-\xBF][\x80-\xBF]
- |[\xED][\x80-\x9F][\x80-\xBF]
- |[\xEE-\xEF][\x80-\xBF][\x80-\xBF]
- |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF]
- |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]
- |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF]
- )$/x ) ? $is_valid_utf8 : '';
- }
-
-
- sub decode_error {
- my $error = shift;
- my $no_rep = shift;
- my $str = defined $text ? substr($text, $at) : '';
- my $mess = '';
- my $type = 'U*';
-
- if ( OLD_PERL ) {
- my $type = $] < 5.006 ? 'C*'
- : utf8::is_utf8( $str ) ? 'U*' # 5.6
- : 'C*'
- ;
- }
-
- for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ?
- $mess .= $c == 0x07 ? '\a'
- : $c == 0x09 ? '\t'
- : $c == 0x0a ? '\n'
- : $c == 0x0d ? '\r'
- : $c == 0x0c ? '\f'
- : $c < 0x20 ? sprintf('\x{%x}', $c)
- : $c == 0x5c ? '\\\\'
- : $c < 0x80 ? chr($c)
- : sprintf('\x{%x}', $c)
- ;
- if ( length $mess >= 20 ) {
- $mess .= '...';
- last;
- }
- }
-
- unless ( length $mess ) {
- $mess = '(end of string)';
- }
-
- Carp::croak (
- $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")"
- );
-
- }
-
-
- sub _json_object_hook {
- my $o = $_[0];
- my @ks = keys %{$o};
-
- if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) {
- my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} );
- if (@val == 1) {
- return $val[0];
- }
- }
-
- my @val = $cb_object->($o) if ($cb_object);
- if (@val == 0 or @val > 1) {
- return $o;
- }
- else {
- return $val[0];
- }
- }
-
-
- sub PP_decode_box {
- {
- text => $text,
- at => $at,
- ch => $ch,
- len => $len,
- depth => $depth,
- encoding => $encoding,
- is_valid_utf8 => $is_valid_utf8,
- };
- }
-
-} # PARSE
-
-
-sub _decode_surrogates { # from perlunicode
- my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00);
- my $un = pack('U*', $uni);
- utf8::encode( $un );
- return $un;
-}
-
-
-sub _decode_unicode {
- my $un = pack('U', hex shift);
- utf8::encode( $un );
- return $un;
-}
-
-#
-# Setup for various Perl versions (the code from JSON::PP58)
-#
-
-BEGIN {
-
- unless ( defined &utf8::is_utf8 ) {
- require Encode;
- *utf8::is_utf8 = *Encode::is_utf8;
- }
-
- if ( !OLD_PERL ) {
- *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii;
- *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1;
- *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates;
- *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode;
-
- if ($] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken.
- package # hide from PAUSE
- JSON::PP;
- require subs;
- subs->import('join');
- eval q|
- sub join {
- return '' if (@_ < 2);
- my $j = shift;
- my $str = shift;
- for (@_) { $str .= $j . $_; }
- return $str;
- }
- |;
- }
- }
-
-
- sub JSON::PP::incr_parse {
- local $Carp::CarpLevel = 1;
- ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ );
- }
-
-
- sub JSON::PP::incr_skip {
- ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip;
- }
-
-
- sub JSON::PP::incr_reset {
- ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset;
- }
-
- eval q{
- sub JSON::PP::incr_text : lvalue {
- $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new;
-
- if ( $_[0]->{_incr_parser}->{incr_pos} ) {
- Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
- }
- $_[0]->{_incr_parser}->{incr_text};
- }
- } if ( $] >= 5.006 );
-
-} # Setup for various Perl versions (the code from JSON::PP58)
-
-
-###############################
-# Utilities
-#
-
-BEGIN {
- eval 'require Scalar::Util';
- unless($@){
- *JSON::PP::blessed = \&Scalar::Util::blessed;
- *JSON::PP::reftype = \&Scalar::Util::reftype;
- *JSON::PP::refaddr = \&Scalar::Util::refaddr;
- }
- else{ # This code is from Scalar::Util.
- # warn $@;
- eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }';
- *JSON::PP::blessed = sub {
- local($@, $SIG{__DIE__}, $SIG{__WARN__});
- ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef;
- };
- require B;
- my %tmap = qw(
- B::NULL SCALAR
- B::HV HASH
- B::AV ARRAY
- B::CV CODE
- B::IO IO
- B::GV GLOB
- B::REGEXP REGEXP
- );
- *JSON::PP::reftype = sub {
- my $r = shift;
-
- return undef unless length(ref($r));
-
- my $t = ref(B::svref_2object($r));
-
- return
- exists $tmap{$t} ? $tmap{$t}
- : length(ref($$r)) ? 'REF'
- : 'SCALAR';
- };
- *JSON::PP::refaddr = sub {
- return undef unless length(ref($_[0]));
-
- my $addr;
- if(defined(my $pkg = blessed($_[0]))) {
- $addr .= bless $_[0], 'Scalar::Util::Fake';
- bless $_[0], $pkg;
- }
- else {
- $addr .= $_[0]
- }
-
- $addr =~ /0x(\w+)/;
- local $^W;
- #no warnings 'portable';
- hex($1);
- }
- }
-}
-
-
-# shamelessly copied and modified from JSON::XS code.
-
-$JSON::PP::true = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
-$JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };
-
-sub is_bool { defined $_[0] and UNIVERSAL::isa($_[0], "JSON::PP::Boolean"); }
-
-sub true { $JSON::PP::true }
-sub false { $JSON::PP::false }
-sub null { undef; }
-
-###############################
-
-package # hide from PAUSE
- JSON::PP::IncrParser;
-
-use strict;
-
-use constant INCR_M_WS => 0; # initial whitespace skipping
-use constant INCR_M_STR => 1; # inside string
-use constant INCR_M_BS => 2; # inside backslash
-use constant INCR_M_JSON => 3; # outside anything, count nesting
-use constant INCR_M_C0 => 4;
-use constant INCR_M_C1 => 5;
-
-$JSON::backportPP::IncrParser::VERSION = '1.01';
-
-sub new {
- my ( $class ) = @_;
-
- bless {
- incr_nest => 0,
- incr_text => undef,
- incr_pos => 0,
- incr_mode => 0,
- }, $class;
-}
-
-
-sub incr_parse {
- my ( $self, $coder, $text ) = @_;
-
- $self->{incr_text} = '' unless ( defined $self->{incr_text} );
-
- if ( defined $text ) {
- if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) {
- utf8::upgrade( $self->{incr_text} ) ;
- utf8::decode( $self->{incr_text} ) ;
- }
- $self->{incr_text} .= $text;
- }
-
- if ( defined wantarray ) {
- my $max_size = $coder->get_max_size;
- my $p = $self->{incr_pos};
- my @ret;
- {
- do {
- unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
- $self->_incr_parse( $coder );
-
- if ( $max_size and $self->{incr_pos} > $max_size ) {
- Carp::croak("attempted decode of JSON text of $self->{incr_pos} bytes size, but max_size is set to $max_size");
- }
- unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
- # as an optimisation, do not accumulate white space in the incr buffer
- if ( $self->{incr_mode} == INCR_M_WS and $self->{incr_pos} ) {
- $self->{incr_pos} = 0;
- $self->{incr_text} = '';
- }
- last;
- }
- }
-
- my ($obj, $offset) = $coder->PP_decode_json( $self->{incr_text}, 0x00000001 );
- push @ret, $obj;
- use bytes;
- $self->{incr_text} = substr( $self->{incr_text}, $offset || 0 );
- $self->{incr_pos} = 0;
- $self->{incr_nest} = 0;
- $self->{incr_mode} = 0;
- last unless wantarray;
- } while ( wantarray );
- }
-
- if ( wantarray ) {
- return @ret;
- }
- else { # in scalar context
- return $ret[0] ? $ret[0] : undef;
- }
- }
-}
-
-
-sub _incr_parse {
- my ($self, $coder) = @_;
- my $text = $self->{incr_text};
- my $len = length $text;
- my $p = $self->{incr_pos};
-
-INCR_PARSE:
- while ( $len > $p ) {
- my $s = substr( $text, $p, 1 );
- last INCR_PARSE unless defined $s;
- my $mode = $self->{incr_mode};
-
- if ( $mode == INCR_M_WS ) {
- while ( $len > $p ) {
- $s = substr( $text, $p, 1 );
- last INCR_PARSE unless defined $s;
- if ( ord($s) > 0x20 ) {
- if ( $s eq '#' ) {
- $self->{incr_mode} = INCR_M_C0;
- redo INCR_PARSE;
- } else {
- $self->{incr_mode} = INCR_M_JSON;
- redo INCR_PARSE;
- }
- }
- $p++;
- }
- } elsif ( $mode == INCR_M_BS ) {
- $p++;
- $self->{incr_mode} = INCR_M_STR;
- redo INCR_PARSE;
- } elsif ( $mode == INCR_M_C0 or $mode == INCR_M_C1 ) {
- while ( $len > $p ) {
- $s = substr( $text, $p, 1 );
- last INCR_PARSE unless defined $s;
- if ( $s eq "\n" ) {
- $self->{incr_mode} = $self->{incr_mode} == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON;
- last;
- }
- $p++;
- }
- next;
- } elsif ( $mode == INCR_M_STR ) {
- while ( $len > $p ) {
- $s = substr( $text, $p, 1 );
- last INCR_PARSE unless defined $s;
- if ( $s eq '"' ) {
- $p++;
- $self->{incr_mode} = INCR_M_JSON;
-
- last INCR_PARSE unless $self->{incr_nest};
- redo INCR_PARSE;
- }
- elsif ( $s eq '\\' ) {
- $p++;
- if ( !defined substr($text, $p, 1) ) {
- $self->{incr_mode} = INCR_M_BS;
- last INCR_PARSE;
- }
- }
- $p++;
- }
- } elsif ( $mode == INCR_M_JSON ) {
- while ( $len > $p ) {
- $s = substr( $text, $p++, 1 );
- if ( $s eq "\x00" ) {
- $p--;
- last INCR_PARSE;
- } elsif ( $s eq "\x09" or $s eq "\x0a" or $s eq "\x0d" or $s eq "\x20" ) {
- if ( !$self->{incr_nest} ) {
- $p--; # do not eat the whitespace, let the next round do it
- last INCR_PARSE;
- }
- next;
- } elsif ( $s eq '"' ) {
- $self->{incr_mode} = INCR_M_STR;
- redo INCR_PARSE;
- } elsif ( $s eq '[' or $s eq '{' ) {
- if ( ++$self->{incr_nest} > $coder->get_max_depth ) {
- Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)');
- }
- next;
- } elsif ( $s eq ']' or $s eq '}' ) {
- if ( --$self->{incr_nest} <= 0 ) {
- last INCR_PARSE;
- }
- } elsif ( $s eq '#' ) {
- $self->{incr_mode} = INCR_M_C1;
- redo INCR_PARSE;
- }
- }
- }
- }
-
- $self->{incr_pos} = $p;
- $self->{incr_parsing} = $p ? 1 : 0; # for backward compatibility
-}
-
-
-sub incr_text {
- if ( $_[0]->{incr_pos} ) {
- Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
- }
- $_[0]->{incr_text};
-}
-
-
-sub incr_skip {
- my $self = shift;
- $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_pos} );
- $self->{incr_pos} = 0;
- $self->{incr_mode} = 0;
- $self->{incr_nest} = 0;
-}
-
-
-sub incr_reset {
- my $self = shift;
- $self->{incr_text} = undef;
- $self->{incr_pos} = 0;
- $self->{incr_mode} = 0;
- $self->{incr_nest} = 0;
-}
-
-###############################
-
-
-1;
-__END__
-=pod
-
-=head1 NAME
-
-JSON::PP - JSON::XS compatible pure-Perl module.
-
-=head1 SYNOPSIS
-
- use JSON::PP;
-
- # exported functions, they croak on error
- # and expect/generate UTF-8
-
- $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
- $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text;
-
- # OO-interface
-
- $json = JSON::PP->new->ascii->pretty->allow_nonref;
-
- $pretty_printed_json_text = $json->encode( $perl_scalar );
- $perl_scalar = $json->decode( $json_text );
-
- # Note that JSON version 2.0 and above will automatically use
- # JSON::XS or JSON::PP, so you should be able to just:
-
- use JSON;
-
-
-=head1 VERSION
-
- 2.91_04
-
-=head1 DESCRIPTION
-
-JSON::PP is a pure perl JSON decoder/encoder (as of RFC4627, which
-we know is obsolete but we still stick to; see below for an option
-to support part of RFC7159), and (almost) compatible to much
-faster L<JSON::XS> written by Marc Lehmann in C. JSON::PP works as
-a fallback module when you use L<JSON> module without having
-installed JSON::XS.
-
-Because of this fallback feature of JSON.pm, JSON::PP tries not to
-be more JavaScript-friendly than JSON::XS (i.e. not to escape extra
-characters such as U+2028 and U+2029 nor support RFC7159/ECMA-404),
-in order for you not to lose such JavaScript-friendliness silently
-when you use JSON.pm and install JSON::XS for speed or by accident.
-If you need JavaScript-friendly RFC7159-compliant pure perl module,
-try L<JSON::Tiny>, which is derived from L<Mojolicious> web
-framework and is also smaller and faster than JSON::PP.
-
-JSON::PP has been in the Perl core since Perl 5.14, mainly for
-CPAN toolchain modules to parse META.json.
-
-=head1 FUNCTIONAL INTERFACE
-
-This section is taken from JSON::XS almost verbatim. C<encode_json>
-and C<decode_json> are exported by default.
-
-=head2 encode_json
-
- $json_text = encode_json $perl_scalar
-
-Converts the given Perl data structure to a UTF-8 encoded, binary string
-(that is, the string contains octets only). Croaks on error.
-
-This function call is functionally identical to:
-
- $json_text = JSON::PP->new->utf8->encode($perl_scalar)
-
-Except being faster.
-
-=head2 decode_json
-
- $perl_scalar = decode_json $json_text
-
-The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
-to parse that as an UTF-8 encoded JSON text, returning the resulting
-reference. Croaks on error.
-
-This function call is functionally identical to:
-
- $perl_scalar = JSON::PP->new->utf8->decode($json_text)
-
-Except being faster.
-
-=head2 JSON::PP::is_bool
-
- $is_boolean = JSON::PP::is_bool($scalar)
-
-Returns true if the passed scalar represents either JSON::PP::true or
-JSON::PP::false, two constants that act like C<1> and C<0> respectively
-and are also used to represent JSON C<true> and C<false> in Perl strings.
-
-See L<MAPPING>, below, for more information on how JSON values are mapped to
-Perl.
-
-=head1 OBJECT-ORIENTED INTERFACE
-
-This section is also taken from JSON::XS.
-
-The object oriented interface lets you configure your own encoding or
-decoding style, within the limits of supported formats.
-
-=head2 new
-
- $json = JSON::PP->new
-
-Creates a new JSON::PP object that can be used to de/encode JSON
-strings. All boolean flags described below are by default I<disabled>.
-
-The mutators for flags all return the JSON::PP object again and thus calls can
-be chained:
-
- my $json = JSON::PP->new->utf8->space_after->encode({a => [1,2]})
- => {"a": [1, 2]}
-
-=head2 ascii
-
- $json = $json->ascii([$enable])
-
- $enabled = $json->get_ascii
-
-If C<$enable> is true (or missing), then the C<encode> method will not
-generate characters outside the code range C<0..127> (which is ASCII). Any
-Unicode characters outside that range will be escaped using either a
-single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
-as per RFC4627. The resulting encoded JSON text can be treated as a native
-Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string,
-or any other superset of ASCII.
-
-If C<$enable> is false, then the C<encode> method will not escape Unicode
-characters unless required by the JSON syntax or other flags. This results
-in a faster and more compact format.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-The main use for this flag is to produce JSON texts that can be
-transmitted over a 7-bit channel, as the encoded JSON texts will not
-contain any 8 bit characters.
-
- JSON::PP->new->ascii(1)->encode([chr 0x10401])
- => ["\ud801\udc01"]
-
-=head2 latin1
-
- $json = $json->latin1([$enable])
-
- $enabled = $json->get_latin1
-
-If C<$enable> is true (or missing), then the C<encode> method will encode
-the resulting JSON text as latin1 (or iso-8859-1), escaping any characters
-outside the code range C<0..255>. The resulting string can be treated as a
-latin1-encoded JSON text or a native Unicode string. The C<decode> method
-will not be affected in any way by this flag, as C<decode> by default
-expects Unicode, which is a strict superset of latin1.
-
-If C<$enable> is false, then the C<encode> method will not escape Unicode
-characters unless required by the JSON syntax or other flags.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-The main use for this flag is efficiently encoding binary data as JSON
-text, as most octets will not be escaped, resulting in a smaller encoded
-size. The disadvantage is that the resulting JSON text is encoded
-in latin1 (and must correctly be treated as such when storing and
-transferring), a rare encoding for JSON. It is therefore most useful when
-you want to store data structures known to contain binary data efficiently
-in files or databases, not when talking to other JSON encoders/decoders.
-
- JSON::PP->new->latin1->encode (["\x{89}\x{abc}"]
- => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
-
-=head2 utf8
-
- $json = $json->utf8([$enable])
-
- $enabled = $json->get_utf8
-
-If C<$enable> is true (or missing), then the C<encode> method will encode
-the JSON result into UTF-8, as required by many protocols, while the
-C<decode> method expects to be handled an UTF-8-encoded string. Please
-note that UTF-8-encoded strings do not contain any characters outside the
-range C<0..255>, they are thus useful for bytewise/binary I/O. In future
-versions, enabling this option might enable autodetection of the UTF-16
-and UTF-32 encoding families, as described in RFC4627.
-
-If C<$enable> is false, then the C<encode> method will return the JSON
-string as a (non-encoded) Unicode string, while C<decode> expects thus a
-Unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs
-to be done yourself, e.g. using the Encode module.
-
-See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
-
-Example, output UTF-16BE-encoded JSON:
-
- use Encode;
- $jsontext = encode "UTF-16BE", JSON::PP->new->encode ($object);
-
-Example, decode UTF-32LE-encoded JSON:
-
- use Encode;
- $object = JSON::PP->new->decode (decode "UTF-32LE", $jsontext);
-
-=head2 pretty
-
- $json = $json->pretty([$enable])
-
-This enables (or disables) all of the C<indent>, C<space_before> and
-C<space_after> (and in the future possibly more) flags in one call to
-generate the most readable (or most compact) form possible.
-
-=head2 indent
-
- $json = $json->indent([$enable])
-
- $enabled = $json->get_indent
-
-If C<$enable> is true (or missing), then the C<encode> method will use a multiline
-format as output, putting every array member or object/hash key-value pair
-into its own line, indenting them properly.
-
-If C<$enable> is false, no newlines or indenting will be produced, and the
-resulting JSON text is guaranteed not to contain any C<newlines>.
-
-This setting has no effect when decoding JSON texts.
-
-The default indent space length is three.
-You can use C<indent_length> to change the length.
-
-=head2 space_before
-
- $json = $json->space_before([$enable])
-
- $enabled = $json->get_space_before
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space before the C<:> separating keys from values in JSON objects.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts. You will also
-most likely combine this setting with C<space_after>.
-
-Example, space_before enabled, space_after and indent disabled:
-
- {"key" :"value"}
-
-=head2 space_after
-
- $json = $json->space_after([$enable])
-
- $enabled = $json->get_space_after
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space after the C<:> separating keys from values in JSON objects
-and extra whitespace after the C<,> separating key-value pairs and array
-members.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts.
-
-Example, space_before and indent disabled, space_after enabled:
-
- {"key": "value"}
-
-=head2 relaxed
-
- $json = $json->relaxed([$enable])
-
- $enabled = $json->get_relaxed
-
-If C<$enable> is true (or missing), then C<decode> will accept some
-extensions to normal JSON syntax (see below). C<encode> will not be
-affected in anyway. I<Be aware that this option makes you accept invalid
-JSON texts as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration files,
-resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
-Currently accepted extensions are:
-
-=over 4
-
-=item * list items can have an end-comma
-
-JSON I<separates> array elements and key-value pairs with commas. This
-can be annoying if you write JSON texts manually and want to be able to
-quickly append elements, so this extension accepts comma at the end of
-such items not just between them:
-
- [
- 1,
- 2, <- this comma not normally allowed
- ]
- {
- "k1": "v1",
- "k2": "v2", <- this comma not normally allowed
- }
-
-=item * shell-style '#'-comments
-
-Whenever JSON allows whitespace, shell-style comments are additionally
-allowed. They are terminated by the first carriage-return or line-feed
-character, after which more white-space and comments are allowed.
-
- [
- 1, # this comment not allowed in JSON
- # neither this one...
- ]
-
-=item * C-style multiple-line '/* */'-comments (JSON::PP only)
-
-Whenever JSON allows whitespace, C-style multiple-line comments are additionally
-allowed. Everything between C</*> and C<*/> is a comment, after which
-more white-space and comments are allowed.
-
- [
- 1, /* this comment not allowed in JSON */
- /* neither this one... */
- ]
-
-=item * C++-style one-line '//'-comments (JSON::PP only)
-
-Whenever JSON allows whitespace, C++-style one-line comments are additionally
-allowed. They are terminated by the first carriage-return or line-feed
-character, after which more white-space and comments are allowed.
-
- [
- 1, // this comment not allowed in JSON
- // neither this one...
- ]
-
-=back
-
-=head2 canonical
-
- $json = $json->canonical([$enable])
-
- $enabled = $json->get_canonical
-
-If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
-by sorting their keys. This is adding a comparatively high overhead.
-
-If C<$enable> is false, then the C<encode> method will output key-value
-pairs in the order Perl stores them (which will likely change between runs
-of the same script, and can change even within the same run from 5.18
-onwards).
-
-This option is useful if you want the same data structure to be encoded as
-the same JSON text (given the same overall settings). If it is disabled,
-the same hash might be encoded differently even if contains the same data,
-as key-value pairs have no inherent ordering in Perl.
-
-This setting has no effect when decoding JSON texts.
-
-This setting has currently no effect on tied hashes.
-
-=head2 allow_nonref
-
- $json = $json->allow_nonref([$enable])
-
- $enabled = $json->get_allow_nonref
-
-If C<$enable> is true (or missing), then the C<encode> method can convert a
-non-reference into its corresponding string, number or null JSON value,
-which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
-values instead of croaking.
-
-If C<$enable> is false, then the C<encode> method will croak if it isn't
-passed an arrayref or hashref, as JSON texts must either be an object
-or array. Likewise, C<decode> will croak if given something that is not a
-JSON object or array.
-
-Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
-resulting in an invalid JSON text:
-
- JSON::PP->new->allow_nonref->encode ("Hello, World!")
- => "Hello, World!"
-
-=head2 allow_unknown
-
- $json = $json->allow_unknown ([$enable])
-
- $enabled = $json->get_allow_unknown
-
-If C<$enable> is true (or missing), then C<encode> will I<not> throw an
-exception when it encounters values it cannot represent in JSON (for
-example, filehandles) but instead will encode a JSON C<null> value. Note
-that blessed objects are not included here and are handled separately by
-c<allow_blessed>.
-
-If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters anything it cannot encode as JSON.
-
-This option does not affect C<decode> in any way, and it is recommended to
-leave it off unless you know your communications partner.
-
-=head2 allow_blessed
-
- $json = $json->allow_blessed([$enable])
-
- $enabled = $json->get_allow_blessed
-
-See L<OBJECT SERIALISATION> for details.
-
-If C<$enable> is true (or missing), then the C<encode> method will not
-barf when it encounters a blessed reference that it cannot convert
-otherwise. Instead, a JSON C<null> value is encoded instead of the object.
-
-If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters a blessed object that it cannot convert
-otherwise.
-
-This setting has no effect on C<decode>.
-
-=head2 convert_blessed
-
- $json = $json->convert_blessed([$enable])
-
- $enabled = $json->get_convert_blessed
-
-See L<OBJECT SERIALISATION> for details.
-
-If C<$enable> is true (or missing), then C<encode>, upon encountering a
-blessed object, will check for the availability of the C<TO_JSON> method
-on the object's class. If found, it will be called in scalar context and
-the resulting scalar will be encoded instead of the object.
-
-The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
-returns other blessed objects, those will be handled in the same
-way. C<TO_JSON> must take care of not causing an endless recursion cycle
-(== crash) in this case. The name of C<TO_JSON> was chosen because other
-methods called by the Perl core (== not by the user of the object) are
-usually in upper case letters and to avoid collisions with any C<to_json>
-function or method.
-
-If C<$enable> is false (the default), then C<encode> will not consider
-this type of conversion.
-
-This setting has no effect on C<decode>.
-
-=head2 filter_json_object
-
- $json = $json->filter_json_object([$coderef])
-
-When C<$coderef> is specified, it will be called from C<decode> each
-time it decodes a JSON object. The only argument is a reference to the
-newly-created hash. If the code references returns a single scalar (which
-need not be a reference), this value (i.e. a copy of that scalar to avoid
-aliasing) is inserted into the deserialised data structure. If it returns
-an empty list (NOTE: I<not> C<undef>, which is a valid scalar), the
-original deserialised hash will be inserted. This setting can slow down
-decoding considerably.
-
-When C<$coderef> is omitted or undefined, any existing callback will
-be removed and C<decode> will not change the deserialised hash in any
-way.
-
-Example, convert all JSON objects into the integer 5:
-
- my $js = JSON::PP->new->filter_json_object (sub { 5 });
- # returns [5]
- $js->decode ('[{}]'); # the given subroutine takes a hash reference.
- # throw an exception because allow_nonref is not enabled
- # so a lone 5 is not allowed.
- $js->decode ('{"a":1, "b":2}');
-
-=head2 filter_json_single_key_object
-
- $json = $json->filter_json_single_key_object($key [=> $coderef])
-
-Works remotely similar to C<filter_json_object>, but is only called for
-JSON objects having a single key named C<$key>.
-
-This C<$coderef> is called before the one specified via
-C<filter_json_object>, if any. It gets passed the single value in the JSON
-object. If it returns a single value, it will be inserted into the data
-structure. If it returns nothing (not even C<undef> but the empty list),
-the callback from C<filter_json_object> will be called next, as if no
-single-key callback were specified.
-
-If C<$coderef> is omitted or undefined, the corresponding callback will be
-disabled. There can only ever be one callback for a given key.
-
-As this callback gets called less often then the C<filter_json_object>
-one, decoding speed will not usually suffer as much. Therefore, single-key
-objects make excellent targets to serialise Perl objects into, especially
-as single-key JSON objects are as close to the type-tagged value concept
-as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
-support this in any way, so you need to make sure your data never looks
-like a serialised Perl hash.
-
-Typical names for the single object key are C<__class_whatever__>, or
-C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
-things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
-with real hashes.
-
-Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
-into the corresponding C<< $WIDGET{<id>} >> object:
-
- # return whatever is in $WIDGET{5}:
- JSON::PP
- ->new
- ->filter_json_single_key_object (__widget__ => sub {
- $WIDGET{ $_[0] }
- })
- ->decode ('{"__widget__": 5')
-
- # this can be used with a TO_JSON method in some "widget" class
- # for serialisation to json:
- sub WidgetBase::TO_JSON {
- my ($self) = @_;
-
- unless ($self->{id}) {
- $self->{id} = ..get..some..id..;
- $WIDGET{$self->{id}} = $self;
- }
-
- { __widget__ => $self->{id} }
- }
-
-=head2 shrink
-
- $json = $json->shrink([$enable])
-
- $enabled = $json->get_shrink
-
-If C<$enable> is true (or missing), the string returned by C<encode> will
-be shrunk (i.e. downgraded if possible).
-
-The actual definition of what shrink does might change in future versions,
-but it will always try to save space at the expense of time.
-
-If C<$enable> is false, then JSON::PP does nothing.
-
-=head2 max_depth
-
- $json = $json->max_depth([$maximum_nesting_depth])
-
- $max_depth = $json->get_max_depth
-
-Sets the maximum nesting level (default C<512>) accepted while encoding
-or decoding. If a higher nesting level is detected in JSON text or a Perl
-data structure, then the encoder and decoder will stop and croak at that
-point.
-
-Nesting level is defined by number of hash- or arrayrefs that the encoder
-needs to traverse to reach a given point or the number of C<{> or C<[>
-characters without their matching closing parenthesis crossed to reach a
-given character in a string.
-
-Setting the maximum depth to one disallows any nesting, so that ensures
-that the object is only a single hash/object or array.
-
-If no argument is given, the highest possible setting will be used, which
-is rarely useful.
-
-See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
-
-=head2 max_size
-
- $json = $json->max_size([$maximum_string_size])
-
- $max_size = $json->get_max_size
-
-Set the maximum length a JSON text may have (in bytes) where decoding is
-being attempted. The default is C<0>, meaning no limit. When C<decode>
-is called on a string that is longer then this many bytes, it will not
-attempt to decode the string but throw an exception. This setting has no
-effect on C<encode> (yet).
-
-If no argument is given, the limit check will be deactivated (same as when
-C<0> is specified).
-
-See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
-
-=head2 encode
-
- $json_text = $json->encode($perl_scalar)
-
-Converts the given Perl value or data structure to its JSON
-representation. Croaks on error.
-
-=head2 decode
-
- $perl_scalar = $json->decode($json_text)
-
-The opposite of C<encode>: expects a JSON text and tries to parse it,
-returning the resulting simple scalar or reference. Croaks on error.
-
-=head2 decode_prefix
-
- ($perl_scalar, $characters) = $json->decode_prefix($json_text)
-
-This works like the C<decode> method, but instead of raising an exception
-when there is trailing garbage after the first JSON object, it will
-silently stop parsing there and return the number of characters consumed
-so far.
-
-This is useful if your JSON texts are not delimited by an outer protocol
-and you need to know where the JSON text ends.
-
- JSON::PP->new->decode_prefix ("[1] the tail")
- => ([1], 3)
-
-=head1 FLAGS FOR JSON::PP ONLY
-
-The following flags and properties are for JSON::PP only. If you use
-any of these, you can't make your application run faster by replacing
-JSON::PP with JSON::XS. If you need these and also speed boost,
-try L<Cpanel::JSON::XS>, a fork of JSON::XS by Reini Urban, which
-supports some of these.
-
-=head2 allow_singlequote
-
- $json = $json->allow_singlequote([$enable])
- $enabled = $json->get_allow_singlequote
-
-If C<$enable> is true (or missing), then C<decode> will accept
-invalid JSON texts that contain strings that begin and end with
-single quotation marks. C<encode> will not be affected in anyway.
-I<Be aware that this option makes you accept invalid JSON texts
-as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration
-files, resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
- $json->allow_singlequote->decode(qq|{"foo":'bar'}|);
- $json->allow_singlequote->decode(qq|{'foo':"bar"}|);
- $json->allow_singlequote->decode(qq|{'foo':'bar'}|);
-
-=head2 allow_barekey
-
- $json = $json->allow_barekey([$enable])
- $enabled = $json->get_allow_barekey
-
-If C<$enable> is true (or missing), then C<decode> will accept
-invalid JSON texts that contain JSON objects whose names don't
-begin and end with quotation marks. C<encode> will not be affected
-in anyway. I<Be aware that this option makes you accept invalid JSON
-texts as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration
-files, resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
- $json->allow_barekey->decode(qq|{foo:"bar"}|);
-
-=head2 allow_bignum
-
- $json = $json->allow_bignum([$enable])
- $enabled = $json->get_allow_bignum
-
-If C<$enable> is true (or missing), then C<decode> will convert
-big integers Perl cannot handle as integer into L<Math::BigInt>
-objects and convert floating numbers into L<Math::BigFloat>
-objects. C<encode> will convert C<Math::BigInt> and C<Math::BigFloat>
-objects into JSON numbers.
-
- $json->allow_nonref->allow_bignum;
- $bigfloat = $json->decode('2.000000000000000000000000001');
- print $json->encode($bigfloat);
- # => 2.000000000000000000000000001
-
-See also L<MAPPING>.
-
-=head2 loose
-
- $json = $json->loose([$enable])
- $enabled = $json->get_loose
-
-If C<$enable> is true (or missing), then C<decode> will accept
-invalid JSON texts that contain unescaped [\x00-\x1f\x22\x5c]
-characters. C<encode> will not be affected in anyway.
-I<Be aware that this option makes you accept invalid JSON texts
-as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration
-files, resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
- $json->loose->decode(qq|["abc
- def"]|);
-
-=head2 escape_slash
-
- $json = $json->escape_slash([$enable])
- $enabled = $json->get_escape_slash
-
-If C<$enable> is true (or missing), then C<encode> will explicitly
-escape I<slash> (solidus; C<U+002F>) characters to reduce the risk of
-XSS (cross site scripting) that may be caused by C<< </script> >>
-in a JSON text, with the cost of bloating the size of JSON texts.
-
-This option may be useful when you embed JSON in HTML, but embedding
-arbitrary JSON in HTML (by some HTML template toolkit or by string
-interpolation) is risky in general. You must escape necessary
-characters in correct order, depending on the context.
-
-C<decode> will not be affected in anyway.
-
-=head2 indent_length
-
- $json = $json->indent_length($number_of_spaces)
- $length = $json->get_indent_length
-
-This option is only useful when you also enable C<indent> or C<pretty>.
-
-JSON::XS indents with three spaces when you C<encode> (if requested
-by C<indent> or C<pretty>), and the number cannot be changed.
-JSON::PP allows you to change/get the number of indent spaces with these
-mutator/accessor. The default number of spaces is three (the same as
-JSON::XS), and the acceptable range is from C<0> (no indentation;
-it'd be better to disable indentation by C<indent(0)>) to C<15>.
-
-=head2 sort_by
-
- $json = $json->sort_by($code_ref)
- $json = $json->sort_by($subroutine_name)
-
-If you just want to sort keys (names) in JSON objects when you
-C<encode>, enable C<canonical> option (see above) that allows you to
-sort object keys alphabetically.
-
-If you do need to sort non-alphabetically for whatever reasons,
-you can give a code reference (or a subroutine name) to C<sort_by>,
-then the argument will be passed to Perl's C<sort> built-in function.
-
-As the sorting is done in the JSON::PP scope, you usually need to
-prepend C<JSON::PP::> to the subroutine name, and the special variables
-C<$a> and C<$b> used in the subrontine used by C<sort> function.
-
-Example:
-
- my %ORDER = (id => 1, class => 2, name => 3);
- $json->sort_by(sub {
- ($ORDER{$JSON::PP::a} // 999) <=> ($ORDER{$JSON::PP::b} // 999)
- or $JSON::PP::a cmp $JSON::PP::b
- });
- print $json->encode([
- {name => 'CPAN', id => 1, href => 'http://cpan.org'}
- ]);
- # [{"id":1,"name":"CPAN","href":"http://cpan.org"}]
-
-Note that C<sort_by> affects all the plain hashes in the data structure.
-If you need finer control, C<tie> necessary hashes with a module that
-implements ordered hash (such as L<Hash::Ordered> and L<Tie::IxHash>).
-C<canonical> and C<sort_by> don't affect the key order in C<tie>d
-hashes.
-
- use Hash::Ordered;
- tie my %hash, 'Hash::Ordered',
- (name => 'CPAN', id => 1, href => 'http://cpan.org');
- print $json->encode([\%hash]);
- # [{"name":"CPAN","id":1,"href":"http://cpan.org"}] # order is kept
-
-=head1 INCREMENTAL PARSING
-
-This section is also taken from JSON::XS.
-
-In some cases, there is the need for incremental parsing of JSON
-texts. While this module always has to keep both JSON text and resulting
-Perl data structure in memory at one time, it does allow you to parse a
-JSON stream incrementally. It does so by accumulating text until it has
-a full JSON object, which it then can decode. This process is similar to
-using C<decode_prefix> to see if a full JSON object is available, but
-is much more efficient (and can be implemented with a minimum of method
-calls).
-
-JSON::PP will only attempt to parse the JSON text once it is sure it
-has enough text to get a decisive result, using a very simple but
-truly incremental parser. This means that it sometimes won't stop as
-early as the full parser, for example, it doesn't detect mismatched
-parentheses. The only thing it guarantees is that it starts decoding as
-soon as a syntactically valid JSON text has been seen. This means you need
-to set resource limits (e.g. C<max_size>) to ensure the parser will stop
-parsing in the presence if syntax errors.
-
-The following methods implement this incremental parser.
-
-=head2 incr_parse
-
- $json->incr_parse( [$string] ) # void context
-
- $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
-
- @obj_or_empty = $json->incr_parse( [$string] ) # list context
-
-This is the central parsing function. It can both append new text and
-extract objects from the stream accumulated so far (both of these
-functions are optional).
-
-If C<$string> is given, then this string is appended to the already
-existing JSON fragment stored in the C<$json> object.
-
-After that, if the function is called in void context, it will simply
-return without doing anything further. This can be used to add more text
-in as many chunks as you want.
-
-If the method is called in scalar context, then it will try to extract
-exactly I<one> JSON object. If that is successful, it will return this
-object, otherwise it will return C<undef>. If there is a parse error,
-this method will croak just as C<decode> would do (one can then use
-C<incr_skip> to skip the erroneous part). This is the most common way of
-using the method.
-
-And finally, in list context, it will try to extract as many objects
-from the stream as it can find and return them, or the empty list
-otherwise. For this to work, there must be no separators (other than
-whitespace) between the JSON objects or arrays, instead they must be
-concatenated back-to-back. If an error occurs, an exception will be
-raised as in the scalar context case. Note that in this case, any
-previously-parsed JSON texts will be lost.
-
-Example: Parse some JSON arrays/objects in a given string and return
-them.
-
- my @objs = JSON::PP->new->incr_parse ("[5][7][1,2]");
-
-=head2 incr_text
-
- $lvalue_string = $json->incr_text
-
-This method returns the currently stored JSON fragment as an lvalue, that
-is, you can manipulate it. This I<only> works when a preceding call to
-C<incr_parse> in I<scalar context> successfully returned an object. Under
-all other circumstances you must not call this function (I mean it.
-although in simple tests it might actually work, it I<will> fail under
-real world conditions). As a special exception, you can also call this
-method before having parsed anything.
-
-That means you can only use this function to look at or manipulate text
-before or after complete JSON objects, not while the parser is in the
-middle of parsing a JSON object.
-
-This function is useful in two cases: a) finding the trailing text after a
-JSON object or b) parsing multiple JSON objects separated by non-JSON text
-(such as commas).
-
-=head2 incr_skip
-
- $json->incr_skip
-
-This will reset the state of the incremental parser and will remove
-the parsed text from the input buffer so far. This is useful after
-C<incr_parse> died, in which case the input buffer and incremental parser
-state is left unchanged, to skip the text parsed so far and to reset the
-parse state.
-
-The difference to C<incr_reset> is that only text until the parse error
-occurred is removed.
-
-=head2 incr_reset
-
- $json->incr_reset
-
-This completely resets the incremental parser, that is, after this call,
-it will be as if the parser had never parsed anything.
-
-This is useful if you want to repeatedly parse JSON objects and want to
-ignore any trailing data, which means you have to reset the parser after
-each successful decode.
-
-=head1 MAPPING
-
-Most of this section is also taken from JSON::XS.
-
-This section describes how JSON::PP maps Perl values to JSON values and
-vice versa. These mappings are designed to "do the right thing" in most
-circumstances automatically, preserving round-tripping characteristics
-(what you put in comes out as something equivalent).
-
-For the more enlightened: note that in the following descriptions,
-lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl>
-refers to the abstract Perl language itself.
-
-=head2 JSON -> PERL
-
-=over 4
-
-=item object
-
-A JSON object becomes a reference to a hash in Perl. No ordering of object
-keys is preserved (JSON does not preserve object key ordering itself).
-
-=item array
-
-A JSON array becomes a reference to an array in Perl.
-
-=item string
-
-A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
-are represented by the same codepoints in the Perl string, so no manual
-decoding is necessary.
-
-=item number
-
-A JSON number becomes either an integer, numeric (floating point) or
-string scalar in perl, depending on its range and any fractional parts. On
-the Perl level, there is no difference between those as Perl handles all
-the conversion details, but an integer may take slightly less memory and
-might represent more values exactly than floating point numbers.
-
-If the number consists of digits only, JSON::PP will try to represent
-it as an integer value. If that fails, it will try to represent it as
-a numeric (floating point) value if that is possible without loss of
-precision. Otherwise it will preserve the number as a string value (in
-which case you lose roundtripping ability, as the JSON number will be
-re-encoded to a JSON string).
-
-Numbers containing a fractional or exponential part will always be
-represented as numeric (floating point) values, possibly at a loss of
-precision (in which case you might lose perfect roundtripping ability, but
-the JSON number will still be re-encoded as a JSON number).
-
-Note that precision is not accuracy - binary floating point values cannot
-represent most decimal fractions exactly, and when converting from and to
-floating point, JSON::PP only guarantees precision up to but not including
-the least significant bit.
-
-When C<allow_bignum> is enabled, big integer values and any numeric
-values will be converted into L<Math::BigInt> and L<Math::BigFloat>
-objects respectively, without becoming string scalars or losing
-precision.
-
-=item true, false
-
-These JSON atoms become C<JSON::PP::true> and C<JSON::PP::false>,
-respectively. They are overloaded to act almost exactly like the numbers
-C<1> and C<0>. You can check whether a scalar is a JSON boolean by using
-the C<JSON::PP::is_bool> function.
-
-=item null
-
-A JSON null atom becomes C<undef> in Perl.
-
-=item shell-style comments (C<< # I<text> >>)
-
-As a nonstandard extension to the JSON syntax that is enabled by the
-C<relaxed> setting, shell-style comments are allowed. They can start
-anywhere outside strings and go till the end of the line.
-
-=back
-
-
-=head2 PERL -> JSON
-
-The mapping from Perl to JSON is slightly more difficult, as Perl is a
-truly typeless language, so we can only guess which JSON type is meant by
-a Perl value.
-
-=over 4
-
-=item hash references
-
-Perl hash references become JSON objects. As there is no inherent
-ordering in hash keys (or JSON objects), they will usually be encoded
-in a pseudo-random order. JSON::PP can optionally sort the hash keys
-(determined by the I<canonical> flag and/or I<sort_by> property), so
-the same data structure will serialise to the same JSON text (given
-same settings and version of JSON::PP), but this incurs a runtime
-overhead and is only rarely useful, e.g. when you want to compare some
-JSON text against another for equality.
-
-=item array references
-
-Perl array references become JSON arrays.
-
-=item other references
-
-Other unblessed references are generally not allowed and will cause an
-exception to be thrown, except for references to the integers C<0> and
-C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
-also use C<JSON::PP::false> and C<JSON::PP::true> to improve
-readability.
-
- to_json [\0, JSON::PP::true] # yields [false,true]
-
-=item JSON::PP::true, JSON::PP::false
-
-These special values become JSON true and JSON false values,
-respectively. You can also use C<\1> and C<\0> directly if you want.
-
-=item JSON::PP::null
-
-This special value becomes JSON null.
-
-=item blessed objects
-
-Blessed objects are not directly representable in JSON, but C<JSON::PP>
-allows various ways of handling objects. See L<OBJECT SERIALISATION>,
-below, for details.
-
-=item simple scalars
-
-Simple Perl scalars (any scalar that is not a reference) are the most
-difficult objects to encode: JSON::PP will encode undefined scalars as
-JSON C<null> values, scalars that have last been used in a string context
-before encoding as JSON strings, and anything else as number value:
-
- # dump as number
- encode_json [2] # yields [2]
- encode_json [-3.0e17] # yields [-3e+17]
- my $value = 5; encode_json [$value] # yields [5]
-
- # used as string, so dump as string
- print $value;
- encode_json [$value] # yields ["5"]
-
- # undef becomes null
- encode_json [undef] # yields [null]
-
-You can force the type to be a string by stringifying it:
-
- my $x = 3.1; # some variable containing a number
- "$x"; # stringified
- $x .= ""; # another, more awkward way to stringify
- print $x; # perl does it for you, too, quite often
- # (but for older perls)
-
-You can force the type to be a number by numifying it:
-
- my $x = "3"; # some variable containing a string
- $x += 0; # numify it, ensuring it will be dumped as a number
- $x *= 1; # same thing, the choice is yours.
-
-You cannot currently force the type in other, less obscure, ways.
-
-Note that numerical precision has the same meaning as under Perl (so
-binary to decimal conversion follows the same rules as in Perl, which
-can differ to other languages). Also, your perl interpreter might expose
-extensions to the floating point numbers of your platform, such as
-infinities or NaN's - these cannot be represented in JSON, and it is an
-error to pass those in.
-
-JSON::PP (and JSON::XS) trusts what you pass to C<encode> method
-(or C<encode_json> function) is a clean, validated data structure with
-values that can be represented as valid JSON values only, because it's
-not from an external data source (as opposed to JSON texts you pass to
-C<decode> or C<decode_json>, which JSON::PP considers tainted and
-doesn't trust). As JSON::PP doesn't know exactly what you and consumers
-of your JSON texts want the unexpected values to be (you may want to
-convert them into null, or to stringify them with or without
-normalisation (string representation of infinities/NaN may vary
-depending on platforms), or to croak without conversion), you're advised
-to do what you and your consumers need before you encode, and also not
-to numify values that may start with values that look like a number
-(including infinities/NaN), without validating.
-
-=back
-
-=head2 OBJECT SERIALISATION
-
-As for Perl objects, JSON::PP only supports a pure JSON representation (without the ability to deserialise the object automatically again).
-
-=head3 SERIALISATION
-
-What happens when C<JSON::PP> encounters a Perl object depends on the
-C<allow_blessed>, C<convert_blessed> and C<allow_bignum> settings, which are
-used in this order:
-
-=over 4
-
-=item 1. C<convert_blessed> is enabled and the object has a C<TO_JSON> method.
-
-In this case, the C<TO_JSON> method of the object is invoked in scalar
-context. It must return a single scalar that can be directly encoded into
-JSON. This scalar replaces the object in the JSON text.
-
-For example, the following C<TO_JSON> method will convert all L<URI>
-objects to JSON strings when serialised. The fact that these values
-originally were L<URI> objects is lost.
-
- sub URI::TO_JSON {
- my ($uri) = @_;
- $uri->as_string
- }
-
-=item 2. C<allow_bignum> is enabled and the object is a C<Math::BigInt> or C<Math::BigFloat>.
-
-The object will be serialised as a JSON number value.
-
-=item 3. C<allow_blessed> is enabled.
-
-The object will be serialised as a JSON null value.
-
-=item 4. none of the above
-
-If none of the settings are enabled or the respective methods are missing,
-C<JSON::PP> throws an exception.
-
-=back
-
-=head1 ENCODING/CODESET FLAG NOTES
-
-This section is taken from JSON::XS.
-
-The interested reader might have seen a number of flags that signify
-encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be
-some confusion on what these do, so here is a short comparison:
-
-C<utf8> controls whether the JSON text created by C<encode> (and expected
-by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only
-control whether C<encode> escapes character values outside their respective
-codeset range. Neither of these flags conflict with each other, although
-some combinations make less sense than others.
-
-Care has been taken to make all flags symmetrical with respect to
-C<encode> and C<decode>, that is, texts encoded with any combination of
-these flag values will be correctly decoded when the same flags are used
-- in general, if you use different flag settings while encoding vs. when
-decoding you likely have a bug somewhere.
-
-Below comes a verbose discussion of these flags. Note that a "codeset" is
-simply an abstract set of character-codepoint pairs, while an encoding
-takes those codepoint numbers and I<encodes> them, in our case into
-octets. Unicode is (among other things) a codeset, UTF-8 is an encoding,
-and ISO-8859-1 (= latin 1) and ASCII are both codesets I<and> encodings at
-the same time, which can be confusing.
-
-=over 4
-
-=item C<utf8> flag disabled
-
-When C<utf8> is disabled (the default), then C<encode>/C<decode> generate
-and expect Unicode strings, that is, characters with high ordinal Unicode
-values (> 255) will be encoded as such characters, and likewise such
-characters are decoded as-is, no changes to them will be done, except
-"(re-)interpreting" them as Unicode codepoints or Unicode characters,
-respectively (to Perl, these are the same thing in strings unless you do
-funny/weird/dumb stuff).
-
-This is useful when you want to do the encoding yourself (e.g. when you
-want to have UTF-16 encoded JSON texts) or when some other layer does
-the encoding for you (for example, when printing to a terminal using a
-filehandle that transparently encodes to UTF-8 you certainly do NOT want
-to UTF-8 encode your data first and have Perl encode it another time).
-
-=item C<utf8> flag enabled
-
-If the C<utf8>-flag is enabled, C<encode>/C<decode> will encode all
-characters using the corresponding UTF-8 multi-byte sequence, and will
-expect your input strings to be encoded as UTF-8, that is, no "character"
-of the input string must have any value > 255, as UTF-8 does not allow
-that.
-
-The C<utf8> flag therefore switches between two modes: disabled means you
-will get a Unicode string in Perl, enabled means you get an UTF-8 encoded
-octet/binary string in Perl.
-
-=item C<latin1> or C<ascii> flags enabled
-
-With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters
-with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining
-characters as specified by the C<utf8> flag.
-
-If C<utf8> is disabled, then the result is also correctly encoded in those
-character sets (as both are proper subsets of Unicode, meaning that a
-Unicode string with all character values < 256 is the same thing as a
-ISO-8859-1 string, and a Unicode string with all character values < 128 is
-the same thing as an ASCII string in Perl).
-
-If C<utf8> is enabled, you still get a correct UTF-8-encoded string,
-regardless of these flags, just some more characters will be escaped using
-C<\uXXXX> then before.
-
-Note that ISO-8859-1-I<encoded> strings are not compatible with UTF-8
-encoding, while ASCII-encoded strings are. That is because the ISO-8859-1
-encoding is NOT a subset of UTF-8 (despite the ISO-8859-1 I<codeset> being
-a subset of Unicode), while ASCII is.
-
-Surprisingly, C<decode> will ignore these flags and so treat all input
-values as governed by the C<utf8> flag. If it is disabled, this allows you
-to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of
-Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings.
-
-So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag -
-they only govern when the JSON output engine escapes a character or not.
-
-The main use for C<latin1> is to relatively efficiently store binary data
-as JSON, at the expense of breaking compatibility with most JSON decoders.
-
-The main use for C<ascii> is to force the output to not contain characters
-with values > 127, which means you can interpret the resulting string
-as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about any character set and
-8-bit-encoding, and still get the same data structure back. This is useful
-when your channel for JSON transfer is not 8-bit clean or the encoding
-might be mangled in between (e.g. in mail), and works because ASCII is a
-proper subset of most 8-bit and multibyte encodings in use in the world.
-
-=back
-
-=head1 SEE ALSO
-
-The F<json_pp> command line utility for quick experiments.
-
-L<JSON::XS>, L<Cpanel::JSON::XS>, and L<JSON::Tiny> for faster alternatives.
-L<JSON> and L<JSON::MaybeXS> for easy migration.
-
-L<JSON::backportPP::Compat5005> and L<JSON::backportPP::Compat5006> for older perl users.
-
-RFC4627 (L<http://www.ietf.org/rfc/rfc4627.txt>)
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2016 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Boolean.pm b/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Boolean.pm
deleted file mode 100644
index f1c9d526790..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Boolean.pm
+++ /dev/null
@@ -1,36 +0,0 @@
-package # This is JSON::backportPP
- JSON::PP::Boolean;
-
-use strict;
-use overload (
- "0+" => sub { ${$_[0]} },
- "++" => sub { $_[0] = ${$_[0]} + 1 },
- "--" => sub { $_[0] = ${$_[0]} - 1 },
- fallback => 1,
-);
-
-$JSON::backportPP::Boolean::VERSION = '2.94';
-
-1;
-
-__END__
-
-=head1 NAME
-
-JSON::PP::Boolean - dummy module providing JSON::PP::Boolean
-
-=head1 SYNOPSIS
-
- # do not "use" yourself
-
-=head1 DESCRIPTION
-
-This module exists only to provide overload resolution for Storable and similar modules. See
-L<JSON::PP> for more info about this class.
-
-=head1 AUTHOR
-
-This idea is from L<JSON::XS::Boolean> written by Marc Lehmann <schmorp[at]schmorp.de>
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5005.pm b/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5005.pm
deleted file mode 100644
index 139990edff0..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5005.pm
+++ /dev/null
@@ -1,131 +0,0 @@
-package # This is JSON::backportPP
- JSON::backportPP5005;
-
-use 5.005;
-use strict;
-
-my @properties;
-
-$JSON::PP5005::VERSION = '1.10';
-
-BEGIN {
-
- sub utf8::is_utf8 {
- 0; # It is considered that UTF8 flag off for Perl 5.005.
- }
-
- sub utf8::upgrade {
- }
-
- sub utf8::downgrade {
- 1; # must always return true.
- }
-
- sub utf8::encode {
- }
-
- sub utf8::decode {
- }
-
- *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii;
- *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1;
- *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates;
- *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode;
-
- # missing in B module.
- sub B::SVp_IOK () { 0x01000000; }
- sub B::SVp_NOK () { 0x02000000; }
- sub B::SVp_POK () { 0x04000000; }
-
- $INC{'bytes.pm'} = 1; # dummy
-}
-
-
-
-sub _encode_ascii {
- join('', map { $_ <= 127 ? chr($_) : sprintf('\u%04x', $_) } unpack('C*', $_[0]) );
-}
-
-
-sub _encode_latin1 {
- join('', map { chr($_) } unpack('C*', $_[0]) );
-}
-
-
-sub _decode_surrogates { # from http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm
- my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00); # from perlunicode
- my $bit = unpack('B32', pack('N', $uni));
-
- if ( $bit =~ /^00000000000(...)(......)(......)(......)$/ ) {
- my ($w, $x, $y, $z) = ($1, $2, $3, $4);
- return pack('B*', sprintf('11110%s10%s10%s10%s', $w, $x, $y, $z));
- }
- else {
- Carp::croak("Invalid surrogate pair");
- }
-}
-
-
-sub _decode_unicode {
- my ($u) = @_;
- my ($utf8bit);
-
- if ( $u =~ /^00([89a-f][0-9a-f])$/i ) { # 0x80-0xff
- return pack( 'H2', $1 );
- }
-
- my $bit = unpack("B*", pack("H*", $u));
-
- if ( $bit =~ /^00000(.....)(......)$/ ) {
- $utf8bit = sprintf('110%s10%s', $1, $2);
- }
- elsif ( $bit =~ /^(....)(......)(......)$/ ) {
- $utf8bit = sprintf('1110%s10%s10%s', $1, $2, $3);
- }
- else {
- Carp::croak("Invalid escaped unicode");
- }
-
- return pack('B*', $utf8bit);
-}
-
-
-sub JSON::PP::incr_text {
- $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new;
-
- if ( $_[0]->{_incr_parser}->{incr_parsing} ) {
- Carp::croak("incr_text can not be called when the incremental parser already started parsing");
- }
-
- $_[0]->{_incr_parser}->{incr_text} = $_[1] if ( @_ > 1 );
- $_[0]->{_incr_parser}->{incr_text};
-}
-
-
-1;
-__END__
-
-=pod
-
-=head1 NAME
-
-JSON::PP5005 - Helper module in using JSON::PP in Perl 5.005
-
-=head1 DESCRIPTION
-
-JSON::PP calls internally.
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2012 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5006.pm b/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5006.pm
deleted file mode 100644
index 7736fd8debc..00000000000
--- a/Master/tlpkg/tlperl/site/lib/JSON/backportPP/Compat5006.pm
+++ /dev/null
@@ -1,173 +0,0 @@
-package # This is JSON::backportPP
- JSON::backportPP56;
-
-use 5.006;
-use strict;
-
-my @properties;
-
-$JSON::PP56::VERSION = '1.08';
-
-BEGIN {
-
- sub utf8::is_utf8 {
- my $len = length $_[0]; # char length
- {
- use bytes; # byte length;
- return $len != length $_[0]; # if !=, UTF8-flagged on.
- }
- }
-
-
- sub utf8::upgrade {
- ; # noop;
- }
-
-
- sub utf8::downgrade ($;$) {
- return 1 unless ( utf8::is_utf8( $_[0] ) );
-
- if ( _is_valid_utf8( $_[0] ) ) {
- my $downgrade;
- for my $c ( unpack( "U*", $_[0] ) ) {
- if ( $c < 256 ) {
- $downgrade .= pack("C", $c);
- }
- else {
- $downgrade .= pack("U", $c);
- }
- }
- $_[0] = $downgrade;
- return 1;
- }
- else {
- Carp::croak("Wide character in subroutine entry") unless ( $_[1] );
- 0;
- }
- }
-
-
- sub utf8::encode ($) { # UTF8 flag off
- if ( utf8::is_utf8( $_[0] ) ) {
- $_[0] = pack( "C*", unpack( "C*", $_[0] ) );
- }
- else {
- $_[0] = pack( "U*", unpack( "C*", $_[0] ) );
- $_[0] = pack( "C*", unpack( "C*", $_[0] ) );
- }
- }
-
-
- sub utf8::decode ($) { # UTF8 flag on
- if ( _is_valid_utf8( $_[0] ) ) {
- utf8::downgrade( $_[0] );
- $_[0] = pack( "U*", unpack( "U*", $_[0] ) );
- }
- }
-
-
- *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii;
- *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1;
- *JSON::PP::JSON_PP_decode_surrogates = \&JSON::PP::_decode_surrogates;
- *JSON::PP::JSON_PP_decode_unicode = \&JSON::PP::_decode_unicode;
-
- unless ( defined &B::SVp_NOK ) { # missing in B module.
- eval q{ sub B::SVp_NOK () { 0x02000000; } };
- }
-
-}
-
-
-
-sub _encode_ascii {
- join('',
- map {
- $_ <= 127 ?
- chr($_) :
- $_ <= 65535 ?
- sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_));
- } _unpack_emu($_[0])
- );
-}
-
-
-sub _encode_latin1 {
- join('',
- map {
- $_ <= 255 ?
- chr($_) :
- $_ <= 65535 ?
- sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_));
- } _unpack_emu($_[0])
- );
-}
-
-
-sub _unpack_emu { # for Perl 5.6 unpack warnings
- return !utf8::is_utf8($_[0]) ? unpack('C*', $_[0])
- : _is_valid_utf8($_[0]) ? unpack('U*', $_[0])
- : unpack('C*', $_[0]);
-}
-
-
-sub _is_valid_utf8 {
- my $str = $_[0];
- my $is_utf8;
-
- while ($str =~ /(?:
- (
- [\x00-\x7F]
- |[\xC2-\xDF][\x80-\xBF]
- |[\xE0][\xA0-\xBF][\x80-\xBF]
- |[\xE1-\xEC][\x80-\xBF][\x80-\xBF]
- |[\xED][\x80-\x9F][\x80-\xBF]
- |[\xEE-\xEF][\x80-\xBF][\x80-\xBF]
- |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF]
- |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]
- |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF]
- )
- | (.)
- )/xg)
- {
- if (defined $1) {
- $is_utf8 = 1 if (!defined $is_utf8);
- }
- else {
- $is_utf8 = 0 if (!defined $is_utf8);
- if ($is_utf8) { # eventually, not utf8
- return;
- }
- }
- }
-
- return $is_utf8;
-}
-
-
-1;
-__END__
-
-=pod
-
-=head1 NAME
-
-JSON::PP56 - Helper module in using JSON::PP in Perl 5.6
-
-=head1 DESCRIPTION
-
-JSON::PP calls internally.
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2012 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/LWP.pm b/Master/tlpkg/tlperl/site/lib/LWP.pm
index b3a174af3ad..2f1b39dc37f 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP.pm
@@ -1,6 +1,6 @@
package LWP;
-our $VERSION = '6.25';
+our $VERSION = '6.31';
require LWP::UserAgent; # this should load everything you need
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm
index 18fe8cd5f1c..a5cc949e6a3 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm
@@ -1,7 +1,9 @@
package LWP::Authen::Basic;
-$LWP::Authen::Basic::VERSION = '6.25';
+
use strict;
+our $VERSION = '6.31';
+
require MIME::Base64;
sub auth_header {
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm
index 2e80af49729..7a7c3e01e04 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm
@@ -1,8 +1,10 @@
package LWP::Authen::Digest;
-$LWP::Authen::Digest::VERSION = '6.25';
+
use strict;
use base 'LWP::Authen::Basic';
+our $VERSION = '6.31';
+
require Digest::MD5;
sub auth_header {
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm
index 7fd0a827f3d..3c3a7c30bb2 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm
@@ -2,7 +2,7 @@ package LWP::Authen::Ntlm;
use strict;
-our $VERSION = '6.25';
+our $VERSION = '6.31';
use Authen::NTLM "1.02";
use MIME::Base64 "2.12";
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm b/Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm
index 172e2f49a5b..47fae6b4384 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm
@@ -2,7 +2,7 @@ package LWP::ConnCache;
use strict;
-our $VERSION = '6.25';
+our $VERSION = '6.31';
our $DEBUG;
sub new {
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Debug.pm b/Master/tlpkg/tlperl/site/lib/LWP/Debug.pm
index f7334c425df..d8305e4b78d 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Debug.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Debug.pm
@@ -1,5 +1,7 @@
package LWP::Debug; # legacy
-$LWP::Debug::VERSION = '6.25';
+
+our $VERSION = '6.31';
+
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(level trace debug conns);
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm b/Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm
index 4dc70a096f7..b063bfe5e3a 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm
@@ -1,5 +1,5 @@
package LWP::Debug::TraceHTTP;
-$LWP::Debug::TraceHTTP::VERSION = '6.25';
+
# Just call:
#
# require LWP::Debug::TraceHTTP;
@@ -11,8 +11,11 @@ $LWP::Debug::TraceHTTP::VERSION = '6.25';
use strict;
use base 'LWP::Protocol::http';
-package LWP::Debug::TraceHTTP::Socket;
-$LWP::Debug::TraceHTTP::Socket::VERSION = '6.25';
+our $VERSION = '6.31';
+
+package # hide from PAUSE
+ LWP::Debug::TraceHTTP::Socket;
+
use Data::Dump 1.13;
use Data::Dump::Trace qw(autowrap mcall);
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm b/Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm
index 681415f4ccd..2f99249d3be 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm
@@ -1,5 +1,7 @@
package LWP::DebugFile;
-$LWP::DebugFile::VERSION = '6.25';
+
+our $VERSION = '6.31';
+
# legacy stub
1;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm b/Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm
index d56a2e8abad..3b7962af026 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm
@@ -1,5 +1,7 @@
package LWP::MemberMixin;
-$LWP::MemberMixin::VERSION = '6.25';
+
+our $VERSION = '6.31';
+
sub _elem {
my $self = shift;
my $elem = shift;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm
index 3adbaf3de49..02a57e90fca 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm
@@ -2,7 +2,7 @@ package LWP::Protocol;
use base 'LWP::MemberMixin';
-our $VERSION = '6.25';
+our $VERSION = '6.31';
use strict;
use Carp ();
@@ -53,7 +53,7 @@ sub implementor
return '' unless $scheme =~ /^([.+\-\w]+)$/; # check valid URL schemes
$scheme = $1; # untaint
- $scheme =~ s/[.+\-]/_/g; # make it a legal module name
+ $scheme =~ tr/.+-/_/; # make it a legal module name
# scheme not yet known, look for a 'use'd implementation
$ic = "LWP::Protocol::$scheme"; # default location
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm
index 3288abdbc12..cf27eb672ff 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm
@@ -1,9 +1,11 @@
package LWP::Protocol::cpan;
-$LWP::Protocol::cpan::VERSION = '6.25';
+
use strict;
use base qw(LWP::Protocol);
+our $VERSION = '6.31';
+
require URI;
require HTTP::Status;
require HTTP::Response;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm
index 3b256528a4f..a75ba570b4c 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm
@@ -1,9 +1,11 @@
package LWP::Protocol::data;
-$LWP::Protocol::data::VERSION = '6.25';
+
# Implements access to data:-URLs as specified in RFC 2397
use strict;
+our $VERSION = '6.31';
+
require HTTP::Response;
require HTTP::Status;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm
index e83149dbd90..2db309af894 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm
@@ -1,9 +1,11 @@
package LWP::Protocol::file;
-$LWP::Protocol::file::VERSION = '6.25';
+
use base qw(LWP::Protocol);
use strict;
+our $VERSION = '6.31';
+
require LWP::MediaTypes;
require HTTP::Request;
require HTTP::Response;
@@ -126,17 +128,17 @@ sub request
# read the file
if ($method ne "HEAD") {
- open(F, $path) or return new
+ open(my $fh, '<', $path) or return new
HTTP::Response(HTTP::Status::RC_INTERNAL_SERVER_ERROR,
"Cannot read file '$path': $!");
- binmode(F);
+ binmode($fh);
$response = $self->collect($arg, $response, sub {
my $content = "";
- my $bytes = sysread(F, $content, $size);
+ my $bytes = sysread($fh, $content, $size);
return \$content if $bytes > 0;
return \ "";
});
- close(F);
+ close($fh);
}
$response;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm
index 2a96c1b7c55..37c836be73c 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm
@@ -1,10 +1,12 @@
package LWP::Protocol::ftp;
-$LWP::Protocol::ftp::VERSION = '6.25';
+
# Implementation of the ftp protocol (RFC 959). We let the Net::FTP
# package do all the dirty work.
use base qw(LWP::Protocol);
use strict;
+our $VERSION = '6.31';
+
use Carp ();
use HTTP::Status ();
use HTTP::Negotiate ();
@@ -15,9 +17,10 @@ use File::Listing ();
{
- package LWP::Protocol::MyFTP;
-$LWP::Protocol::MyFTP::VERSION = '6.25';
-use strict;
+ package # hide from PAUSE
+ LWP::Protocol::MyFTP;
+
+ use strict;
use base qw(Net::FTP);
sub new {
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm
index e6fe5ce8473..ae559a9b74d 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm
@@ -1,5 +1,5 @@
package LWP::Protocol::gopher;
-$LWP::Protocol::gopher::VERSION = '6.25';
+
# Implementation of the gopher protocol (RFC 1436)
#
# This code is based on 'wwwgopher.pl,v 0.10 1994/10/17 18:12:34 shelden'
@@ -9,6 +9,8 @@ $LWP::Protocol::gopher::VERSION = '6.25';
use strict;
+our $VERSION = '6.31';
+
require HTTP::Response;
require HTTP::Status;
require IO::Socket;
@@ -185,7 +187,7 @@ sub gopher2url
sub menu2html {
my($menu) = @_;
- $menu =~ s/\015//g; # remove carriage return
+ $menu =~ tr/\015//d; # remove carriage return
my $tmp = <<"EOT";
<HTML>
<HEAD>
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm
index 2266b1e9ea6..b5448ac6aa4 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm
@@ -1,7 +1,9 @@
package LWP::Protocol::http;
-$LWP::Protocol::http::VERSION = '6.25';
+
use strict;
+our $VERSION = '6.31';
+
require HTTP::Response;
require HTTP::Status;
require Net::HTTP;
@@ -42,6 +44,8 @@ sub _new_socket
$@ =~ /\b(Crypt-SSLeay can't verify hostnames)\b/
) {
$status .= " ($1)";
+ } elsif ($@) {
+ $status .= " ($@)";
}
die "$status\n\n$@";
}
@@ -232,7 +236,7 @@ sub request
$request_headers->scan(sub {
my($k, $v) = @_;
$k =~ s/^://;
- $v =~ s/\n/ /g;
+ $v =~ tr/\n/ /;
push(@h, $k, $v);
});
@@ -497,8 +501,9 @@ sub request
#-----------------------------------------------------------
-package LWP::Protocol::http::SocketMethods;
-$LWP::Protocol::http::SocketMethods::VERSION = '6.25';
+package # hide from PAUSE
+ LWP::Protocol::http::SocketMethods;
+
sub ping {
my $self = shift;
!$self->can_read(0);
@@ -510,8 +515,9 @@ sub increment_response_count {
}
#-----------------------------------------------------------
-package LWP::Protocol::http::Socket;
-$LWP::Protocol::http::Socket::VERSION = '6.25';
-use base qw(LWP::Protocol::http::SocketMethods Net::HTTP);
+package # hide from PAUSE
+ LWP::Protocol::http::Socket;
+
+use parent -norequire, qw(LWP::Protocol::http::SocketMethods Net::HTTP);
1;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm
index f1e4c9f918e..61037fd7dd8 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm
@@ -1,6 +1,9 @@
package LWP::Protocol::loopback;
-$LWP::Protocol::loopback::VERSION = '6.25';
+
use strict;
+
+our $VERSION = '6.31';
+
require HTTP::Response;
use base qw(LWP::Protocol);
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm
index 9358695d57d..a069ae0589c 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm
@@ -1,5 +1,5 @@
package LWP::Protocol::mailto;
-$LWP::Protocol::mailto::VERSION = '6.25';
+
# This module implements the mailto protocol. It is just a simple
# frontend to the Unix sendmail program except on MacOS, where it uses
# Mail::Internet.
@@ -11,6 +11,8 @@ require HTTP::Status;
use Carp;
use strict;
+our $VERSION = '6.31';
+
use base qw(LWP::Protocol);
our $SENDMAIL;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm
index 9727a247a51..6c7051bf0d7 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm
@@ -1,9 +1,11 @@
package LWP::Protocol::nntp;
-$LWP::Protocol::nntp::VERSION = '6.25';
+
# Implementation of the Network News Transfer Protocol (RFC 977)
use base qw(LWP::Protocol);
+our $VERSION = '6.31';
+
require HTTP::Response;
require HTTP::Status;
require Net::NNTP;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm
index a9b0e411ee7..b481dc14263 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm
@@ -4,9 +4,11 @@ package LWP::Protocol::nogo;
# LWP::Protocol::implementor(that_scheme, 'LWP::Protocol::nogo');
# For then on, attempts to access URLs with that scheme will generate
# a 500 error.
-$LWP::Protocol::nogo::VERSION = '6.25';
+
use strict;
+our $VERSION = '6.31';
+
require HTTP::Response;
require HTTP::Status;
use base qw(LWP::Protocol);
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm b/Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm
index 0e96856329a..912a72d4a65 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm
@@ -2,7 +2,7 @@ package LWP::RobotUA;
use base qw(LWP::UserAgent);
-our $VERSION = '6.25';
+our $VERSION = '6.31';
require WWW::RobotRules;
require HTTP::Request;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/Simple.pm b/Master/tlpkg/tlperl/site/lib/LWP/Simple.pm
index 321f9641c48..db6727dd87c 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/Simple.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/Simple.pm
@@ -2,7 +2,7 @@ package LWP::Simple;
use strict;
-our $VERSION = '6.25';
+our $VERSION = '6.31';
require Exporter;
diff --git a/Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm b/Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm
index 07c391605e3..5bbff8ecc9c 100644
--- a/Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm
+++ b/Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm
@@ -15,7 +15,7 @@ use LWP::Protocol ();
use Scalar::Util qw(blessed);
use Try::Tiny qw(try catch);
-our $VERSION = '6.25';
+our $VERSION = '6.31';
sub new
{
@@ -387,7 +387,7 @@ sub request {
}
$scheme = $1; # untainted now
my $class = "LWP::Authen::\u$scheme";
- $class =~ s/-/_/g;
+ $class =~ tr/-/_/;
no strict 'refs';
unless (%{"$class\::"}) {
@@ -660,13 +660,11 @@ sub redirect_ok
return 1;
}
-
-sub credentials
-{
- my $self = shift;
- my $netloc = lc(shift);
- my $realm = shift || "";
- my $old = $self->{basic_authentication}{$netloc}{$realm};
+sub credentials {
+ my $self = shift;
+ my $netloc = lc(shift || '');
+ my $realm = shift || "";
+ my $old = $self->{basic_authentication}{$netloc}{$realm};
if (@_) {
$self->{basic_authentication}{$netloc}{$realm} = [@_];
}
@@ -675,7 +673,6 @@ sub credentials
return join(":", @$old);
}
-
sub get_basic_credentials
{
my($self, $realm, $uri, $proxy) = @_;
@@ -900,16 +897,20 @@ sub handlers {
sub run_handlers {
my($self, $phase, $o) = @_;
+
+ # here we pass $_[2] to the callbacks, instead of $o, so that they
+ # can assign to it; e.g. request_prepare is documented to allow
+ # that
if (defined(wantarray)) {
for my $h ($self->handlers($phase, $o)) {
- my $ret = $h->{callback}->($o, $self, $h);
+ my $ret = $h->{callback}->($_[2], $self, $h);
return $ret if $ret;
}
return undef;
}
for my $h ($self->handlers($phase, $o)) {
- $h->{callback}->($o, $self, $h);
+ $h->{callback}->($_[2], $self, $h);
}
}
@@ -1459,7 +1460,7 @@ that have a valid certificate matching the expected hostname. If FALSE no
checks are made and you can't be sure that you communicate with the expected peer.
The no checks behaviour was the default for libwww-perl-5.837 and earlier releases.
-This option is initialized from the L<PERL_LWP_SSL_VERIFY_HOSTNAME> environment
+This option is initialized from the C<PERL_LWP_SSL_VERIFY_HOSTNAME> environment
variable. If this environment variable isn't set; then C<verify_hostname>
defaults to 1.
diff --git a/Master/tlpkg/tlperl/site/lib/Net/HTTP.pm b/Master/tlpkg/tlperl/site/lib/Net/HTTP.pm
index 1f2c9fbf2d0..c8ff7883869 100644
--- a/Master/tlpkg/tlperl/site/lib/Net/HTTP.pm
+++ b/Master/tlpkg/tlperl/site/lib/Net/HTTP.pm
@@ -1,5 +1,5 @@
package Net::HTTP;
-$Net::HTTP::VERSION = '6.13';
+$Net::HTTP::VERSION = '6.17';
use strict;
use warnings;
@@ -50,7 +50,7 @@ Net::HTTP - Low-level HTTP connection (client)
=head1 VERSION
-version 6.13
+version 6.17
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm b/Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm
index 148028444f5..745a56ce458 100644
--- a/Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm
+++ b/Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm
@@ -1,5 +1,5 @@
package Net::HTTP::Methods;
-$Net::HTTP::Methods::VERSION = '6.13';
+$Net::HTTP::Methods::VERSION = '6.17';
use strict;
use warnings;
use URI;
@@ -269,23 +269,17 @@ sub my_readline {
or die "read timeout";
# consume all incoming bytes
- while(1) {
- my $bytes_read = $self->sysread($_, 1024, length);
- if(defined $bytes_read) {
- $new_bytes += $bytes_read;
- last if $bytes_read < 1024;
- # We got exactly 1024 bytes, so we need to select() to know if there is more data
- last unless $self->can_read(0);
- }
- elsif($!{EINTR} || $!{EAGAIN} || $!{EWOULDBLOCK}) {
- redo READ;
- }
- else {
- # if we have already accumulated some data let's at
- # least return that as a line
- length or die "$what read failed: $!";
- last;
- }
+ my $bytes_read = $self->sysread($_, 1024, length);
+ if(defined $bytes_read) {
+ $new_bytes += $bytes_read;
+ }
+ elsif($!{EINTR} || $!{EAGAIN} || $!{EWOULDBLOCK}) {
+ redo READ;
+ }
+ else {
+ # if we have already accumulated some data let's at
+ # least return that as a line
+ length or die "$what read failed: $!";
}
# no line-ending, no new bytes
@@ -645,19 +639,17 @@ sub inflate_ok {
1;
-__END__
-
=pod
=encoding UTF-8
=head1 NAME
-Net::HTTP::Methods
+Net::HTTP::Methods - Methods shared by Net::HTTP and Net::HTTPS
=head1 VERSION
-version 6.13
+version 6.17
=head1 AUTHOR
@@ -671,3 +663,7 @@ This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
+
+__END__
+
+# ABSTRACT: Methods shared by Net::HTTP and Net::HTTPS
diff --git a/Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm b/Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm
index 0d5ce9a96c8..b69a502b384 100644
--- a/Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm
+++ b/Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm
@@ -1,5 +1,5 @@
package Net::HTTP::NB;
-$Net::HTTP::NB::VERSION = '6.13';
+$Net::HTTP::NB::VERSION = '6.17';
use strict;
use warnings;
@@ -60,7 +60,7 @@ Net::HTTP::NB - Non-blocking HTTP client
=head1 VERSION
-version 6.13
+version 6.17
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm b/Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm
index f8131c1f1c5..aa8e1c1c053 100644
--- a/Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm
+++ b/Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm
@@ -1,5 +1,5 @@
package Net::HTTPS;
-$Net::HTTPS::VERSION = '6.13';
+$Net::HTTPS::VERSION = '6.17';
use strict;
use warnings;
@@ -90,7 +90,7 @@ Net::HTTPS - Low-level HTTP over SSL/TLS connection (client)
=head1 VERSION
-version 6.13
+version 6.17
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/site/lib/Socket.pm b/Master/tlpkg/tlperl/site/lib/Socket.pm
index 64e18ad25e3..370deef1036 100644
--- a/Master/tlpkg/tlperl/site/lib/Socket.pm
+++ b/Master/tlpkg/tlperl/site/lib/Socket.pm
@@ -3,7 +3,7 @@ package Socket;
use strict;
{ use 5.006001; }
-our $VERSION = '2.024';
+our $VERSION = '2.027';
=head1 NAME
@@ -773,7 +773,7 @@ our @EXPORT_OK = qw(
IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP
IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH
- IPPROTO_SCTP
+ IPPROTO_ICMPV6 IPPROTO_SCTP
IP_PMTUDISC_DO IP_PMTUDISC_DONT IP_PMTUDISC_PROBE IP_PMTUDISC_WANT
@@ -783,7 +783,8 @@ our @EXPORT_OK = qw(
TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
- TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_WINDOW_CLAMP
+ TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_USER_TIMEOUT
+ TCP_WINDOW_CLAMP
IN6ADDR_ANY IN6ADDR_LOOPBACK
diff --git a/Master/tlpkg/tlperl/site/lib/Test/Needs.pm b/Master/tlpkg/tlperl/site/lib/Test/Needs.pm
new file mode 100755
index 00000000000..f3db264d31b
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/Test/Needs.pm
@@ -0,0 +1,315 @@
+package Test::Needs;
+use strict;
+use warnings;
+no warnings 'once';
+our $VERSION = '0.002005';
+$VERSION =~ tr/_//d;
+
+BEGIN {
+ *_WORK_AROUND_HINT_LEAKAGE
+ = "$]" < 5.011 && !("$]" >= 5.009004 && "$]" < 5.010001)
+ ? sub(){1} : sub(){0};
+ *_WORK_AROUND_BROKEN_MODULE_STATE
+ = "$]" < 5.009
+ ? sub(){1} : sub(){0};
+}
+
+sub _try_require {
+ local %^H
+ if _WORK_AROUND_HINT_LEAKAGE;
+ my ($module) = @_;
+ (my $file = "$module.pm") =~ s{::|'}{/}g;
+ my $err;
+ {
+ local $@;
+ eval { require $file }
+ or $err = $@;
+ }
+ if (defined $err) {
+ delete $INC{$file}
+ if _WORK_AROUND_BROKEN_MODULE_STATE;
+ die $err
+ unless $err =~ /\ACan't locate \Q$file\E/;
+ return !1;
+ }
+ !0;
+}
+
+sub _find_missing {
+ my @bad = map {
+ my ($module, $version) = @$_;
+ if ($module eq 'perl') {
+ $version
+ = !$version ? 0
+ : $version =~ /^[0-9]+\.[0-9]+$/ ? sprintf('%.6f', $version)
+ : $version =~ /^v?([0-9]+(?:\.[0-9]+)+)$/ ? do {
+ my @p = split /\./, $1;
+ push @p, 0
+ until @p >= 3;
+ sprintf '%d.%03d%03d', @p;
+ }
+ : $version =~ /^\x05..?$/s ? do {
+ my @p = map ord, split //, $version;
+ push @p, 0
+ until @p >= 3;
+ sprintf '%d.%03d%03d', @p;
+ }
+ : do {
+ use warnings FATAL => 'numeric';
+ no warnings 'void';
+ eval { 0 + $version; 1 } ? $version
+ : die sprintf qq{version "%s" for perl does not look like a number at %s line %s.\n},
+ $version, (caller( 1 + ($Test::Builder::Level||0) ))[1,2];
+ };
+ if ("$]" < $version) {
+ sprintf "perl %s (have %.6f)", $version, $];
+ }
+ else {
+ ();
+ }
+ }
+ elsif ($module =~ /^\d|[^\w:]|:::|[^:]:[^:]|^:|:$/) {
+ die sprintf qq{"%s" does not look like a module name at %s line %s.\n},
+ $module, (caller( 1 + ($Test::Builder::Level||0) ))[1,2];
+ die
+ }
+ elsif (_try_require($module)) {
+ local $@;
+ if (defined $version && !eval { $module->VERSION($version); 1 }) {
+ "$module $version (have ".$module->VERSION.')';
+ }
+ else {
+ ();
+ }
+ }
+ else {
+ $version ? "$module $version" : $module;
+ }
+ }
+ map {
+ if (ref eq 'HASH') {
+ my $arg = $_;
+ map [ $_ => $arg->{$_} ], sort keys %$arg;
+ }
+ elsif (ref eq 'ARRAY') {
+ my $arg = $_;
+ map [ @{$arg}[$_*2,$_*2+1] ], 0 .. int($#$arg / 2);
+ }
+ else {
+ [ $_ => undef ];
+ }
+ } @_;
+ @bad ? "Need " . join(', ', @bad) : undef;
+}
+
+sub import {
+ my $class = shift;
+ my $target = caller;
+ if (@_) {
+ local $Test::Builder::Level = ($Test::Builder::Level||0) + 1;
+ test_needs(@_);
+ }
+ no strict 'refs';
+ *{"${target}::test_needs"} = \&test_needs;
+}
+
+sub test_needs {
+ my $missing = _find_missing(@_);
+ local $Test::Builder::Level = ($Test::Builder::Level||0) + 1;
+ _fail_or_skip($missing, $ENV{RELEASE_TESTING})
+ if $missing;
+}
+
+sub _skip { _fail_or_skip($_[0], 0) }
+sub _fail { _fail_or_skip($_[0], 1) }
+
+sub _fail_or_skip {
+ my ($message, $fail) = @_;
+ if ($INC{'Test2/API.pm'}) {
+ my $ctx = Test2::API::context();
+ my $hub = $ctx->hub;
+ if ($fail) {
+ $ctx->ok(0, "Test::Needs modules available", [$message]);
+ }
+ else {
+ my $plan = $hub->plan;
+ my $tests = $hub->count;
+ if ($plan || $tests) {
+ my $skips
+ = $plan && $plan ne 'NO PLAN' ? $plan - $tests : 1;
+ $ctx->skip("Test::Needs modules not available") for 1 .. $skips;
+ $ctx->note($message);
+ }
+ else {
+ $ctx->plan(0, 'SKIP', $message);
+ }
+ }
+ $ctx->done_testing;
+ $ctx->release if $Test2::API::VERSION < 1.302053;
+ $ctx->send_event('+'._t2_terminate_event());
+ }
+ elsif ($INC{'Test/Builder.pm'}) {
+ my $tb = Test::Builder->new;
+ my $has_plan = Test::Builder->can('has_plan') ? 'has_plan'
+ : sub { $_[0]->expected_tests || eval { $_[0]->current_test($_[0]->current_test); 'no_plan' } };
+ if ($fail) {
+ $tb->plan(tests => 1)
+ unless $tb->$has_plan;
+ $tb->ok(0, "Test::Needs modules available");
+ $tb->diag($message);
+ }
+ else {
+ my $plan = $tb->$has_plan;
+ my $tests = $tb->current_test;
+ if ($plan || $tests) {
+ my $skips
+ = $plan && $plan ne 'no_plan' ? $plan - $tests : 1;
+ $tb->skip("Test::Needs modules not available")
+ for 1 .. $skips;
+ Test::Builer->can('note') ? $tb->note($message) : print "# $message\n";
+ }
+ else {
+ $tb->skip_all($message);
+ }
+ }
+ $tb->done_testing
+ if Test::Builder->can('done_testing');
+ die bless {} => 'Test::Builder::Exception'
+ if Test::Builder->can('parent') && $tb->parent;
+ }
+ else {
+ if ($fail) {
+ print "1..1\n";
+ print "not ok 1 - Test::Needs modules available\n";
+ print STDERR "# $message\n";
+ exit 1;
+ }
+ else {
+ print "1..0 # SKIP $message\n";
+ }
+ }
+ exit 0;
+}
+
+my $terminate_event;
+sub _t2_terminate_event () {
+ local $@;
+ $terminate_event ||= eval q{
+ $INC{'Test/Needs/Event/Terminate.pm'} = $INC{'Test/Needs.pm'};
+ package # hide
+ Test::Needs::Event::Terminate;
+ use Test2::Event ();
+ our @ISA = qw(Test2::Event);
+ sub no_display { 1 }
+ sub terminate { 0 }
+ __PACKAGE__;
+ } or die "$@";
+}
+
+1;
+__END__
+
+=pod
+
+=encoding utf-8
+
+=head1 NAME
+
+Test::Needs - Skip tests when modules not available
+
+=head1 SYNOPSIS
+
+ # need one module
+ use Test::Needs 'Some::Module';
+
+ # need multiple modules
+ use Test::Needs 'Some::Module', 'Some::Other::Module';
+
+ # need a given version of a module
+ use Test::Needs {
+ 'Some::Module' => '1.005',
+ };
+
+ # check later
+ use Test::Needs;
+ test_needs 'Some::Module';
+
+ # skips remainder of subtest
+ use Test::More;
+ use Test::Needs;
+ subtest 'my subtest' => sub {
+ test_needs 'Some::Module';
+ ...
+ };
+
+ # check perl version
+ use Test::Needs { perl => 5.020 };
+
+=head1 DESCRIPTION
+
+Skip test scripts if modules are not available. The requested modules will be
+loaded, and optionally have their versions checked. If the module is missing,
+the test script will be skipped. Modules that are found but fail to compile
+will exit with an error rather than skip.
+
+If used in a subtest, the remainder of the subtest will be skipped.
+
+Skipping will work even if some tests have already been run, or if a plan has
+been declared.
+
+Versions are checked via a C<< $module->VERSION($wanted_version) >> call.
+Versions must be provided in a format that will be accepted. No extra
+processing is done on them.
+
+If C<perl> is used as a module, the version is checked against the running perl
+version (L<$]|perlvar/$]>). The version can be specified as a number,
+dotted-decimal string, v-string, or version object.
+
+If the C<RELEASE_TESTING> environment variable is set, the tests will fail
+rather than skip. Subtests will be aborted, but the test script will continue
+running after that point.
+
+=head1 EXPORTS
+
+=head2 test_needs
+
+Has the same interface as when using Test::Needs in a C<use>.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<Test::Requires>
+
+A similar module, with some important differences. L<Test::Requires> will act
+as a C<use> statement (despite its name), calling the import sub. Under
+C<RELEASE_TESTING>, it will BAIL_OUT if a module fails to load rather than
+using a normal test fail. It also doesn't distinguish between missing modules
+and broken modules.
+
+=item L<Test2::Require::Module>
+
+Part of the L<Test2> ecosystem. Only supports running as a C<use> command to
+skip an entire plan.
+
+=back
+
+=head1 AUTHOR
+
+haarg - Graham Knop (cpan:HAARG) <haarg@haarg.org>
+
+=head1 CONTRIBUTORS
+
+None so far.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2016 the Test::Needs L</AUTHOR> and L</CONTRIBUTORS>
+as listed above.
+
+=head1 LICENSE
+
+This library is free software and may be distributed under the same terms
+as perl itself. See L<http://dev.perl.org/licenses/>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/Tk.pm b/Master/tlpkg/tlperl/site/lib/Tk.pm
index 831eef8e3fc..afaa505afb9 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk.pm
+++ b/Master/tlpkg/tlperl/site/lib/Tk.pm
@@ -71,7 +71,7 @@ $Tk::CHANGE = 'git-controlled';
# is created, $VERSION is checked by bootstrap
$Tk::version = '8.4';
$Tk::patchLevel = '8.4';
-$Tk::VERSION = '804.033';
+$Tk::VERSION = '804.034';
$Tk::VERSION =~ s{_}{};
$Tk::XS_VERSION = $Tk::VERSION;
$Tk::strictMotif = 0;
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/Config.pm b/Master/tlpkg/tlperl/site/lib/Tk/Config.pm
index a6b04934cf0..66c66a1aa5a 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk/Config.pm
+++ b/Master/tlpkg/tlperl/site/lib/Tk/Config.pm
@@ -2,7 +2,7 @@
package Tk::Config;
require Exporter;
use base qw(Exporter);
-$VERSION = '804.033';
+$VERSION = '804.034';
$inc = '-I$(TKDIR) -I$(TKDIR)/pTk/mTk/xlib';
$define = '';
$xlib = '';
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/Event.pm b/Master/tlpkg/tlperl/site/lib/Tk/Event.pm
index f00a0b5bdbe..39ad4c91fbf 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk/Event.pm
+++ b/Master/tlpkg/tlperl/site/lib/Tk/Event.pm
@@ -1,8 +1,8 @@
package Tk::Event;
use vars qw($VERSION $XS_VERSION @EXPORT_OK);
END { CleanupGlue() }
-$VERSION = '4.033';
-$XS_VERSION = '804.033';
+$VERSION = '4.035';
+$XS_VERSION = '804.034';
$XS_VERSION =~ s{_}{};
use base qw(Exporter);
use XSLoader;
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm b/Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm
index a1f2eedb09e..8a24621ba59 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm
+++ b/Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm
@@ -10,7 +10,7 @@ package Tk::NoteBook;
use vars qw($VERSION);
#$VERSION = sprintf '4.%03d', q$Revision: #9 $ =~ /\D(\d+)\s*$/;
-$VERSION = '4.011';
+$VERSION = '4.012';
require Tk::NBFrame;
use base qw(Tk::Derived Tk::NBFrame);
@@ -323,10 +323,11 @@ sub FindMenu {
my $page;
foreach $page (@{$w->{'windows'}}) {
my $i = $w->pagecget($page, -underline);
+ next if $i < 0;
my $l = $w->pagecget($page, -label);
next if (not defined $l);
my $c = substr($l, $i, 1);
- if ($char =~ /$c/i) {
+ if ($char =~ /\Q$c/i) {
if ($w->pagecget($page, -state) ne 'disabled') {
$w->raise($page);
return $w;
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/Table.pod b/Master/tlpkg/tlperl/site/lib/Tk/Table.pod
index 02b6690b869..fa9d8c3658e 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk/Table.pod
+++ b/Master/tlpkg/tlperl/site/lib/Tk/Table.pod
@@ -61,8 +61,10 @@ specified by -rows (default 10), and number of columns specified by -columns
If the Table is told it can take the keyboard focus then cursor and scroll
keys scroll the displayed widgets.
-The Table will create and manage its own scrollbars if requested via
--scrollbars.
+C<-scrollbars>. By default, scrollbars will be added C<nw>.
+To disable scrollbars, set C<-scrollbars> to an empty string:
+
+ $table = $parent->Table(-scrollbars => '', ...);
The table can be emptied using
@@ -71,7 +73,7 @@ The table can be emptied using
the widgets which were in the table are destroyed.
-The Tk::Table widget is derived from a Tk::Frame, so inherits all its
+The Tk::Table widget is derived from a L<Tk::Frame>, so inherits all its
configure options.
The default focus traversal is giving the focus only to the table
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod b/Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod
index 828634bdf34..d4dc62075d3 100644
--- a/Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod
+++ b/Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod
@@ -4,7 +4,7 @@
=head1 NAME
-Tk::getOpenFile, Tk::getSaveFile - pop up a dialog box for the user to select a file to open or save.
+Tk::getOpenFile - pop up a dialog box for the user to select a file to open.
=for category Popups and Dialogs
diff --git a/Master/tlpkg/tlperl/site/lib/Tk/getSaveFile.pod b/Master/tlpkg/tlperl/site/lib/Tk/getSaveFile.pod
new file mode 100755
index 00000000000..af9e088def5
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/Tk/getSaveFile.pod
@@ -0,0 +1,11 @@
+=head1 NAME
+
+Tk::getSaveFile - pop up a dialog box for the user to select a file to save.
+
+=for category Popups and Dialogs
+
+=head1 DESCRIPTION
+
+See L<Tk::getOpenFile>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/site/lib/Try/Tiny.pm b/Master/tlpkg/tlperl/site/lib/Try/Tiny.pm
index 476a215fe39..14f5b093172 100644
--- a/Master/tlpkg/tlperl/site/lib/Try/Tiny.pm
+++ b/Master/tlpkg/tlperl/site/lib/Try/Tiny.pm
@@ -1,8 +1,8 @@
-package Try::Tiny; # git description: v0.27-8-g8dc27c7
+package Try::Tiny; # git description: v0.29-2-g3b23a06
use 5.006;
# ABSTRACT: Minimal try/catch with proper preservation of $@
-our $VERSION = '0.28';
+our $VERSION = '0.30';
use strict;
use warnings;
@@ -70,8 +70,7 @@ sub try (&;@) {
# $catch->();
# name the blocks if we have Sub::Name installed
- my $caller = caller;
- _subname("${caller}::try {...} " => $try)
+ _subname(caller().'::try {...} ' => $try)
if _HAS_SUBNAME;
# set up scope guards to invoke the finally blocks at the end.
@@ -140,8 +139,7 @@ sub catch (&;@) {
croak 'Useless bare catch()' unless wantarray;
- my $caller = caller;
- _subname("${caller}::catch {...} " => $block)
+ _subname(caller().'::catch {...} ' => $block)
if _HAS_SUBNAME;
return (
bless(\$block, 'Try::Tiny::Catch'),
@@ -154,8 +152,7 @@ sub finally (&;@) {
croak 'Useless bare finally()' unless wantarray;
- my $caller = caller;
- _subname("${caller}::finally {...} " => $block)
+ _subname(caller().'::finally {...} ' => $block)
if _HAS_SUBNAME;
return (
bless(\$block, 'Try::Tiny::Finally'),
@@ -208,7 +205,7 @@ Try::Tiny - Minimal try/catch with proper preservation of $@
=head1 VERSION
-version 0.28
+version 0.30
=head1 SYNOPSIS
@@ -399,8 +396,10 @@ not yet handled.
C<$@> must be properly localized before invoking C<eval> in order to avoid this
issue.
-More specifically, C<$@> is clobbered at the beginning of the C<eval>, which
-also makes it impossible to capture the previous error before you die (for
+More specifically,
+L<before Perl version 5.14.0|perl5140delta/"Exception Handling">
+C<$@> was clobbered at the beginning of the C<eval>, which
+also made it impossible to capture the previous error before you die (for
instance when making exception objects with error stacks).
For this reason C<try> will actually set C<$@> to its previous value (the one
@@ -443,7 +442,7 @@ because due to the previous caveats it may have been unset.
C<$@> could also be an overloaded error object that evaluates to false, but
that's asking for trouble anyway.
-The classic failure mode is:
+The classic failure mode (fixed in L<Perl 5.14.0|perl5140delta/"Exception Handling">) is:
sub Object::DESTROY {
eval { ... }
@@ -479,9 +478,11 @@ be sure the C<eval> was aborted due to an error:
This is because an C<eval> that caught a C<die> will always return a false
value.
-=head1 SHINY SYNTAX
+=head1 ALTERNATE SYNTAX
-Using Perl 5.10 you can use L<perlsyn/"Switch statements">.
+Using Perl 5.10 you can use L<perlsyn/"Switch statements"> (but please don't,
+because that syntax has since been deprecated because there was too much
+unexpected magical behaviour).
=for stopwords topicalizer
@@ -626,8 +627,8 @@ confusing behavior:
}
}
-Note that this behavior was changed once again in L<Perl5 version 18
-|https://metacpan.org/module/perldelta#given-now-aliases-the-global-_>.
+Note that this behavior was changed once again in
+L<Perl5 version 18|https://metacpan.org/module/perldelta#given-now-aliases-the-global-_>.
However, since the entirety of lexical C<$_> is now L<considered experimental
|https://metacpan.org/module/perldelta#Lexical-_-is-now-experimental>, it
is unclear whether the new version 18 behavior is final.
@@ -699,7 +700,7 @@ Jesse Luehrs <doy@tozt.net>
=head1 CONTRIBUTORS
-=for stopwords Karen Etheridge Peter Rabbitson Ricardo Signes Mark Fowler Graham Knop Lukas Mai Dagfinn Ilmari Mannsåker Paul Howarth Rudolf Leermakers anaxagoras awalker chromatic Alex cm-perl Andrew Yates David Lowe Glenn Hans Dieter Pearcey Jonathan Yu Marc Mims Stosberg Pali
+=for stopwords Karen Etheridge Peter Rabbitson Ricardo Signes Mark Fowler Graham Knop Lukas Mai Aristotle Pagaltzis Dagfinn Ilmari Mannsåker Paul Howarth Rudolf Leermakers anaxagoras awalker chromatic Alex cm-perl Andrew Yates David Lowe Glenn Hans Dieter Pearcey Jens Berthold Jonathan Yu Marc Mims Stosberg Pali
=over 4
@@ -729,6 +730,10 @@ Lukas Mai <l.mai@web.de>
=item *
+Aristotle Pagaltzis <pagaltzis@gmx.de>
+
+=item *
+
Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
=item *
@@ -777,6 +782,10 @@ Hans Dieter Pearcey <hdp@weftsoar.net>
=item *
+Jens Berthold <jens@jebecs.de>
+
+=item *
+
Jonathan Yu <JAWNSY@cpan.org>
=item *
diff --git a/Master/tlpkg/tlperl/site/lib/Types/Serialiser.pm b/Master/tlpkg/tlperl/site/lib/Types/Serialiser.pm
deleted file mode 100644
index 7faa1d9b0bd..00000000000
--- a/Master/tlpkg/tlperl/site/lib/Types/Serialiser.pm
+++ /dev/null
@@ -1,254 +0,0 @@
-=head1 NAME
-
-Types::Serialiser - simple data types for common serialisation formats
-
-=encoding utf-8
-
-=head1 SYNOPSIS
-
-=head1 DESCRIPTION
-
-This module provides some extra datatypes that are used by common
-serialisation formats such as JSON or CBOR. The idea is to have a
-repository of simple/small constants and containers that can be shared by
-different implementations so they become interoperable between each other.
-
-=cut
-
-package Types::Serialiser;
-
-use common::sense; # required to suppress annoying warnings
-
-our $VERSION = '1.0';
-
-=head1 SIMPLE SCALAR CONSTANTS
-
-Simple scalar constants are values that are overloaded to act like simple
-Perl values, but have (class) type to differentiate them from normal Perl
-scalars. This is necessary because these have different representations in
-the serialisation formats.
-
-=head2 BOOLEANS (Types::Serialiser::Boolean class)
-
-This type has only two instances, true and false. A natural representation
-for these in Perl is C<1> and C<0>, but serialisation formats need to be
-able to differentiate between them and mere numbers.
-
-=over 4
-
-=item $Types::Serialiser::true, Types::Serialiser::true
-
-This value represents the "true" value. In most contexts is acts like
-the number C<1>. It is up to you whether you use the variable form
-(C<$Types::Serialiser::true>) or the constant form (C<Types::Serialiser::true>).
-
-The constant is represented as a reference to a scalar containing C<1> -
-implementations are allowed to directly test for this.
-
-=item $Types::Serialiser::false, Types::Serialiser::false
-
-This value represents the "false" value. In most contexts is acts like
-the number C<0>. It is up to you whether you use the variable form
-(C<$Types::Serialiser::false>) or the constant form (C<Types::Serialiser::false>).
-
-The constant is represented as a reference to a scalar containing C<0> -
-implementations are allowed to directly test for this.
-
-=item $is_bool = Types::Serialiser::is_bool $value
-
-Returns true iff the C<$value> is either C<$Types::Serialiser::true> or
-C<$Types::Serialiser::false>.
-
-For example, you could differentiate between a perl true value and a
-C<Types::Serialiser::true> by using this:
-
- $value && Types::Serialiser::is_bool $value
-
-=item $is_true = Types::Serialiser::is_true $value
-
-Returns true iff C<$value> is C<$Types::Serialiser::true>.
-
-=item $is_false = Types::Serialiser::is_false $value
-
-Returns false iff C<$value> is C<$Types::Serialiser::false>.
-
-=back
-
-=head2 ERROR (Types::Serialiser::Error class)
-
-This class has only a single instance, C<error>. It is used to signal
-an encoding or decoding error. In CBOR for example, and object that
-couldn't be encoded will be represented by a CBOR undefined value, which
-is represented by the error value in Perl.
-
-=over 4
-
-=item $Types::Serialiser::error, Types::Serialiser::error
-
-This value represents the "error" value. Accessing values of this type
-will throw an exception.
-
-The constant is represented as a reference to a scalar containing C<undef>
-- implementations are allowed to directly test for this.
-
-=item $is_error = Types::Serialiser::is_error $value
-
-Returns false iff C<$value> is C<$Types::Serialiser::error>.
-
-=back
-
-=cut
-
-BEGIN {
- # for historical reasons, and to avoid extra dependencies in JSON::PP,
- # we alias *Types::Serialiser::Boolean with JSON::PP::Boolean.
- package JSON::PP::Boolean;
-
- *Types::Serialiser::Boolean:: = *JSON::PP::Boolean::;
-}
-
-{
- # this must done before blessing to work around bugs
- # in perl < 5.18 (it seems to be fixed in 5.18).
- package Types::Serialiser::BooleanBase;
-
- use overload
- "0+" => sub { ${$_[0]} },
- "++" => sub { $_[0] = ${$_[0]} + 1 },
- "--" => sub { $_[0] = ${$_[0]} - 1 },
- fallback => 1;
-
- @Types::Serialiser::Boolean::ISA = Types::Serialiser::BooleanBase::;
-}
-
-our $true = do { bless \(my $dummy = 1), Types::Serialiser::Boolean:: };
-our $false = do { bless \(my $dummy = 0), Types::Serialiser::Boolean:: };
-our $error = do { bless \(my $dummy ), Types::Serialiser::Error:: };
-
-sub true () { $true }
-sub false () { $false }
-sub error () { $error }
-
-sub is_bool ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: }
-sub is_true ($) { $_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: }
-sub is_false ($) { !$_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: }
-sub is_error ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Error:: }
-
-package Types::Serialiser::Error;
-
-sub error {
- require Carp;
- Carp::croak ("caught attempt to use the Types::Serialiser::error value");
-};
-
-use overload
- "0+" => \&error,
- "++" => \&error,
- "--" => \&error,
- fallback => 1;
-
-=head1 NOTES FOR XS USERS
-
-The recommended way to detect whether a scalar is one of these objects
-is to check whether the stash is the C<Types::Serialiser::Boolean> or
-C<Types::Serialiser::Error> stash, and then follow the scalar reference to
-see if it's C<1> (true), C<0> (false) or C<undef> (error).
-
-While it is possible to use an isa test, directly comparing stash pointers
-is faster and guaranteed to work.
-
-For historical reasons, the C<Types::Serialiser::Boolean> stash is
-just an alias for C<JSON::PP::Boolean>. When printed, the classname
-with usually be C<JSON::PP::Boolean>, but isa tests and stash pointer
-comparison will normally work correctly (i.e. Types::Serialiser::true ISA
-JSON::PP::Boolean, but also ISA Types::Serialiser::Boolean).
-
-=head1 A GENERIC OBJECT SERIALIATION PROTOCOL
-
-This section explains the object serialisation protocol used by
-L<CBOR::XS>. It is meant to be generic enough to support any kind of
-generic object serialiser.
-
-This protocol is called "the Types::Serialiser object serialisation
-protocol".
-
-=head2 ENCODING
-
-When the encoder encounters an object that it cannot otherwise encode (for
-example, L<CBOR::XS> can encode a few special types itself, and will first
-attempt to use the special C<TO_CBOR> serialisation protocol), it will
-look up the C<FREEZE> method on the object.
-
-Note that the C<FREEZE> method will normally be called I<during> encoding,
-and I<MUST NOT> change the data structure that is being encoded in any
-way, or it might cause memory corruption or worse.
-
-If it exists, it will call it with two arguments: the object to serialise,
-and a constant string that indicates the name of the data model. For
-example L<CBOR::XS> uses C<CBOR>, and the L<JSON> and L<JSON::XS> modules
-(or any other JSON serialiser), would use C<JSON> as second argument.
-
-The C<FREEZE> method can then return zero or more values to identify the
-object instance. The serialiser is then supposed to encode the class name
-and all of these return values (which must be encodable in the format)
-using the relevant form for Perl objects. In CBOR for example, there is a
-registered tag number for encoded perl objects.
-
-The values that C<FREEZE> returns must be serialisable with the serialiser
-that calls it. Therefore, it is recommended to use simple types such as
-strings and numbers, and maybe array references and hashes (basically, the
-JSON data model). You can always use a more complex format for a specific
-data model by checking the second argument, the data model.
-
-The "data model" is not the same as the "data format" - the data model
-indicates what types and kinds of return values can be returned from
-C<FREEZE>. For example, in C<CBOR> it is permissible to return tagged CBOR
-values, while JSON does not support these at all, so C<JSON> would be a
-valid (but too limited) data model name for C<CBOR::XS>. similarly, a
-serialising format that supports more or less the same data model as JSON
-could use C<JSON> as data model without losing anything.
-
-=head2 DECODING
-
-When the decoder then encounters such an encoded perl object, it should
-look up the C<THAW> method on the stored classname, and invoke it with the
-classname, the constant string to identify the data model/data format, and
-all the return values returned by C<FREEZE>.
-
-=head2 EXAMPLES
-
-See the C<OBJECT SERIALISATION> section in the L<CBOR::XS> manpage for
-more details, an example implementation, and code examples.
-
-Here is an example C<FREEZE>/C<THAW> method pair:
-
- sub My::Object::FREEZE {
- my ($self, $model) = @_;
-
- ($self->{type}, $self->{id}, $self->{variant})
- }
-
- sub My::Object::THAW {
- my ($class, $model, $type, $id, $variant) = @_;
-
- $class->new (type => $type, id => $id, variant => $variant)
- }
-
-=head1 BUGS
-
-The use of L<overload> makes this module much heavier than it should be
-(on my system, this module: 4kB RSS, overload: 260kB RSS).
-
-=head1 SEE ALSO
-
-Currently, L<JSON::XS> and L<CBOR::XS> use these types.
-
-=head1 AUTHOR
-
- Marc Lehmann <schmorp@schmorp.de>
- http://home.schmorp.de/
-
-=cut
-
-1
-
diff --git a/Master/tlpkg/tlperl/site/lib/Types/Serialiser/Error.pm b/Master/tlpkg/tlperl/site/lib/Types/Serialiser/Error.pm
deleted file mode 100644
index 3e88821ad39..00000000000
--- a/Master/tlpkg/tlperl/site/lib/Types/Serialiser/Error.pm
+++ /dev/null
@@ -1,27 +0,0 @@
-=head1 NAME
-
-Types::Serialiser::Error - dummy module for Types::Serialiser
-
-=head1 SYNOPSIS
-
- # do not "use" yourself
-
-=head1 DESCRIPTION
-
-This module exists only to provide overload resolution for Storable and
-similar modules that assume that class name equals module name. See
-L<Types::Serialiser> for more info about this class.
-
-=cut
-
-use Types::Serialiser ();
-
-=head1 AUTHOR
-
- Marc Lehmann <schmorp@schmorp.de>
- http://home.schmorp.de/
-
-=cut
-
-1
-
diff --git a/Master/tlpkg/tlperl/site/lib/URI.pm b/Master/tlpkg/tlperl/site/lib/URI.pm
index d0f89276769..ac53e14c28b 100644
--- a/Master/tlpkg/tlperl/site/lib/URI.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI.pm
@@ -3,7 +3,7 @@ package URI;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
our ($ABS_REMOTE_LEADING_DOTS, $ABS_ALLOW_RELATIVE_SCHEME, $DEFAULT_QUERY_FORM_DELIMITER);
@@ -358,6 +358,8 @@ URI - Uniform Resource Identifiers (absolute and relative)
=head1 SYNOPSIS
+ use URI;
+
$u1 = URI->new("http://www.perl.com");
$u2 = URI->new("foo", "http");
$u3 = $u2->abs($u1);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/Escape.pm b/Master/tlpkg/tlperl/site/lib/URI/Escape.pm
index 30f2b312755..f9392d446fe 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/Escape.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/Escape.pm
@@ -181,6 +181,7 @@ sub _fail_hi {
sub uri_escape_utf8 {
my $text = shift;
+ return undef unless defined $text;
utf8::encode($text);
return uri_escape($text, @_);
}
diff --git a/Master/tlpkg/tlperl/site/lib/URI/IRI.pm b/Master/tlpkg/tlperl/site/lib/URI/IRI.pm
index 3dadd39f3f0..df68c386757 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/IRI.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/IRI.pm
@@ -8,7 +8,7 @@ use URI ();
use overload '""' => sub { shift->as_string };
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub new {
diff --git a/Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm b/Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm
index 8f1448f021e..1408aadba97 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm
@@ -3,7 +3,7 @@ package URI::QueryParam;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub URI::_query::query_param {
diff --git a/Master/tlpkg/tlperl/site/lib/URI/Split.pm b/Master/tlpkg/tlperl/site/lib/URI/Split.pm
index d66caf67c37..a44d3a8d10a 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/Split.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/Split.pm
@@ -3,7 +3,7 @@ package URI::Split;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use Exporter 5.57 'import';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_foreign.pm b/Master/tlpkg/tlperl/site/lib/URI/_foreign.pm
index fbee23e05ab..a500a3659c0 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_foreign.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_foreign.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI::_generic';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
1;
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_generic.pm b/Master/tlpkg/tlperl/site/lib/URI/_generic.pm
index 7f8476006ec..f749cc27e3a 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_generic.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_generic.pm
@@ -8,7 +8,7 @@ use parent qw(URI URI::_query);
use URI::Escape qw(uri_unescape);
use Carp ();
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
my $ACHAR = $URI::uric; $ACHAR =~ s,\\[/?],,g;
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_idna.pm b/Master/tlpkg/tlperl/site/lib/URI/_idna.pm
index 2ec600b9503..e4206158946 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_idna.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_idna.pm
@@ -9,11 +9,11 @@ use warnings;
use URI::_punycode qw(encode_punycode decode_punycode);
use Carp qw(croak);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
BEGIN {
- *URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS = $] < 5.008_003
+ *URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS = "$]" < 5.008_003
? sub () { 1 }
: sub () { 0 }
;
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_ldap.pm b/Master/tlpkg/tlperl/site/lib/URI/_ldap.pm
index 42e559d0bda..18075c527c0 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_ldap.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_ldap.pm
@@ -7,7 +7,7 @@ package URI::_ldap;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use URI::Escape qw(uri_unescape);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_login.pm b/Master/tlpkg/tlperl/site/lib/URI/_login.pm
index 331fdc1e1b9..b4a86b01d4c 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_login.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_login.pm
@@ -5,7 +5,7 @@ use warnings;
use parent qw(URI::_server URI::_userpass);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
# Generic terminal logins. This is used as a base class for 'telnet',
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_punycode.pm b/Master/tlpkg/tlperl/site/lib/URI/_punycode.pm
index 1ade17b2922..ca5ebf24857 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_punycode.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_punycode.pm
@@ -3,7 +3,7 @@ package URI::_punycode;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use Exporter 'import';
@@ -147,58 +147,72 @@ sub min {
1;
__END__
+=encoding utf8
+
=head1 NAME
URI::_punycode - encodes Unicode string in Punycode
=head1 SYNOPSIS
- use URI::_punycode;
- $punycode = encode_punycode($unicode);
- $unicode = decode_punycode($punycode);
+ use strict;
+ use warnings;
+ use utf8;
-=head1 DESCRIPTION
+ use URI::_punycode qw(encode_punycode decode_punycode);
-URI::_punycode is a module to encode / decode Unicode strings into
-Punycode, an efficient encoding of Unicode for use with IDNA.
+ # encode a unicode string
+ my $punycode = encode_punycode('http://☃.net'); # http://.net-xc8g
+ $punycode = encode_punycode('bücher'); # bcher-kva
+ $punycode = encode_punycode('他们为什么不说中文'); # ihqwcrb4cv8a8dqg056pqjye
-This module requires Perl 5.6.0 or over to handle UTF8 flagged Unicode
-strings.
+ # decode a punycode string back into a unicode string
+ my $unicode = decode_punycode('http://.net-xc8g'); # http://☃.net
+ $unicode = decode_punycode('bcher-kva'); # bücher
+ $unicode = decode_punycode('ihqwcrb4cv8a8dqg056pqjye'); # 他们为什么不说中文
-=head1 FUNCTIONS
+=head1 DESCRIPTION
-This module exports following functions by default.
+L<URI::_punycode> is a module to encode / decode Unicode strings into
+L<Punycode|https://tools.ietf.org/html/rfc3492>, an efficient
+encoding of Unicode for use with L<IDNA|https://tools.ietf.org/html/rfc5890>.
-=over 4
+=head1 FUNCTIONS
+
+All functions throw exceptions on failure. You can C<catch> them with
+L<Syntax::Keyword::Try> or L<Try::Tiny>. The following functions are exported
+by default.
-=item encode_punycode
+=head2 encode_punycode
- $punycode = encode_punycode($unicode);
+ my $punycode = encode_punycode('http://☃.net'); # http://.net-xc8g
+ $punycode = encode_punycode('bücher'); # bcher-kva
+ $punycode = encode_punycode('他们为什么不说中文') # ihqwcrb4cv8a8dqg056pqjye
-takes Unicode string (UTF8-flagged variable) and returns Punycode
+Takes a Unicode string (UTF8-flagged variable) and returns a Punycode
encoding for it.
-=item decode_punycode
+=head2 decode_punycode
- $unicode = decode_punycode($punycode)
+ my $unicode = decode_punycode('http://.net-xc8g'); # http://☃.net
+ $unicode = decode_punycode('bcher-kva'); # bücher
+ $unicode = decode_punycode('ihqwcrb4cv8a8dqg056pqjye'); # 他们为什么不说中文
-takes Punycode encoding and returns original Unicode string.
+Takes a Punycode encoding and returns original Unicode string.
-=back
+=head1 AUTHOR
-These functions throw exceptions on failure. You can catch 'em via
-C<eval>.
+Tatsuhiko Miyagawa <F<miyagawa@bulknews.net>> is the author of
+L<IDNA::Punycode> which was the basis for this module.
-=head1 AUTHOR
+=head1 SEE ALSO
+
+L<IDNA::Punycode>, L<RFC 3492|https://tools.ietf.org/html/rfc3492>,
+L<RFC 5891|https://tools.ietf.org/html/rfc5891>
-Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt> is the author of
-IDNA::Punycode v0.02 which was the basis for this module.
+=head1 COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
-=head1 SEE ALSO
-
-L<IDNA::Punycode>, RFC 3492
-
=cut
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_query.pm b/Master/tlpkg/tlperl/site/lib/URI/_query.pm
index 06162638572..94cb71b59f6 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_query.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_query.pm
@@ -6,7 +6,7 @@ use warnings;
use URI ();
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub query
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_segment.pm b/Master/tlpkg/tlperl/site/lib/URI/_segment.pm
index 9e39faa989e..5a0b1a683db 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_segment.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_segment.pm
@@ -11,7 +11,7 @@ use URI::Escape qw(uri_unescape);
use overload '""' => sub { $_[0]->[0] },
fallback => 1;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub new
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_server.pm b/Master/tlpkg/tlperl/site/lib/URI/_server.pm
index 055bb49f716..7fcdaaae31d 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_server.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_server.pm
@@ -7,7 +7,7 @@ use parent 'URI::_generic';
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub _uric_escape {
diff --git a/Master/tlpkg/tlperl/site/lib/URI/_userpass.pm b/Master/tlpkg/tlperl/site/lib/URI/_userpass.pm
index 1e48c0288d2..22b0daa4f73 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/_userpass.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/_userpass.pm
@@ -5,7 +5,7 @@ use warnings;
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub user
diff --git a/Master/tlpkg/tlperl/site/lib/URI/data.pm b/Master/tlpkg/tlperl/site/lib/URI/data.pm
index 38ee7cf98e6..452dc982db3 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/data.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/data.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use MIME::Base64 qw(encode_base64 decode_base64);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/Base.pm b/Master/tlpkg/tlperl/site/lib/URI/file/Base.pm
index cbb0970c273..dc1daf81d20 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/Base.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/Base.pm
@@ -5,7 +5,7 @@ use warnings;
use URI::Escape qw();
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub new
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm b/Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm
index 081d94e2166..07538c08ad4 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI::file::Win32';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub fix_path
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm b/Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm
index f9eda0a8190..fb634c95f19 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm
@@ -7,7 +7,7 @@ use parent 'URI::file::Base';
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub _file_extract_path
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm b/Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm
index a089491cb09..c290d40a057 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI::file::Win32';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
# The Win32 version translates k:/foo to file://k:/foo (?!)
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm b/Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm
index 2853ac0e0bc..5164d3bfa59 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI::file::Unix';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub _file_extract_path
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm b/Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm
index e75887b0227..42d1a51862a 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm
@@ -7,7 +7,7 @@ use parent 'URI::file::Base';
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub _file_extract_path
diff --git a/Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm b/Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm
index eac920f9ea3..b9697f91286 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm
@@ -7,7 +7,7 @@ use parent 'URI::file::Base';
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub _file_extract_authority
diff --git a/Master/tlpkg/tlperl/site/lib/URI/ftp.pm b/Master/tlpkg/tlperl/site/lib/URI/ftp.pm
index c7dd7999697..451af0a5ee4 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/ftp.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/ftp.pm
@@ -3,7 +3,7 @@ package URI::ftp;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent qw(URI::_server URI::_userpass);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/gopher.pm b/Master/tlpkg/tlperl/site/lib/URI/gopher.pm
index 03a1d6c0004..02f4334a194 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/gopher.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/gopher.pm
@@ -3,7 +3,7 @@ package URI::gopher; # <draft-murali-url-gopher>, Dec 4, 1996
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_server';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/http.pm b/Master/tlpkg/tlperl/site/lib/URI/http.pm
index 3d8eaf5a911..85650607d05 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/http.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/http.pm
@@ -3,7 +3,7 @@ package URI::http;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_server';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/https.pm b/Master/tlpkg/tlperl/site/lib/URI/https.pm
index 9dbb02bb2ce..1e80fe86587 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/https.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/https.pm
@@ -3,7 +3,7 @@ package URI::https;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::http';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/ldap.pm b/Master/tlpkg/tlperl/site/lib/URI/ldap.pm
index b5f9a07a917..a8b10ec6249 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/ldap.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/ldap.pm
@@ -7,7 +7,7 @@ package URI::ldap;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent qw(URI::_ldap URI::_server);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/ldapi.pm b/Master/tlpkg/tlperl/site/lib/URI/ldapi.pm
index 2e47a5e35fe..6a0cabef7ce 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/ldapi.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/ldapi.pm
@@ -3,7 +3,7 @@ package URI::ldapi;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent qw(URI::_ldap URI::_generic);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/ldaps.pm b/Master/tlpkg/tlperl/site/lib/URI/ldaps.pm
index 50db6d270b7..371b90e6ba1 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/ldaps.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/ldaps.pm
@@ -3,7 +3,7 @@ package URI::ldaps;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::ldap';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/mailto.pm b/Master/tlpkg/tlperl/site/lib/URI/mailto.pm
index b9c4e35f541..33381fdeceb 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/mailto.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/mailto.pm
@@ -3,7 +3,7 @@ package URI::mailto; # RFC 2368
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent qw(URI URI::_query);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/mms.pm b/Master/tlpkg/tlperl/site/lib/URI/mms.pm
index 9b745ab054b..cb7b623707d 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/mms.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/mms.pm
@@ -3,7 +3,7 @@ package URI::mms;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::http';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/news.pm b/Master/tlpkg/tlperl/site/lib/URI/news.pm
index c3a32cd603c..bdf003bec1c 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/news.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/news.pm
@@ -3,7 +3,7 @@ package URI::news; # draft-gilman-news-url-01
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_server';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/nntp.pm b/Master/tlpkg/tlperl/site/lib/URI/nntp.pm
index 57c9fcfe0d5..e1a55b6e632 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/nntp.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/nntp.pm
@@ -3,7 +3,7 @@ package URI::nntp; # draft-gilman-news-url-01
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::news';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/pop.pm b/Master/tlpkg/tlperl/site/lib/URI/pop.pm
index 3162a9db9ba..237d6cd4c45 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/pop.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/pop.pm
@@ -3,7 +3,7 @@ package URI::pop; # RFC 2384
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_server';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/rlogin.pm b/Master/tlpkg/tlperl/site/lib/URI/rlogin.pm
index e740ca257b5..8d589d7c90d 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/rlogin.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/rlogin.pm
@@ -3,7 +3,7 @@ package URI::rlogin;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_login';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/rsync.pm b/Master/tlpkg/tlperl/site/lib/URI/rsync.pm
index 16f3a0c5577..1ffae852c90 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/rsync.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/rsync.pm
@@ -5,7 +5,7 @@ package URI::rsync; # http://rsync.samba.org/
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent qw(URI::_server URI::_userpass);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/rtsp.pm b/Master/tlpkg/tlperl/site/lib/URI/rtsp.pm
index 21cb24f09bb..2c2b2e66c50 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/rtsp.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/rtsp.pm
@@ -3,7 +3,7 @@ package URI::rtsp;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::http';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/rtspu.pm b/Master/tlpkg/tlperl/site/lib/URI/rtspu.pm
index 9e61ecbf335..e285776c013 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/rtspu.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/rtspu.pm
@@ -3,7 +3,7 @@ package URI::rtspu;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::rtsp';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/sftp.pm b/Master/tlpkg/tlperl/site/lib/URI/sftp.pm
index 2d271fa97d6..293476d7888 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/sftp.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/sftp.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'URI::ssh';
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
1;
diff --git a/Master/tlpkg/tlperl/site/lib/URI/sip.pm b/Master/tlpkg/tlperl/site/lib/URI/sip.pm
index a1574aa1580..517f7049e1d 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/sip.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/sip.pm
@@ -14,7 +14,7 @@ use parent qw(URI::_server URI::_userpass);
use URI::Escape qw(uri_unescape);
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
sub default_port { 5060 }
diff --git a/Master/tlpkg/tlperl/site/lib/URI/sips.pm b/Master/tlpkg/tlperl/site/lib/URI/sips.pm
index fc782e4a75f..f89f116654c 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/sips.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/sips.pm
@@ -3,7 +3,7 @@ package URI::sips;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::sip';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/snews.pm b/Master/tlpkg/tlperl/site/lib/URI/snews.pm
index 1865c2fb548..546e58c9960 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/snews.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/snews.pm
@@ -3,7 +3,7 @@ package URI::snews; # draft-gilman-news-url-01
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::news';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/ssh.pm b/Master/tlpkg/tlperl/site/lib/URI/ssh.pm
index d73448bb2ba..8fb25eb689a 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/ssh.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/ssh.pm
@@ -3,7 +3,7 @@ package URI::ssh;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_login';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/telnet.pm b/Master/tlpkg/tlperl/site/lib/URI/telnet.pm
index 9f578f68548..82daef344c9 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/telnet.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/telnet.pm
@@ -3,7 +3,7 @@ package URI::telnet;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_login';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/tn3270.pm b/Master/tlpkg/tlperl/site/lib/URI/tn3270.pm
index 232460017a8..f0e348314e6 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/tn3270.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/tn3270.pm
@@ -3,7 +3,7 @@ package URI::tn3270;
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::_login';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/urn.pm b/Master/tlpkg/tlperl/site/lib/URI/urn.pm
index 679d205e07e..659b2656621 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/urn.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/urn.pm
@@ -3,7 +3,7 @@ package URI::urn; # RFC 2141
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI';
diff --git a/Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm b/Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm
index b335044b885..c8469535c4f 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm
@@ -3,6 +3,8 @@ package URI::urn::isbn; # RFC 3187
use strict;
use warnings;
+our $VERSION = '1.73';
+
use parent 'URI::urn';
use Carp qw(carp);
diff --git a/Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm b/Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm
index 7d38bc9f73e..010fcf0d4bf 100644
--- a/Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm
+++ b/Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm
@@ -3,7 +3,7 @@ package URI::urn::oid; # RFC 2061
use strict;
use warnings;
-our $VERSION = '1.71';
+our $VERSION = '1.73';
$VERSION = eval $VERSION;
use parent 'URI::urn';
diff --git a/Master/tlpkg/tlperl/site/lib/Win32/Process.pm b/Master/tlpkg/tlperl/site/lib/Win32/Process.pm
deleted file mode 100644
index 0f2a681d51b..00000000000
--- a/Master/tlpkg/tlperl/site/lib/Win32/Process.pm
+++ /dev/null
@@ -1,224 +0,0 @@
-package Win32::Process;
-
-require Exporter;
-require DynaLoader;
-@ISA = qw(Exporter DynaLoader);
-
-$VERSION = '0.16';
-
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-@EXPORT = qw(
- CREATE_DEFAULT_ERROR_MODE
- CREATE_NEW_CONSOLE
- CREATE_NEW_PROCESS_GROUP
- CREATE_NO_WINDOW
- CREATE_SEPARATE_WOW_VDM
- CREATE_SUSPENDED
- CREATE_UNICODE_ENVIRONMENT
- DEBUG_ONLY_THIS_PROCESS
- DEBUG_PROCESS
- DETACHED_PROCESS
- HIGH_PRIORITY_CLASS
- IDLE_PRIORITY_CLASS
- INFINITE
- NORMAL_PRIORITY_CLASS
- REALTIME_PRIORITY_CLASS
- THREAD_PRIORITY_ABOVE_NORMAL
- THREAD_PRIORITY_BELOW_NORMAL
- THREAD_PRIORITY_ERROR_RETURN
- THREAD_PRIORITY_HIGHEST
- THREAD_PRIORITY_IDLE
- THREAD_PRIORITY_LOWEST
- THREAD_PRIORITY_NORMAL
- THREAD_PRIORITY_TIME_CRITICAL
-);
-
-@EXPORT_OK = qw(
- STILL_ACTIVE
- ABOVE_NORMAL_PRIORITY_CLASS
- BELOW_NORMAL_PRIORITY_CLASS
-);
-
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function.
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- local $! = 0;
- my $val = constant($constname);
- if ($! != 0) {
- my ($pack,$file,$line) = caller;
- die "Your vendor has not defined Win32::Process macro $constname, used at $file line $line.";
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-} # end AUTOLOAD
-
-bootstrap Win32::Process;
-
-# Win32::IPC > 1.02 uses the get_Win32_IPC_HANDLE method:
-*get_Win32_IPC_HANDLE = \&get_process_handle;
-
-1;
-__END__
-
-=head1 NAME
-
-Win32::Process - Create and manipulate processes.
-
-=head1 SYNOPSIS
-
- use Win32::Process;
- use Win32;
-
- sub ErrorReport{
- print Win32::FormatMessage( Win32::GetLastError() );
- }
-
- Win32::Process::Create($ProcessObj,
- "C:\\winnt\\system32\\notepad.exe",
- "notepad temp.txt",
- 0,
- NORMAL_PRIORITY_CLASS,
- ".")|| die ErrorReport();
-
- $ProcessObj->Suspend();
- $ProcessObj->Resume();
- $ProcessObj->Wait(INFINITE);
-
-=head1 DESCRIPTION
-
-This module provides access to the process control functions in the
-Win32 API.
-
-=head1 METHODS
-
-=over 8
-
-=item Win32::Process::Create($obj,$appname,$cmdline,$iflags,$cflags,$curdir)
-
-Creates a new process.
-
- Args:
-
- $obj container for process object
- $appname full path name of executable module
- $cmdline command line args
- $iflags flag: inherit calling processes handles or not
- $cflags flags for creation (see exported vars below)
- $curdir working dir of new process
-
-Returns non-zero on success, 0 on failure.
-
-=item Win32::Process::Open($obj,$pid,$iflags)
-
-Creates a handle Perl can use to an existing process as identified by $pid.
-The $iflags is the inherit flag that is passed to OpenProcess. Currently
-Win32::Process objects created using Win32::Process::Open cannot Suspend
-or Resume the process. All other calls should work.
-
-Win32::Process::Open returns non-zero on success, 0 on failure.
-
-=item Win32::Process::KillProcess($pid, $exitcode)
-
-Terminates any process identified by $pid. $exitcode will be set to
-the exit code of the process.
-
-=item $ProcessObj->Suspend()
-
-Suspend the process associated with the $ProcessObj.
-
-=item $ProcessObj->Resume()
-
-Resume a suspended process.
-
-=item $ProcessObj->Kill($exitcode)
-
-Kill the associated process, have it terminate with exit code $ExitCode.
-
-=item $ProcessObj->GetPriorityClass($class)
-
-Get the priority class of the process.
-
-=item $ProcessObj->SetPriorityClass($class)
-
-Set the priority class of the process (see exported values below for
-options). Note that the ABOVE_NORMAL_PRIORITY_CLASS and
-BELOW_NORMAL_PRIORITY_CLASS classes only work on Windows 2000
-and later.
-
-=item $ProcessObj->GetProcessAffinityMask($processAffinityMask, $systemAffinityMask)
-
-Get the process affinity mask. This is a bitvector in which each bit
-represents the processors that a process is allowed to run on.
-
-=item $ProcessObj->SetProcessAffinityMask($processAffinityMask)
-
-Set the process affinity mask. Only available on Windows NT.
-
-=item $ProcessObj->GetExitCode($exitcode)
-
-Retrieve the exitcode of the process. Will return STILL_ACTIVE if the
-process is still running. The STILL_ACTIVE constant is only exported
-by explicit request.
-
-=item $ProcessObj->Wait($timeout)
-
-Wait for the process to die. $timeout should be specified in milliseconds.
-To wait forever, specify the constant C<INFINITE>.
-
-=item $ProcessObj->GetProcessID()
-
-Returns the Process ID.
-
-=item Win32::Process::GetCurrentProcessID()
-
-Returns the current process ID, which is the same as $$. But not on cygwin,
-where $$ is the cygwin-internal PID and not the windows PID.
-On cygwin GetCurrentProcessID() returns the windows PID as needed for all
-the Win32::Process functions.
-
-=back
-
-=head1 EXPORTS
-
-The following constants are exported by default:
-
- CREATE_DEFAULT_ERROR_MODE
- CREATE_NEW_CONSOLE
- CREATE_NEW_PROCESS_GROUP
- CREATE_NO_WINDOW
- CREATE_SEPARATE_WOW_VDM
- CREATE_SUSPENDED
- CREATE_UNICODE_ENVIRONMENT
- DEBUG_ONLY_THIS_PROCESS
- DEBUG_PROCESS
- DETACHED_PROCESS
- HIGH_PRIORITY_CLASS
- IDLE_PRIORITY_CLASS
- INFINITE
- NORMAL_PRIORITY_CLASS
- REALTIME_PRIORITY_CLASS
- THREAD_PRIORITY_ABOVE_NORMAL
- THREAD_PRIORITY_BELOW_NORMAL
- THREAD_PRIORITY_ERROR_RETURN
- THREAD_PRIORITY_HIGHEST
- THREAD_PRIORITY_IDLE
- THREAD_PRIORITY_LOWEST
- THREAD_PRIORITY_NORMAL
- THREAD_PRIORITY_TIME_CRITICAL
-
-The following additional constants are exported by request only:
-
- ABOVE_NORMAL_PRIORITY_CLASS
- BELOW_NORMAL_PRIORITY_CLASS
- STILL_ACTIVE
-
-=head1 LICENSE
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Canary/Stability/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Canary/Stability/.packlist
deleted file mode 100644
index 2cfb51c8d4d..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/Canary/Stability/.packlist
+++ /dev/null
@@ -1 +0,0 @@
-C:\tlperl\site\lib\Canary\Stability.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/.packlist
new file mode 100755
index 00000000000..593f334bc1a
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/.packlist
@@ -0,0 +1,6 @@
+C:\tlperl526\bin\cpanel_json_xs
+C:\tlperl526\bin\cpanel_json_xs.bat
+C:\tlperl526\site\lib\Cpanel\JSON\XS.pm
+C:\tlperl526\site\lib\Cpanel\JSON\XS\Boolean.pm
+C:\tlperl526\site\lib\Cpanel\JSON\XS\Type.pm
+C:\tlperl526\site\lib\auto\Cpanel\JSON\XS\XS.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/XS.dll b/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/XS.dll
new file mode 100755
index 00000000000..8b7acb53851
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/XS.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist
index 5e66e1a6615..f6cf37a197b 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist
@@ -1,37 +1,37 @@
-C:\tlperl\site\lib\Date\Format.pm
-C:\tlperl\site\lib\Date\Language.pm
-C:\tlperl\site\lib\Date\Language\Afar.pm
-C:\tlperl\site\lib\Date\Language\Amharic.pm
-C:\tlperl\site\lib\Date\Language\Austrian.pm
-C:\tlperl\site\lib\Date\Language\Brazilian.pm
-C:\tlperl\site\lib\Date\Language\Bulgarian.pm
-C:\tlperl\site\lib\Date\Language\Chinese.pm
-C:\tlperl\site\lib\Date\Language\Chinese_GB.pm
-C:\tlperl\site\lib\Date\Language\Czech.pm
-C:\tlperl\site\lib\Date\Language\Danish.pm
-C:\tlperl\site\lib\Date\Language\Dutch.pm
-C:\tlperl\site\lib\Date\Language\English.pm
-C:\tlperl\site\lib\Date\Language\Finnish.pm
-C:\tlperl\site\lib\Date\Language\French.pm
-C:\tlperl\site\lib\Date\Language\Gedeo.pm
-C:\tlperl\site\lib\Date\Language\German.pm
-C:\tlperl\site\lib\Date\Language\Greek.pm
-C:\tlperl\site\lib\Date\Language\Hungarian.pm
-C:\tlperl\site\lib\Date\Language\Icelandic.pm
-C:\tlperl\site\lib\Date\Language\Italian.pm
-C:\tlperl\site\lib\Date\Language\Norwegian.pm
-C:\tlperl\site\lib\Date\Language\Oromo.pm
-C:\tlperl\site\lib\Date\Language\Romanian.pm
-C:\tlperl\site\lib\Date\Language\Russian.pm
-C:\tlperl\site\lib\Date\Language\Russian_cp1251.pm
-C:\tlperl\site\lib\Date\Language\Russian_koi8r.pm
-C:\tlperl\site\lib\Date\Language\Sidama.pm
-C:\tlperl\site\lib\Date\Language\Somali.pm
-C:\tlperl\site\lib\Date\Language\Spanish.pm
-C:\tlperl\site\lib\Date\Language\Swedish.pm
-C:\tlperl\site\lib\Date\Language\Tigrinya.pm
-C:\tlperl\site\lib\Date\Language\TigrinyaEritrean.pm
-C:\tlperl\site\lib\Date\Language\TigrinyaEthiopian.pm
-C:\tlperl\site\lib\Date\Language\Turkish.pm
-C:\tlperl\site\lib\Date\Parse.pm
-C:\tlperl\site\lib\Time\Zone.pm
+C:\tlperl526\site\lib\Date\Format.pm
+C:\tlperl526\site\lib\Date\Language.pm
+C:\tlperl526\site\lib\Date\Language\Afar.pm
+C:\tlperl526\site\lib\Date\Language\Amharic.pm
+C:\tlperl526\site\lib\Date\Language\Austrian.pm
+C:\tlperl526\site\lib\Date\Language\Brazilian.pm
+C:\tlperl526\site\lib\Date\Language\Bulgarian.pm
+C:\tlperl526\site\lib\Date\Language\Chinese.pm
+C:\tlperl526\site\lib\Date\Language\Chinese_GB.pm
+C:\tlperl526\site\lib\Date\Language\Czech.pm
+C:\tlperl526\site\lib\Date\Language\Danish.pm
+C:\tlperl526\site\lib\Date\Language\Dutch.pm
+C:\tlperl526\site\lib\Date\Language\English.pm
+C:\tlperl526\site\lib\Date\Language\Finnish.pm
+C:\tlperl526\site\lib\Date\Language\French.pm
+C:\tlperl526\site\lib\Date\Language\Gedeo.pm
+C:\tlperl526\site\lib\Date\Language\German.pm
+C:\tlperl526\site\lib\Date\Language\Greek.pm
+C:\tlperl526\site\lib\Date\Language\Hungarian.pm
+C:\tlperl526\site\lib\Date\Language\Icelandic.pm
+C:\tlperl526\site\lib\Date\Language\Italian.pm
+C:\tlperl526\site\lib\Date\Language\Norwegian.pm
+C:\tlperl526\site\lib\Date\Language\Oromo.pm
+C:\tlperl526\site\lib\Date\Language\Romanian.pm
+C:\tlperl526\site\lib\Date\Language\Russian.pm
+C:\tlperl526\site\lib\Date\Language\Russian_cp1251.pm
+C:\tlperl526\site\lib\Date\Language\Russian_koi8r.pm
+C:\tlperl526\site\lib\Date\Language\Sidama.pm
+C:\tlperl526\site\lib\Date\Language\Somali.pm
+C:\tlperl526\site\lib\Date\Language\Spanish.pm
+C:\tlperl526\site\lib\Date\Language\Swedish.pm
+C:\tlperl526\site\lib\Date\Language\Tigrinya.pm
+C:\tlperl526\site\lib\Date\Language\TigrinyaEritrean.pm
+C:\tlperl526\site\lib\Date\Language\TigrinyaEthiopian.pm
+C:\tlperl526\site\lib\Date\Language\Turkish.pm
+C:\tlperl526\site\lib\Date\Parse.pm
+C:\tlperl526\site\lib\Time\Zone.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist
index 45cf93670f0..51511a0523b 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\Digest\SHA1.pm
-C:\tlperl\site\lib\auto\Digest\SHA1\SHA1.dll
+C:\tlperl526\site\lib\Digest\SHA1.pm
+C:\tlperl526\site\lib\auto\Digest\SHA1\SHA1.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dll b/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dll
index 86090539524..ae674565775 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist
index fca67c3c703..85a292d73fa 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\Encode\Locale.pm
+C:\tlperl526\site\lib\Encode\Locale.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist
index d4a2e08bb74..e166fbd0d85 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist
@@ -1,4 +1,4 @@
-C:\tlperl\site\lib\Encode\compat.pm
-C:\tlperl\site\lib\Encode\compat\5006001.pm
-C:\tlperl\site\lib\Encode\compat\Alias.pm
-C:\tlperl\site\lib\Encode\compat\common.pm
+C:\tlperl526\site\lib\Encode\compat.pm
+C:\tlperl526\site\lib\Encode\compat\5006001.pm
+C:\tlperl526\site\lib\Encode\compat\Alias.pm
+C:\tlperl526\site\lib\Encode\compat\common.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist b/Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist
index 0d31ba57a1f..e5d5275c93b 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\File\Listing.pm
+C:\tlperl526\site\lib\File\Listing.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist b/Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist
index 3ba10e7c5e4..b23af3d246b 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\File\Which.pm
+C:\tlperl526\site\lib\File\Which.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist
index 6ce7b6a07a9..1a017c7808f 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist
@@ -1,8 +1,8 @@
-C:\tlperl\site\lib\HTML\Entities.pm
-C:\tlperl\site\lib\HTML\Filter.pm
-C:\tlperl\site\lib\HTML\HeadParser.pm
-C:\tlperl\site\lib\HTML\LinkExtor.pm
-C:\tlperl\site\lib\HTML\Parser.pm
-C:\tlperl\site\lib\HTML\PullParser.pm
-C:\tlperl\site\lib\HTML\TokeParser.pm
-C:\tlperl\site\lib\auto\HTML\Parser\Parser.dll
+C:\tlperl526\site\lib\HTML\Entities.pm
+C:\tlperl526\site\lib\HTML\Filter.pm
+C:\tlperl526\site\lib\HTML\HeadParser.pm
+C:\tlperl526\site\lib\HTML\LinkExtor.pm
+C:\tlperl526\site\lib\HTML\Parser.pm
+C:\tlperl526\site\lib\HTML\PullParser.pm
+C:\tlperl526\site\lib\HTML\TokeParser.pm
+C:\tlperl526\site\lib\auto\HTML\Parser\Parser.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll b/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll
index 4cc97f0777f..3684545322b 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist
index b0836c2d778..3ae37c67991 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\HTML\Tagset.pm
+C:\tlperl526\site\lib\HTML\Tagset.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist
index c1f0a862133..be4bc19f2bd 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist
@@ -1,3 +1,3 @@
-C:\tlperl\site\lib\HTTP\Cookies.pm
-C:\tlperl\site\lib\HTTP\Cookies\Microsoft.pm
-C:\tlperl\site\lib\HTTP\Cookies\Netscape.pm
+C:\tlperl526\site\lib\HTTP\Cookies.pm
+C:\tlperl526\site\lib\HTTP\Cookies\Microsoft.pm
+C:\tlperl526\site\lib\HTTP\Cookies\Netscape.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist
index 20fe206daaa..23d299ddaba 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\HTTP\Daemon.pm
+C:\tlperl526\site\lib\HTTP\Daemon.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist
index 8a98075d656..330bcc3a5bb 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\HTTP\Date.pm
+C:\tlperl526\site\lib\HTTP\Date.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist
index 80f40bf932d..2692fdd9bd8 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist
@@ -1,10 +1,10 @@
-C:\tlperl\site\lib\HTTP\Config.pm
-C:\tlperl\site\lib\HTTP\Headers.pm
-C:\tlperl\site\lib\HTTP\Headers\Auth.pm
-C:\tlperl\site\lib\HTTP\Headers\ETag.pm
-C:\tlperl\site\lib\HTTP\Headers\Util.pm
-C:\tlperl\site\lib\HTTP\Message.pm
-C:\tlperl\site\lib\HTTP\Request.pm
-C:\tlperl\site\lib\HTTP\Request\Common.pm
-C:\tlperl\site\lib\HTTP\Response.pm
-C:\tlperl\site\lib\HTTP\Status.pm
+C:\tlperl526\site\lib\HTTP\Config.pm
+C:\tlperl526\site\lib\HTTP\Headers.pm
+C:\tlperl526\site\lib\HTTP\Headers\Auth.pm
+C:\tlperl526\site\lib\HTTP\Headers\ETag.pm
+C:\tlperl526\site\lib\HTTP\Headers\Util.pm
+C:\tlperl526\site\lib\HTTP\Message.pm
+C:\tlperl526\site\lib\HTTP\Request.pm
+C:\tlperl526\site\lib\HTTP\Request\Common.pm
+C:\tlperl526\site\lib\HTTP\Response.pm
+C:\tlperl526\site\lib\HTTP\Status.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist
index 9d7d8f27c96..be79540d3d5 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\HTTP\Negotiate.pm
+C:\tlperl526\site\lib\HTTP\Negotiate.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist b/Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist
index 6cb34ec6af1..48c2f1abf39 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\IO\HTML.pm
+C:\tlperl526\site\lib\IO\HTML.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist b/Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist
index 301a4c1067d..8b552c38689 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\IO\String.pm
+C:\tlperl526\site\lib\IO\String.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/JSON/.packlist b/Master/tlpkg/tlperl/site/lib/auto/JSON/.packlist
deleted file mode 100644
index ef56faff5aa..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/JSON/.packlist
+++ /dev/null
@@ -1,5 +0,0 @@
-C:\tlperl\site\lib\JSON.pm
-C:\tlperl\site\lib\JSON\backportPP.pm
-C:\tlperl\site\lib\JSON\backportPP\Boolean.pm
-C:\tlperl\site\lib\JSON\backportPP\Compat5005.pm
-C:\tlperl\site\lib\JSON\backportPP\Compat5006.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/JSON/MaybeXS/.packlist b/Master/tlpkg/tlperl/site/lib/auto/JSON/MaybeXS/.packlist
new file mode 100755
index 00000000000..0c59eeb1248
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/auto/JSON/MaybeXS/.packlist
@@ -0,0 +1 @@
+C:\tlperl526\site\lib\JSON\MaybeXS.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/.packlist b/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/.packlist
deleted file mode 100644
index 3b09ed2e542..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/.packlist
+++ /dev/null
@@ -1,5 +0,0 @@
-C:\tlperl\bin\json_xs
-C:\tlperl\bin\json_xs.bat
-C:\tlperl\site\lib\JSON\XS.pm
-C:\tlperl\site\lib\JSON\XS\Boolean.pm
-C:\tlperl\site\lib\auto\JSON\XS\XS.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/XS.dll b/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/XS.dll
deleted file mode 100755
index 5aa4c362230..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/JSON/XS/XS.dll
+++ /dev/null
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist b/Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist
index ad241200dcf..a37eb82a5a2 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\LWP\MediaTypes.pm
-C:\tlperl\site\lib\LWP\media.types
+C:\tlperl526\site\lib\LWP\MediaTypes.pm
+C:\tlperl526\site\lib\LWP\media.types
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist
index 5c97b8b3279..fcabca98f26 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist
@@ -1,5 +1,5 @@
-C:\tlperl\site\lib\Math\Int64.pm
-C:\tlperl\site\lib\Math\Int64\die_on_overflow.pm
-C:\tlperl\site\lib\Math\Int64\native_if_available.pm
-C:\tlperl\site\lib\Math\UInt64.pm
-C:\tlperl\site\lib\auto\Math\Int64\Int64.dll
+C:\tlperl526\site\lib\Math\Int64.pm
+C:\tlperl526\site\lib\Math\Int64\die_on_overflow.pm
+C:\tlperl526\site\lib\Math\Int64\native_if_available.pm
+C:\tlperl526\site\lib\Math\UInt64.pm
+C:\tlperl526\site\lib\auto\Math\Int64\Int64.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll b/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll
index ac97081b198..6e4b16bd979 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist
index a91ad79eaec..a0e6c90db30 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist
@@ -1,3 +1,3 @@
-C:\tlperl\site\lib\Mozilla\CA.pm
-C:\tlperl\site\lib\Mozilla\CA\cacert.pem
-C:\tlperl\site\lib\Mozilla\mk-ca-bundle.pl
+C:\tlperl526\site\lib\Mozilla\CA.pm
+C:\tlperl526\site\lib\Mozilla\CA\cacert.pem
+C:\tlperl526\site\lib\Mozilla\mk-ca-bundle.pl
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist
index e71697e4233..9c3a3338a2c 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist
@@ -1,4 +1,4 @@
-C:\tlperl\site\lib\Net\HTTP.pm
-C:\tlperl\site\lib\Net\HTTPS.pm
-C:\tlperl\site\lib\Net\HTTP\Methods.pm
-C:\tlperl\site\lib\Net\HTTP\NB.pm
+C:\tlperl526\site\lib\Net\HTTP.pm
+C:\tlperl526\site\lib\Net\HTTPS.pm
+C:\tlperl526\site\lib\Net\HTTP\Methods.pm
+C:\tlperl526\site\lib\Net\HTTP\NB.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist
index 87d1fe32b26..f097d1671a7 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\Socket.pm
-C:\tlperl\site\lib\auto\Socket\Socket.dll
+C:\tlperl526\site\lib\Socket.pm
+C:\tlperl526\site\lib\auto\Socket\Socket.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll b/Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll
index 960de7a1969..0c7a8b23b1c 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Test/Fatal/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Test/Fatal/.packlist
index f8b34dfe0f7..65a7c2f4262 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Test/Fatal/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Test/Fatal/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\Test\Fatal.pm
+C:\tlperl526\site\lib\Test\Fatal.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Test/Needs/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Test/Needs/.packlist
new file mode 100755
index 00000000000..a50f8443dcf
--- /dev/null
+++ b/Master/tlpkg/tlperl/site/lib/auto/Test/Needs/.packlist
@@ -0,0 +1 @@
+C:\tlperl526\site\lib\Test\Needs.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Test/RequiresInternet/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Test/RequiresInternet/.packlist
index 2236c52f855..2ae7c08129e 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Test/RequiresInternet/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Test/RequiresInternet/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\Test\RequiresInternet.pm
+C:\tlperl526\site\lib\Test\RequiresInternet.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist
index acfdd696ac1..6c54955e9eb 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist
@@ -1,644 +1,645 @@
-C:\tlperl\bin\gedi
-C:\tlperl\bin\gedi.bat
-C:\tlperl\bin\ptked
-C:\tlperl\bin\ptked.bat
-C:\tlperl\bin\ptksh
-C:\tlperl\bin\ptksh.bat
-C:\tlperl\bin\tkjpeg
-C:\tlperl\bin\tkjpeg.bat
-C:\tlperl\bin\widget
-C:\tlperl\bin\widget.bat
-C:\tlperl\site\lib\Tie\Watch.pm
-C:\tlperl\site\lib\Tk.pm
-C:\tlperl\site\lib\Tk.pod
-C:\tlperl\site\lib\Tk\804delta.pod
-C:\tlperl\site\lib\Tk\Adjuster.pm
-C:\tlperl\site\lib\Tk\Adjuster.pod
-C:\tlperl\site\lib\Tk\After.pm
-C:\tlperl\site\lib\Tk\Animation.pm
-C:\tlperl\site\lib\Tk\Animation.pod
-C:\tlperl\site\lib\Tk\Balloon.pm
-C:\tlperl\site\lib\Tk\Balloon.pod
-C:\tlperl\site\lib\Tk\Bitmap.pm
-C:\tlperl\site\lib\Tk\Bitmap.pod
-C:\tlperl\site\lib\Tk\BrowseEntry.pm
-C:\tlperl\site\lib\Tk\BrowseEntry.pod
-C:\tlperl\site\lib\Tk\Button.pm
-C:\tlperl\site\lib\Tk\Button.pod
-C:\tlperl\site\lib\Tk\Camel.xpm
-C:\tlperl\site\lib\Tk\Canvas.pm
-C:\tlperl\site\lib\Tk\Canvas.pod
-C:\tlperl\site\lib\Tk\Checkbutton.pm
-C:\tlperl\site\lib\Tk\Checkbutton.pod
-C:\tlperl\site\lib\Tk\Clipboard.pm
-C:\tlperl\site\lib\Tk\Clipboard.pod
-C:\tlperl\site\lib\Tk\CmdLine.pm
-C:\tlperl\site\lib\Tk\CmdLine.pod
-C:\tlperl\site\lib\Tk\ColorDialog.pm
-C:\tlperl\site\lib\Tk\ColorEdit.xpm
-C:\tlperl\site\lib\Tk\ColorEditor.pm
-C:\tlperl\site\lib\Tk\ColorEditor.pod
-C:\tlperl\site\lib\Tk\ColorSelect.pm
-C:\tlperl\site\lib\Tk\Compound.pm
-C:\tlperl\site\lib\Tk\Compound.pod
-C:\tlperl\site\lib\Tk\Config.pm
-C:\tlperl\site\lib\Tk\ConfigSpecs.pod
-C:\tlperl\site\lib\Tk\Configure.pm
-C:\tlperl\site\lib\Tk\Credits
-C:\tlperl\site\lib\Tk\DItem.pod
-C:\tlperl\site\lib\Tk\Derived.pm
-C:\tlperl\site\lib\Tk\Derived.pod
-C:\tlperl\site\lib\Tk\Dialog.pm
-C:\tlperl\site\lib\Tk\Dialog.pod
-C:\tlperl\site\lib\Tk\DialogBox.pm
-C:\tlperl\site\lib\Tk\DialogBox.pod
-C:\tlperl\site\lib\Tk\DirTree.pm
-C:\tlperl\site\lib\Tk\DirTree.pod
-C:\tlperl\site\lib\Tk\Dirlist.pm
-C:\tlperl\site\lib\Tk\DragDrop.pm
-C:\tlperl\site\lib\Tk\DragDrop\Common.pm
-C:\tlperl\site\lib\Tk\DragDrop\Common.pod
-C:\tlperl\site\lib\Tk\DragDrop\LocalDrop.pm
-C:\tlperl\site\lib\Tk\DragDrop\Rect.pm
-C:\tlperl\site\lib\Tk\DragDrop\SunConst.pm
-C:\tlperl\site\lib\Tk\DragDrop\SunConst.pod
-C:\tlperl\site\lib\Tk\DragDrop\SunDrop.pm
-C:\tlperl\site\lib\Tk\DragDrop\SunSite.pm
-C:\tlperl\site\lib\Tk\DragDrop\Win32Drop.pm
-C:\tlperl\site\lib\Tk\DragDrop\Win32Site.pm
-C:\tlperl\site\lib\Tk\DragDrop\XDNDDrop.pm
-C:\tlperl\site\lib\Tk\DragDrop\XDNDSite.pm
-C:\tlperl\site\lib\Tk\DropSite.pm
-C:\tlperl\site\lib\Tk\DropSite.pod
-C:\tlperl\site\lib\Tk\DummyEncode.pm
-C:\tlperl\site\lib\Tk\English.pm
-C:\tlperl\site\lib\Tk\Entry.pm
-C:\tlperl\site\lib\Tk\Entry.pod
-C:\tlperl\site\lib\Tk\Error.pod
-C:\tlperl\site\lib\Tk\ErrorDialog.pm
-C:\tlperl\site\lib\Tk\ErrorDialog.pod
-C:\tlperl\site\lib\Tk\Event.pm
-C:\tlperl\site\lib\Tk\Event\IO.pm
-C:\tlperl\site\lib\Tk\Eventloop.pod
-C:\tlperl\site\lib\Tk\FBox.pm
-C:\tlperl\site\lib\Tk\FBox.pod
-C:\tlperl\site\lib\Tk\FileSelect.pm
-C:\tlperl\site\lib\Tk\FileSelect.pod
-C:\tlperl\site\lib\Tk\FloatEntry.pm
-C:\tlperl\site\lib\Tk\Font.pm
-C:\tlperl\site\lib\Tk\Font.pod
-C:\tlperl\site\lib\Tk\Frame.pm
-C:\tlperl\site\lib\Tk\Frame.pod
-C:\tlperl\site\lib\Tk\HList.pm
-C:\tlperl\site\lib\Tk\HList.pod
-C:\tlperl\site\lib\Tk\IO.pm
-C:\tlperl\site\lib\Tk\IO.pod
-C:\tlperl\site\lib\Tk\IconList.pm
-C:\tlperl\site\lib\Tk\IconList.pod
-C:\tlperl\site\lib\Tk\Image.pm
-C:\tlperl\site\lib\Tk\Image.pod
-C:\tlperl\site\lib\Tk\InputO.pod
-C:\tlperl\site\lib\Tk\Internals.pod
-C:\tlperl\site\lib\Tk\ItemStyle.pm
-C:\tlperl\site\lib\Tk\JPEG.pm
-C:\tlperl\site\lib\Tk\LabEntry.pm
-C:\tlperl\site\lib\Tk\LabFrame.pm
-C:\tlperl\site\lib\Tk\LabFrame.pod
-C:\tlperl\site\lib\Tk\LabRadio.pm
-C:\tlperl\site\lib\Tk\Label.pm
-C:\tlperl\site\lib\Tk\Label.pod
-C:\tlperl\site\lib\Tk\Labelframe.pm
-C:\tlperl\site\lib\Tk\Labelframe.pod
-C:\tlperl\site\lib\Tk\Listbox.pm
-C:\tlperl\site\lib\Tk\Listbox.pod
-C:\tlperl\site\lib\Tk\MMtry.pm
-C:\tlperl\site\lib\Tk\MMutil.pm
-C:\tlperl\site\lib\Tk\MainWindow.pm
-C:\tlperl\site\lib\Tk\MainWindow.pod
-C:\tlperl\site\lib\Tk\MakeDepend.pm
-C:\tlperl\site\lib\Tk\Menu.pm
-C:\tlperl\site\lib\Tk\Menu.pod
-C:\tlperl\site\lib\Tk\Menu\Item.pm
-C:\tlperl\site\lib\Tk\Menu\Item.pod
-C:\tlperl\site\lib\Tk\Menubar.pm
-C:\tlperl\site\lib\Tk\Menubutton.pm
-C:\tlperl\site\lib\Tk\Menubutton.pod
-C:\tlperl\site\lib\Tk\Message.pm
-C:\tlperl\site\lib\Tk\Message.pod
-C:\tlperl\site\lib\Tk\MsgBox.pm
-C:\tlperl\site\lib\Tk\MsgBox.pod
-C:\tlperl\site\lib\Tk\Mwm.pod
-C:\tlperl\site\lib\Tk\NBFrame.pm
-C:\tlperl\site\lib\Tk\NoteBook.pm
-C:\tlperl\site\lib\Tk\NoteBook.pod
-C:\tlperl\site\lib\Tk\Optionmenu.pm
-C:\tlperl\site\lib\Tk\Optionmenu.pod
-C:\tlperl\site\lib\Tk\PNG.pm
-C:\tlperl\site\lib\Tk\Pane.pm
-C:\tlperl\site\lib\Tk\Panedwindow.pm
-C:\tlperl\site\lib\Tk\Panedwindow.pod
-C:\tlperl\site\lib\Tk\Photo.pm
-C:\tlperl\site\lib\Tk\Photo.pod
-C:\tlperl\site\lib\Tk\Pixmap.pm
-C:\tlperl\site\lib\Tk\Pixmap.pod
-C:\tlperl\site\lib\Tk\Popup.pod
-C:\tlperl\site\lib\Tk\Pretty.pm
-C:\tlperl\site\lib\Tk\ProgressBar.pm
-C:\tlperl\site\lib\Tk\README.Adjust
-C:\tlperl\site\lib\Tk\ROText.pm
-C:\tlperl\site\lib\Tk\ROText.pod
-C:\tlperl\site\lib\Tk\Radiobutton.pm
-C:\tlperl\site\lib\Tk\Radiobutton.pod
-C:\tlperl\site\lib\Tk\Region.pm
-C:\tlperl\site\lib\Tk\Reindex.pm
-C:\tlperl\site\lib\Tk\ReindexedROText.pm
-C:\tlperl\site\lib\Tk\ReindexedText.pm
-C:\tlperl\site\lib\Tk\Scale.pm
-C:\tlperl\site\lib\Tk\Scale.pod
-C:\tlperl\site\lib\Tk\Scrollbar.pm
-C:\tlperl\site\lib\Tk\Scrollbar.pod
-C:\tlperl\site\lib\Tk\Scrolled.pod
-C:\tlperl\site\lib\Tk\Spinbox.pm
-C:\tlperl\site\lib\Tk\Spinbox.pod
-C:\tlperl\site\lib\Tk\Stats.pm
-C:\tlperl\site\lib\Tk\Submethods.pm
-C:\tlperl\site\lib\Tk\Submethods.pod
-C:\tlperl\site\lib\Tk\TList.pm
-C:\tlperl\site\lib\Tk\TList.pod
-C:\tlperl\site\lib\Tk\Table.pm
-C:\tlperl\site\lib\Tk\Table.pod
-C:\tlperl\site\lib\Tk\Tcl-perl.pod
-C:\tlperl\site\lib\Tk\Text.pm
-C:\tlperl\site\lib\Tk\Text.pod
-C:\tlperl\site\lib\Tk\TextEdit.pm
-C:\tlperl\site\lib\Tk\TextList.pm
-C:\tlperl\site\lib\Tk\TextUndo.pm
-C:\tlperl\site\lib\Tk\TextUndo.pod
-C:\tlperl\site\lib\Tk\Text\Tag.pm
-C:\tlperl\site\lib\Tk\Tiler.pm
-C:\tlperl\site\lib\Tk\Tiler.pod
-C:\tlperl\site\lib\Tk\TixGrid.pm
-C:\tlperl\site\lib\Tk\TixGrid.pod
-C:\tlperl\site\lib\Tk\Tk.xbm
-C:\tlperl\site\lib\Tk\Tk.xpm
-C:\tlperl\site\lib\Tk\TkXSUB.def
-C:\tlperl\site\lib\Tk\Toplevel.pm
-C:\tlperl\site\lib\Tk\Toplevel.pod
-C:\tlperl\site\lib\Tk\Trace.pm
-C:\tlperl\site\lib\Tk\Tree.pm
-C:\tlperl\site\lib\Tk\Tree.pod
-C:\tlperl\site\lib\Tk\UserGuide.pod
-C:\tlperl\site\lib\Tk\Widget.pm
-C:\tlperl\site\lib\Tk\Widget.pod
-C:\tlperl\site\lib\Tk\WidgetDemo.pod
-C:\tlperl\site\lib\Tk\Wm.pm
-C:\tlperl\site\lib\Tk\Wm.pod
-C:\tlperl\site\lib\Tk\X.pm
-C:\tlperl\site\lib\Tk\X.pod
-C:\tlperl\site\lib\Tk\X11Font.pm
-C:\tlperl\site\lib\Tk\X11Font.pod
-C:\tlperl\site\lib\Tk\X11\X.h
-C:\tlperl\site\lib\Tk\X11\Xatom.h
-C:\tlperl\site\lib\Tk\X11\Xfuncproto.h
-C:\tlperl\site\lib\Tk\X11\Xlib.h
-C:\tlperl\site\lib\Tk\X11\Xutil.h
-C:\tlperl\site\lib\Tk\X11\cursorfont.h
-C:\tlperl\site\lib\Tk\X11\keysym.h
-C:\tlperl\site\lib\Tk\X11\keysymdef.h
-C:\tlperl\site\lib\Tk\X11\license.terms
-C:\tlperl\site\lib\Tk\Xcamel.gif
-C:\tlperl\site\lib\Tk\Xlib.pm
-C:\tlperl\site\lib\Tk\Xrm.pm
-C:\tlperl\site\lib\Tk\Xrm.pod
-C:\tlperl\site\lib\Tk\act_folder.xbm
-C:\tlperl\site\lib\Tk\act_folder.xpm
-C:\tlperl\site\lib\Tk\after.pod
-C:\tlperl\site\lib\Tk\anim.gif
-C:\tlperl\site\lib\Tk\arrowdownwin.xbm
-C:\tlperl\site\lib\Tk\balArrow.xbm
-C:\tlperl\site\lib\Tk\bind.pod
-C:\tlperl\site\lib\Tk\bindtags.pod
-C:\tlperl\site\lib\Tk\callbacks.pod
-C:\tlperl\site\lib\Tk\cbxarrow.xbm
-C:\tlperl\site\lib\Tk\chooseColor.pod
-C:\tlperl\site\lib\Tk\chooseDirectory.pod
-C:\tlperl\site\lib\Tk\composite.pod
-C:\tlperl\site\lib\Tk\demos\LabEnLabRad.pm
-C:\tlperl\site\lib\Tk\demos\images\QuitPB.xpm
-C:\tlperl\site\lib\Tk\demos\images\QuitPBa.xpm
-C:\tlperl\site\lib\Tk\demos\images\c.icon
-C:\tlperl\site\lib\Tk\demos\images\cursor.cur
-C:\tlperl\site\lib\Tk\demos\images\cursor.mask
-C:\tlperl\site\lib\Tk\demos\images\cursor.xbm
-C:\tlperl\site\lib\Tk\demos\images\dir.icon
-C:\tlperl\site\lib\Tk\demos\images\dir.mask
-C:\tlperl\site\lib\Tk\demos\images\earth.gif
-C:\tlperl\site\lib\Tk\demos\images\earthris.gif
-C:\tlperl\site\lib\Tk\demos\images\face
-C:\tlperl\site\lib\Tk\demos\images\flagdown
-C:\tlperl\site\lib\Tk\demos\images\flagup
-C:\tlperl\site\lib\Tk\demos\images\grey.25
-C:\tlperl\site\lib\Tk\demos\images\grey.5
-C:\tlperl\site\lib\Tk\demos\images\letters
-C:\tlperl\site\lib\Tk\demos\images\mickey.gif
-C:\tlperl\site\lib\Tk\demos\images\ned.xpm
-C:\tlperl\site\lib\Tk\demos\images\noletters
-C:\tlperl\site\lib\Tk\demos\images\page.icon
-C:\tlperl\site\lib\Tk\demos\images\page.mask
-C:\tlperl\site\lib\Tk\demos\images\pattern
-C:\tlperl\site\lib\Tk\demos\images\teapot.ppm
-C:\tlperl\site\lib\Tk\demos\widget_lib\Ball.pm
-C:\tlperl\site\lib\Tk\demos\widget_lib\HList.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\HList2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\Plot.pm
-C:\tlperl\site\lib\Tk\demos\widget_lib\WidgetDemo.pm
-C:\tlperl\site\lib\Tk\demos\widget_lib\arrows.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\balloon.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\bind.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\bitmaps.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\bounce.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\browseentry.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\browseentry2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\button.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\check.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\choosedir.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\clrpick.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\colors.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\cscroll.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\ctext.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\dialog1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\dialog2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\dirtree.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\entry1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\entry2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\entry3.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\filebox.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\floor.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\form.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\form_mgr.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\hello.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\hscale.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\icon.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\image1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\image2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\items.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\keysyms.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\labelframe.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\labels.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\labframe.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\mega.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\menbut.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\menus.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\menus2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\msgBox.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\notebook.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\paned1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\paned2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\photo1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\photo2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\plot.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\progress.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\puzzle.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\radio.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\ruler.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\sayings.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\search.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\showVars.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\slide.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\spin.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\states.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\style.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\texts.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\trace1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\trace2.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\transtile.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\twind.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\unicodeout.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\virtevents1.pl
-C:\tlperl\site\lib\Tk\demos\widget_lib\vscale.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\Gedi.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\TEMPLATE.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\Tiler.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\all.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\cursor.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\lib\npuz\Xcamel.npuz
-C:\tlperl\site\lib\Tk\demos\widtrib\npuz.pl
-C:\tlperl\site\lib\Tk\demos\widtrib\plop.pl
-C:\tlperl\site\lib\Tk\event.pod
-C:\tlperl\site\lib\Tk\exit.pod
-C:\tlperl\site\lib\Tk\file.xbm
-C:\tlperl\site\lib\Tk\file.xpm
-C:\tlperl\site\lib\Tk\fileevent.pod
-C:\tlperl\site\lib\Tk\focus.pod
-C:\tlperl\site\lib\Tk\folder.xbm
-C:\tlperl\site\lib\Tk\folder.xpm
-C:\tlperl\site\lib\Tk\form.pod
-C:\tlperl\site\lib\Tk\getOpenFile.pod
-C:\tlperl\site\lib\Tk\grab.pod
-C:\tlperl\site\lib\Tk\grid.pod
-C:\tlperl\site\lib\Tk\icon.gif
-C:\tlperl\site\lib\Tk\install.pm
-C:\tlperl\site\lib\Tk\license.terms
-C:\tlperl\site\lib\Tk\mega.pod
-C:\tlperl\site\lib\Tk\messageBox.pod
-C:\tlperl\site\lib\Tk\openfile.xbm
-C:\tlperl\site\lib\Tk\openfolder.xbm
-C:\tlperl\site\lib\Tk\openfolder.xpm
-C:\tlperl\site\lib\Tk\option.pod
-C:\tlperl\site\lib\Tk\options.pod
-C:\tlperl\site\lib\Tk\overview.pod
-C:\tlperl\site\lib\Tk\pTk.pod
-C:\tlperl\site\lib\Tk\pTk\Lang.h
-C:\tlperl\site\lib\Tk\pTk\Lang.m
-C:\tlperl\site\lib\Tk\pTk\Lang.t
-C:\tlperl\site\lib\Tk\pTk\Lang_f.h
-C:\tlperl\site\lib\Tk\pTk\Tcl-pTk
-C:\tlperl\site\lib\Tk\pTk\Xlib.h
-C:\tlperl\site\lib\Tk\pTk\Xlib.m
-C:\tlperl\site\lib\Tk\pTk\Xlib.t
-C:\tlperl\site\lib\Tk\pTk\Xlib_f.h
-C:\tlperl\site\lib\Tk\pTk\compat\limits.h
-C:\tlperl\site\lib\Tk\pTk\compat\stdlib.h
-C:\tlperl\site\lib\Tk\pTk\compat\unistd.h
-C:\tlperl\site\lib\Tk\pTk\default.h
-C:\tlperl\site\lib\Tk\pTk\img.h
-C:\tlperl\site\lib\Tk\pTk\imgInt.h
-C:\tlperl\site\lib\Tk\pTk\imgInt.m
-C:\tlperl\site\lib\Tk\pTk\imgInt.t
-C:\tlperl\site\lib\Tk\pTk\imgInt_f.h
-C:\tlperl\site\lib\Tk\pTk\ks_names.h
-C:\tlperl\site\lib\Tk\pTk\mkVFunc
-C:\tlperl\site\lib\Tk\pTk\moredefs.h
-C:\tlperl\site\lib\Tk\pTk\port.h
-C:\tlperl\site\lib\Tk\pTk\tcl.h
-C:\tlperl\site\lib\Tk\pTk\tclDecls.h
-C:\tlperl\site\lib\Tk\pTk\tclDecls.m
-C:\tlperl\site\lib\Tk\pTk\tclDecls.t
-C:\tlperl\site\lib\Tk\pTk\tclDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tclIntDecls.h
-C:\tlperl\site\lib\Tk\pTk\tclIntPlatDecls.h
-C:\tlperl\site\lib\Tk\pTk\tclMath.h
-C:\tlperl\site\lib\Tk\pTk\tclPlatDecls.h
-C:\tlperl\site\lib\Tk\pTk\tclWinInt.h
-C:\tlperl\site\lib\Tk\pTk\tix.h
-C:\tlperl\site\lib\Tk\pTk\tix.m
-C:\tlperl\site\lib\Tk\pTk\tix.t
-C:\tlperl\site\lib\Tk\pTk\tixBitmaps.h
-C:\tlperl\site\lib\Tk\pTk\tixDef.h
-C:\tlperl\site\lib\Tk\pTk\tixForm.h
-C:\tlperl\site\lib\Tk\pTk\tixGrData.h
-C:\tlperl\site\lib\Tk\pTk\tixGrid.h
-C:\tlperl\site\lib\Tk\pTk\tixHList.h
-C:\tlperl\site\lib\Tk\pTk\tixImgXpm.h
-C:\tlperl\site\lib\Tk\pTk\tixImgXpm.m
-C:\tlperl\site\lib\Tk\pTk\tixImgXpm.t
-C:\tlperl\site\lib\Tk\pTk\tixImgXpm_f.h
-C:\tlperl\site\lib\Tk\pTk\tixInt.h
-C:\tlperl\site\lib\Tk\pTk\tixInt.m
-C:\tlperl\site\lib\Tk\pTk\tixInt.t
-C:\tlperl\site\lib\Tk\pTk\tixInt_f.h
-C:\tlperl\site\lib\Tk\pTk\tixPort.h
-C:\tlperl\site\lib\Tk\pTk\tixTList.h
-C:\tlperl\site\lib\Tk\pTk\tixWinInt.h
-C:\tlperl\site\lib\Tk\pTk\tixWinPort.h
-C:\tlperl\site\lib\Tk\pTk\tix_f.h
-C:\tlperl\site\lib\Tk\pTk\tk.h
-C:\tlperl\site\lib\Tk\pTk\tk.m
-C:\tlperl\site\lib\Tk\pTk\tk.t
-C:\tlperl\site\lib\Tk\pTk\tk3d.h
-C:\tlperl\site\lib\Tk\pTk\tkButton.h
-C:\tlperl\site\lib\Tk\pTk\tkCanvas.h
-C:\tlperl\site\lib\Tk\pTk\tkCanvases.h
-C:\tlperl\site\lib\Tk\pTk\tkColor.h
-C:\tlperl\site\lib\Tk\pTk\tkConfig.h
-C:\tlperl\site\lib\Tk\pTk\tkDecls.h
-C:\tlperl\site\lib\Tk\pTk\tkDecls.m
-C:\tlperl\site\lib\Tk\pTk\tkDecls.t
-C:\tlperl\site\lib\Tk\pTk\tkDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tkEvent.h
-C:\tlperl\site\lib\Tk\pTk\tkEvent.m
-C:\tlperl\site\lib\Tk\pTk\tkEvent.t
-C:\tlperl\site\lib\Tk\pTk\tkEvent_f.h
-C:\tlperl\site\lib\Tk\pTk\tkFileFilter.h
-C:\tlperl\site\lib\Tk\pTk\tkFont.h
-C:\tlperl\site\lib\Tk\pTk\tkImgPhoto.h
-C:\tlperl\site\lib\Tk\pTk\tkImgPhoto.m
-C:\tlperl\site\lib\Tk\pTk\tkImgPhoto.t
-C:\tlperl\site\lib\Tk\pTk\tkImgPhoto_f.h
-C:\tlperl\site\lib\Tk\pTk\tkInitScript.h
-C:\tlperl\site\lib\Tk\pTk\tkInt.h
-C:\tlperl\site\lib\Tk\pTk\tkInt.m
-C:\tlperl\site\lib\Tk\pTk\tkInt.t
-C:\tlperl\site\lib\Tk\pTk\tkIntDecls.h
-C:\tlperl\site\lib\Tk\pTk\tkIntDecls.m
-C:\tlperl\site\lib\Tk\pTk\tkIntDecls.t
-C:\tlperl\site\lib\Tk\pTk\tkIntDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tkIntPlatDecls.h
-C:\tlperl\site\lib\Tk\pTk\tkIntPlatDecls.m
-C:\tlperl\site\lib\Tk\pTk\tkIntPlatDecls.t
-C:\tlperl\site\lib\Tk\pTk\tkIntPlatDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tkIntXlibDecls.h
-C:\tlperl\site\lib\Tk\pTk\tkIntXlibDecls.m
-C:\tlperl\site\lib\Tk\pTk\tkIntXlibDecls.t
-C:\tlperl\site\lib\Tk\pTk\tkIntXlibDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tkInt_f.h
-C:\tlperl\site\lib\Tk\pTk\tkMenu.h
-C:\tlperl\site\lib\Tk\pTk\tkMenubutton.h
-C:\tlperl\site\lib\Tk\pTk\tkOption.h
-C:\tlperl\site\lib\Tk\pTk\tkOption.m
-C:\tlperl\site\lib\Tk\pTk\tkOption.t
-C:\tlperl\site\lib\Tk\pTk\tkOption_f.h
-C:\tlperl\site\lib\Tk\pTk\tkPlatDecls.h
-C:\tlperl\site\lib\Tk\pTk\tkPlatDecls.m
-C:\tlperl\site\lib\Tk\pTk\tkPlatDecls.t
-C:\tlperl\site\lib\Tk\pTk\tkPlatDecls_f.h
-C:\tlperl\site\lib\Tk\pTk\tkPort.h
-C:\tlperl\site\lib\Tk\pTk\tkScale.h
-C:\tlperl\site\lib\Tk\pTk\tkScrollbar.h
-C:\tlperl\site\lib\Tk\pTk\tkSelect.h
-C:\tlperl\site\lib\Tk\pTk\tkText.h
-C:\tlperl\site\lib\Tk\pTk\tkUndo.h
-C:\tlperl\site\lib\Tk\pTk\tkVMacro.h
-C:\tlperl\site\lib\Tk\pTk\tkWin.h
-C:\tlperl\site\lib\Tk\pTk\tkWinDefault.h
-C:\tlperl\site\lib\Tk\pTk\tkWinInt.h
-C:\tlperl\site\lib\Tk\pTk\tkWinPort.h
-C:\tlperl\site\lib\Tk\pTk\tkXrm.h
-C:\tlperl\site\lib\Tk\pTk\tk_f.h
-C:\tlperl\site\lib\Tk\pTk\xbytes.h
-C:\tlperl\site\lib\Tk\pack.pod
-C:\tlperl\site\lib\Tk\palette.pod
-C:\tlperl\site\lib\Tk\place.pod
-C:\tlperl\site\lib\Tk\prolog.ps
-C:\tlperl\site\lib\Tk\selection.pod
-C:\tlperl\site\lib\Tk\send.pod
-C:\tlperl\site\lib\Tk\srcfile.xpm
-C:\tlperl\site\lib\Tk\textfile.xpm
-C:\tlperl\site\lib\Tk\tixWm.pod
-C:\tlperl\site\lib\Tk\tkGlue.def
-C:\tlperl\site\lib\Tk\tkGlue.h
-C:\tlperl\site\lib\Tk\tkGlue.m
-C:\tlperl\site\lib\Tk\tkGlue.t
-C:\tlperl\site\lib\Tk\tkGlue_f.h
-C:\tlperl\site\lib\Tk\tkvars.pod
-C:\tlperl\site\lib\Tk\tranicon.gif
-C:\tlperl\site\lib\Tk\typemap
-C:\tlperl\site\lib\Tk\vtab.def
-C:\tlperl\site\lib\Tk\widgets.pm
-C:\tlperl\site\lib\Tk\widgets.pod
-C:\tlperl\site\lib\Tk\win.xbm
-C:\tlperl\site\lib\Tk\winfolder.xpm
-C:\tlperl\site\lib\Tk\wintext.xpm
-C:\tlperl\site\lib\auto\Tk\CancelRepeat.al
-C:\tlperl\site\lib\auto\Tk\Canvas\Canvas.dll
-C:\tlperl\site\lib\auto\Tk\Clipboard\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Clipboard\getSelected.al
-C:\tlperl\site\lib\auto\Tk\Compound\Compound.dll
-C:\tlperl\site\lib\auto\Tk\DragDrop\Win32Site\Win32Site.dll
-C:\tlperl\site\lib\auto\Tk\EnterFocus.al
-C:\tlperl\site\lib\auto\Tk\Entry\Entry.dll
-C:\tlperl\site\lib\auto\Tk\Error.al
-C:\tlperl\site\lib\auto\Tk\Event\Event.dll
-C:\tlperl\site\lib\auto\Tk\FirstMenu.al
-C:\tlperl\site\lib\auto\Tk\FocusChildren.al
-C:\tlperl\site\lib\auto\Tk\FocusOK.al
-C:\tlperl\site\lib\auto\Tk\Frame\AddScrollbars.al
-C:\tlperl\site\lib\auto\Tk\Frame\FindMenu.al
-C:\tlperl\site\lib\auto\Tk\Frame\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Frame\freeze_on_map.al
-C:\tlperl\site\lib\auto\Tk\Frame\label.al
-C:\tlperl\site\lib\auto\Tk\Frame\labelPack.al
-C:\tlperl\site\lib\auto\Tk\Frame\labelVariable.al
-C:\tlperl\site\lib\auto\Tk\Frame\packscrollbars.al
-C:\tlperl\site\lib\auto\Tk\Frame\queuePack.al
-C:\tlperl\site\lib\auto\Tk\Frame\sbset.al
-C:\tlperl\site\lib\auto\Tk\Frame\scrollbars.al
-C:\tlperl\site\lib\auto\Tk\HList\HList.dll
-C:\tlperl\site\lib\auto\Tk\IO\IO.dll
-C:\tlperl\site\lib\auto\Tk\ImageNames.al
-C:\tlperl\site\lib\auto\Tk\ImageTypes.al
-C:\tlperl\site\lib\auto\Tk\JPEG\JPEG.dll
-C:\tlperl\site\lib\auto\Tk\Listbox\AutoScan.al
-C:\tlperl\site\lib\auto\Tk\Listbox\BeginExtend.al
-C:\tlperl\site\lib\auto\Tk\Listbox\BeginSelect.al
-C:\tlperl\site\lib\auto\Tk\Listbox\BeginToggle.al
-C:\tlperl\site\lib\auto\Tk\Listbox\ButtonRelease_1.al
-C:\tlperl\site\lib\auto\Tk\Listbox\CLEAR.al
-C:\tlperl\site\lib\auto\Tk\Listbox\Cancel.al
-C:\tlperl\site\lib\auto\Tk\Listbox\Cntrl_End.al
-C:\tlperl\site\lib\auto\Tk\Listbox\Cntrl_Home.al
-C:\tlperl\site\lib\auto\Tk\Listbox\Cntrl_backslash.al
-C:\tlperl\site\lib\auto\Tk\Listbox\DELETE.al
-C:\tlperl\site\lib\auto\Tk\Listbox\DataExtend.al
-C:\tlperl\site\lib\auto\Tk\Listbox\EXISTS.al
-C:\tlperl\site\lib\auto\Tk\Listbox\EXTEND.al
-C:\tlperl\site\lib\auto\Tk\Listbox\ExtendUpDown.al
-C:\tlperl\site\lib\auto\Tk\Listbox\FETCH.al
-C:\tlperl\site\lib\auto\Tk\Listbox\FETCHSIZE.al
-C:\tlperl\site\lib\auto\Tk\Listbox\Listbox.dll
-C:\tlperl\site\lib\auto\Tk\Listbox\Motion.al
-C:\tlperl\site\lib\auto\Tk\Listbox\POP.al
-C:\tlperl\site\lib\auto\Tk\Listbox\PUSH.al
-C:\tlperl\site\lib\auto\Tk\Listbox\SHIFT.al
-C:\tlperl\site\lib\auto\Tk\Listbox\SPLICE.al
-C:\tlperl\site\lib\auto\Tk\Listbox\STORE.al
-C:\tlperl\site\lib\auto\Tk\Listbox\SelectAll.al
-C:\tlperl\site\lib\auto\Tk\Listbox\SetList.al
-C:\tlperl\site\lib\auto\Tk\Listbox\TIEARRAY.al
-C:\tlperl\site\lib\auto\Tk\Listbox\TIESCALAR.al
-C:\tlperl\site\lib\auto\Tk\Listbox\UNSHIFT.al
-C:\tlperl\site\lib\auto\Tk\Listbox\UpDown.al
-C:\tlperl\site\lib\auto\Tk\Listbox\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Listbox\clipboardPaste.al
-C:\tlperl\site\lib\auto\Tk\Listbox\deleteSelected.al
-C:\tlperl\site\lib\auto\Tk\Listbox\getSelected.al
-C:\tlperl\site\lib\auto\Tk\Listbox\xyIndex.al
-C:\tlperl\site\lib\auto\Tk\Menubutton\Menubutton.dll
-C:\tlperl\site\lib\auto\Tk\NBFrame\NBFrame.dll
-C:\tlperl\site\lib\auto\Tk\PNG\PNG.dll
-C:\tlperl\site\lib\auto\Tk\Pixmap\Pixmap.dll
-C:\tlperl\site\lib\auto\Tk\Receive.al
-C:\tlperl\site\lib\auto\Tk\RepeatId.al
-C:\tlperl\site\lib\auto\Tk\Scale\Activate.al
-C:\tlperl\site\lib\auto\Tk\Scale\ButtonDown.al
-C:\tlperl\site\lib\auto\Tk\Scale\ButtonUp.al
-C:\tlperl\site\lib\auto\Tk\Scale\ControlPress.al
-C:\tlperl\site\lib\auto\Tk\Scale\Drag.al
-C:\tlperl\site\lib\auto\Tk\Scale\EndDrag.al
-C:\tlperl\site\lib\auto\Tk\Scale\Enter.al
-C:\tlperl\site\lib\auto\Tk\Scale\Increment.al
-C:\tlperl\site\lib\auto\Tk\Scale\Leave.al
-C:\tlperl\site\lib\auto\Tk\Scale\Scale.dll
-C:\tlperl\site\lib\auto\Tk\Scale\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ButtonDown.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ButtonUp.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Drag.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\EndDrag.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Enter.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Leave.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Motion.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ScrlByPages.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ScrlByUnits.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ScrlToPos.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\ScrlTopBottom.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Scrollbar.dll
-C:\tlperl\site\lib\auto\Tk\Scrollbar\Select.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\StartDrag.al
-C:\tlperl\site\lib\auto\Tk\Scrollbar\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Selection.al
-C:\tlperl\site\lib\auto\Tk\TList\TList.dll
-C:\tlperl\site\lib\auto\Tk\Table\Create.al
-C:\tlperl\site\lib\auto\Tk\Table\Posn.al
-C:\tlperl\site\lib\auto\Tk\Table\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Table\see.al
-C:\tlperl\site\lib\auto\Tk\Table\totalColumns.al
-C:\tlperl\site\lib\auto\Tk\Table\totalRows.al
-C:\tlperl\site\lib\auto\Tk\TextEdit\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\TextUndo\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Text\Text.dll
-C:\tlperl\site\lib\auto\Tk\Text\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\TixGrid\TixGrid.dll
-C:\tlperl\site\lib\auto\Tk\Tk.dll
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_BindIn.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_BindOut.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_Create.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_Destroy.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_In.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\FG_Out.al
-C:\tlperl\site\lib\auto\Tk\Toplevel\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\TraverseToMenu.al
-C:\tlperl\site\lib\auto\Tk\Widget\ASkludge.al
-C:\tlperl\site\lib\auto\Tk\Widget\AltKeyInDialog.al
-C:\tlperl\site\lib\auto\Tk\Widget\AmpWidget.al
-C:\tlperl\site\lib\auto\Tk\Widget\FindAltKeyTarget.al
-C:\tlperl\site\lib\auto\Tk\Widget\MasterMenu.al
-C:\tlperl\site\lib\auto\Tk\Widget\RestoreFocusGrab.al
-C:\tlperl\site\lib\auto\Tk\Widget\SetAmpText.al
-C:\tlperl\site\lib\auto\Tk\Widget\SetFocusGrab.al
-C:\tlperl\site\lib\auto\Tk\Widget\UnderlineAmpersand.al
-C:\tlperl\site\lib\auto\Tk\Widget\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Widget\bindDump.al
-C:\tlperl\site\lib\auto\Tk\Widget\clipboardKeysyms.al
-C:\tlperl\site\lib\auto\Tk\Widget\pathname.al
-C:\tlperl\site\lib\auto\Tk\Wm\AnchorAdjust.al
-C:\tlperl\site\lib\auto\Tk\Wm\FullScreen.al
-C:\tlperl\site\lib\auto\Tk\Wm\Popup.al
-C:\tlperl\site\lib\auto\Tk\Wm\Post.al
-C:\tlperl\site\lib\auto\Tk\Wm\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Wm\iconposition.al
-C:\tlperl\site\lib\auto\Tk\X\X.dll
-C:\tlperl\site\lib\auto\Tk\X\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\Xlib\Xlib.dll
-C:\tlperl\site\lib\auto\Tk\autosplit.ix
-C:\tlperl\site\lib\auto\Tk\break.al
-C:\tlperl\site\lib\auto\Tk\focusFollowsMouse.al
-C:\tlperl\site\lib\auto\Tk\focusNext.al
-C:\tlperl\site\lib\auto\Tk\focusPrev.al
-C:\tlperl\site\lib\auto\Tk\getEncoding.al
-C:\tlperl\site\lib\auto\Tk\getNextFocus.al
-C:\tlperl\site\lib\auto\Tk\getPrevFocus.al
-C:\tlperl\site\lib\auto\Tk\interps.al
-C:\tlperl\site\lib\auto\Tk\lsearch.al
-C:\tlperl\site\lib\auto\Tk\pTk\extralibs.ld
-C:\tlperl\site\lib\auto\Tk\tabFocus.al
-C:\tlperl\site\lib\auto\Tk\updateWidgets.al
+C:\tlperl526\bin\gedi
+C:\tlperl526\bin\gedi.bat
+C:\tlperl526\bin\ptked
+C:\tlperl526\bin\ptked.bat
+C:\tlperl526\bin\ptksh
+C:\tlperl526\bin\ptksh.bat
+C:\tlperl526\bin\tkjpeg
+C:\tlperl526\bin\tkjpeg.bat
+C:\tlperl526\bin\widget
+C:\tlperl526\bin\widget.bat
+C:\tlperl526\site\lib\Tie\Watch.pm
+C:\tlperl526\site\lib\Tk.pm
+C:\tlperl526\site\lib\Tk.pod
+C:\tlperl526\site\lib\Tk\804delta.pod
+C:\tlperl526\site\lib\Tk\Adjuster.pm
+C:\tlperl526\site\lib\Tk\Adjuster.pod
+C:\tlperl526\site\lib\Tk\After.pm
+C:\tlperl526\site\lib\Tk\Animation.pm
+C:\tlperl526\site\lib\Tk\Animation.pod
+C:\tlperl526\site\lib\Tk\Balloon.pm
+C:\tlperl526\site\lib\Tk\Balloon.pod
+C:\tlperl526\site\lib\Tk\Bitmap.pm
+C:\tlperl526\site\lib\Tk\Bitmap.pod
+C:\tlperl526\site\lib\Tk\BrowseEntry.pm
+C:\tlperl526\site\lib\Tk\BrowseEntry.pod
+C:\tlperl526\site\lib\Tk\Button.pm
+C:\tlperl526\site\lib\Tk\Button.pod
+C:\tlperl526\site\lib\Tk\Camel.xpm
+C:\tlperl526\site\lib\Tk\Canvas.pm
+C:\tlperl526\site\lib\Tk\Canvas.pod
+C:\tlperl526\site\lib\Tk\Checkbutton.pm
+C:\tlperl526\site\lib\Tk\Checkbutton.pod
+C:\tlperl526\site\lib\Tk\Clipboard.pm
+C:\tlperl526\site\lib\Tk\Clipboard.pod
+C:\tlperl526\site\lib\Tk\CmdLine.pm
+C:\tlperl526\site\lib\Tk\CmdLine.pod
+C:\tlperl526\site\lib\Tk\ColorDialog.pm
+C:\tlperl526\site\lib\Tk\ColorEdit.xpm
+C:\tlperl526\site\lib\Tk\ColorEditor.pm
+C:\tlperl526\site\lib\Tk\ColorEditor.pod
+C:\tlperl526\site\lib\Tk\ColorSelect.pm
+C:\tlperl526\site\lib\Tk\Compound.pm
+C:\tlperl526\site\lib\Tk\Compound.pod
+C:\tlperl526\site\lib\Tk\Config.pm
+C:\tlperl526\site\lib\Tk\ConfigSpecs.pod
+C:\tlperl526\site\lib\Tk\Configure.pm
+C:\tlperl526\site\lib\Tk\Credits
+C:\tlperl526\site\lib\Tk\DItem.pod
+C:\tlperl526\site\lib\Tk\Derived.pm
+C:\tlperl526\site\lib\Tk\Derived.pod
+C:\tlperl526\site\lib\Tk\Dialog.pm
+C:\tlperl526\site\lib\Tk\Dialog.pod
+C:\tlperl526\site\lib\Tk\DialogBox.pm
+C:\tlperl526\site\lib\Tk\DialogBox.pod
+C:\tlperl526\site\lib\Tk\DirTree.pm
+C:\tlperl526\site\lib\Tk\DirTree.pod
+C:\tlperl526\site\lib\Tk\Dirlist.pm
+C:\tlperl526\site\lib\Tk\DragDrop.pm
+C:\tlperl526\site\lib\Tk\DragDrop\Common.pm
+C:\tlperl526\site\lib\Tk\DragDrop\Common.pod
+C:\tlperl526\site\lib\Tk\DragDrop\LocalDrop.pm
+C:\tlperl526\site\lib\Tk\DragDrop\Rect.pm
+C:\tlperl526\site\lib\Tk\DragDrop\SunConst.pm
+C:\tlperl526\site\lib\Tk\DragDrop\SunConst.pod
+C:\tlperl526\site\lib\Tk\DragDrop\SunDrop.pm
+C:\tlperl526\site\lib\Tk\DragDrop\SunSite.pm
+C:\tlperl526\site\lib\Tk\DragDrop\Win32Drop.pm
+C:\tlperl526\site\lib\Tk\DragDrop\Win32Site.pm
+C:\tlperl526\site\lib\Tk\DragDrop\XDNDDrop.pm
+C:\tlperl526\site\lib\Tk\DragDrop\XDNDSite.pm
+C:\tlperl526\site\lib\Tk\DropSite.pm
+C:\tlperl526\site\lib\Tk\DropSite.pod
+C:\tlperl526\site\lib\Tk\DummyEncode.pm
+C:\tlperl526\site\lib\Tk\English.pm
+C:\tlperl526\site\lib\Tk\Entry.pm
+C:\tlperl526\site\lib\Tk\Entry.pod
+C:\tlperl526\site\lib\Tk\Error.pod
+C:\tlperl526\site\lib\Tk\ErrorDialog.pm
+C:\tlperl526\site\lib\Tk\ErrorDialog.pod
+C:\tlperl526\site\lib\Tk\Event.pm
+C:\tlperl526\site\lib\Tk\Event\IO.pm
+C:\tlperl526\site\lib\Tk\Eventloop.pod
+C:\tlperl526\site\lib\Tk\FBox.pm
+C:\tlperl526\site\lib\Tk\FBox.pod
+C:\tlperl526\site\lib\Tk\FileSelect.pm
+C:\tlperl526\site\lib\Tk\FileSelect.pod
+C:\tlperl526\site\lib\Tk\FloatEntry.pm
+C:\tlperl526\site\lib\Tk\Font.pm
+C:\tlperl526\site\lib\Tk\Font.pod
+C:\tlperl526\site\lib\Tk\Frame.pm
+C:\tlperl526\site\lib\Tk\Frame.pod
+C:\tlperl526\site\lib\Tk\HList.pm
+C:\tlperl526\site\lib\Tk\HList.pod
+C:\tlperl526\site\lib\Tk\IO.pm
+C:\tlperl526\site\lib\Tk\IO.pod
+C:\tlperl526\site\lib\Tk\IconList.pm
+C:\tlperl526\site\lib\Tk\IconList.pod
+C:\tlperl526\site\lib\Tk\Image.pm
+C:\tlperl526\site\lib\Tk\Image.pod
+C:\tlperl526\site\lib\Tk\InputO.pod
+C:\tlperl526\site\lib\Tk\Internals.pod
+C:\tlperl526\site\lib\Tk\ItemStyle.pm
+C:\tlperl526\site\lib\Tk\JPEG.pm
+C:\tlperl526\site\lib\Tk\LabEntry.pm
+C:\tlperl526\site\lib\Tk\LabFrame.pm
+C:\tlperl526\site\lib\Tk\LabFrame.pod
+C:\tlperl526\site\lib\Tk\LabRadio.pm
+C:\tlperl526\site\lib\Tk\Label.pm
+C:\tlperl526\site\lib\Tk\Label.pod
+C:\tlperl526\site\lib\Tk\Labelframe.pm
+C:\tlperl526\site\lib\Tk\Labelframe.pod
+C:\tlperl526\site\lib\Tk\Listbox.pm
+C:\tlperl526\site\lib\Tk\Listbox.pod
+C:\tlperl526\site\lib\Tk\MMtry.pm
+C:\tlperl526\site\lib\Tk\MMutil.pm
+C:\tlperl526\site\lib\Tk\MainWindow.pm
+C:\tlperl526\site\lib\Tk\MainWindow.pod
+C:\tlperl526\site\lib\Tk\MakeDepend.pm
+C:\tlperl526\site\lib\Tk\Menu.pm
+C:\tlperl526\site\lib\Tk\Menu.pod
+C:\tlperl526\site\lib\Tk\Menu\Item.pm
+C:\tlperl526\site\lib\Tk\Menu\Item.pod
+C:\tlperl526\site\lib\Tk\Menubar.pm
+C:\tlperl526\site\lib\Tk\Menubutton.pm
+C:\tlperl526\site\lib\Tk\Menubutton.pod
+C:\tlperl526\site\lib\Tk\Message.pm
+C:\tlperl526\site\lib\Tk\Message.pod
+C:\tlperl526\site\lib\Tk\MsgBox.pm
+C:\tlperl526\site\lib\Tk\MsgBox.pod
+C:\tlperl526\site\lib\Tk\Mwm.pod
+C:\tlperl526\site\lib\Tk\NBFrame.pm
+C:\tlperl526\site\lib\Tk\NoteBook.pm
+C:\tlperl526\site\lib\Tk\NoteBook.pod
+C:\tlperl526\site\lib\Tk\Optionmenu.pm
+C:\tlperl526\site\lib\Tk\Optionmenu.pod
+C:\tlperl526\site\lib\Tk\PNG.pm
+C:\tlperl526\site\lib\Tk\Pane.pm
+C:\tlperl526\site\lib\Tk\Panedwindow.pm
+C:\tlperl526\site\lib\Tk\Panedwindow.pod
+C:\tlperl526\site\lib\Tk\Photo.pm
+C:\tlperl526\site\lib\Tk\Photo.pod
+C:\tlperl526\site\lib\Tk\Pixmap.pm
+C:\tlperl526\site\lib\Tk\Pixmap.pod
+C:\tlperl526\site\lib\Tk\Popup.pod
+C:\tlperl526\site\lib\Tk\Pretty.pm
+C:\tlperl526\site\lib\Tk\ProgressBar.pm
+C:\tlperl526\site\lib\Tk\README.Adjust
+C:\tlperl526\site\lib\Tk\ROText.pm
+C:\tlperl526\site\lib\Tk\ROText.pod
+C:\tlperl526\site\lib\Tk\Radiobutton.pm
+C:\tlperl526\site\lib\Tk\Radiobutton.pod
+C:\tlperl526\site\lib\Tk\Region.pm
+C:\tlperl526\site\lib\Tk\Reindex.pm
+C:\tlperl526\site\lib\Tk\ReindexedROText.pm
+C:\tlperl526\site\lib\Tk\ReindexedText.pm
+C:\tlperl526\site\lib\Tk\Scale.pm
+C:\tlperl526\site\lib\Tk\Scale.pod
+C:\tlperl526\site\lib\Tk\Scrollbar.pm
+C:\tlperl526\site\lib\Tk\Scrollbar.pod
+C:\tlperl526\site\lib\Tk\Scrolled.pod
+C:\tlperl526\site\lib\Tk\Spinbox.pm
+C:\tlperl526\site\lib\Tk\Spinbox.pod
+C:\tlperl526\site\lib\Tk\Stats.pm
+C:\tlperl526\site\lib\Tk\Submethods.pm
+C:\tlperl526\site\lib\Tk\Submethods.pod
+C:\tlperl526\site\lib\Tk\TList.pm
+C:\tlperl526\site\lib\Tk\TList.pod
+C:\tlperl526\site\lib\Tk\Table.pm
+C:\tlperl526\site\lib\Tk\Table.pod
+C:\tlperl526\site\lib\Tk\Tcl-perl.pod
+C:\tlperl526\site\lib\Tk\Text.pm
+C:\tlperl526\site\lib\Tk\Text.pod
+C:\tlperl526\site\lib\Tk\TextEdit.pm
+C:\tlperl526\site\lib\Tk\TextList.pm
+C:\tlperl526\site\lib\Tk\TextUndo.pm
+C:\tlperl526\site\lib\Tk\TextUndo.pod
+C:\tlperl526\site\lib\Tk\Text\Tag.pm
+C:\tlperl526\site\lib\Tk\Tiler.pm
+C:\tlperl526\site\lib\Tk\Tiler.pod
+C:\tlperl526\site\lib\Tk\TixGrid.pm
+C:\tlperl526\site\lib\Tk\TixGrid.pod
+C:\tlperl526\site\lib\Tk\Tk.xbm
+C:\tlperl526\site\lib\Tk\Tk.xpm
+C:\tlperl526\site\lib\Tk\TkXSUB.def
+C:\tlperl526\site\lib\Tk\Toplevel.pm
+C:\tlperl526\site\lib\Tk\Toplevel.pod
+C:\tlperl526\site\lib\Tk\Trace.pm
+C:\tlperl526\site\lib\Tk\Tree.pm
+C:\tlperl526\site\lib\Tk\Tree.pod
+C:\tlperl526\site\lib\Tk\UserGuide.pod
+C:\tlperl526\site\lib\Tk\Widget.pm
+C:\tlperl526\site\lib\Tk\Widget.pod
+C:\tlperl526\site\lib\Tk\WidgetDemo.pod
+C:\tlperl526\site\lib\Tk\Wm.pm
+C:\tlperl526\site\lib\Tk\Wm.pod
+C:\tlperl526\site\lib\Tk\X.pm
+C:\tlperl526\site\lib\Tk\X.pod
+C:\tlperl526\site\lib\Tk\X11Font.pm
+C:\tlperl526\site\lib\Tk\X11Font.pod
+C:\tlperl526\site\lib\Tk\X11\X.h
+C:\tlperl526\site\lib\Tk\X11\Xatom.h
+C:\tlperl526\site\lib\Tk\X11\Xfuncproto.h
+C:\tlperl526\site\lib\Tk\X11\Xlib.h
+C:\tlperl526\site\lib\Tk\X11\Xutil.h
+C:\tlperl526\site\lib\Tk\X11\cursorfont.h
+C:\tlperl526\site\lib\Tk\X11\keysym.h
+C:\tlperl526\site\lib\Tk\X11\keysymdef.h
+C:\tlperl526\site\lib\Tk\X11\license.terms
+C:\tlperl526\site\lib\Tk\Xcamel.gif
+C:\tlperl526\site\lib\Tk\Xlib.pm
+C:\tlperl526\site\lib\Tk\Xrm.pm
+C:\tlperl526\site\lib\Tk\Xrm.pod
+C:\tlperl526\site\lib\Tk\act_folder.xbm
+C:\tlperl526\site\lib\Tk\act_folder.xpm
+C:\tlperl526\site\lib\Tk\after.pod
+C:\tlperl526\site\lib\Tk\anim.gif
+C:\tlperl526\site\lib\Tk\arrowdownwin.xbm
+C:\tlperl526\site\lib\Tk\balArrow.xbm
+C:\tlperl526\site\lib\Tk\bind.pod
+C:\tlperl526\site\lib\Tk\bindtags.pod
+C:\tlperl526\site\lib\Tk\callbacks.pod
+C:\tlperl526\site\lib\Tk\cbxarrow.xbm
+C:\tlperl526\site\lib\Tk\chooseColor.pod
+C:\tlperl526\site\lib\Tk\chooseDirectory.pod
+C:\tlperl526\site\lib\Tk\composite.pod
+C:\tlperl526\site\lib\Tk\demos\LabEnLabRad.pm
+C:\tlperl526\site\lib\Tk\demos\images\QuitPB.xpm
+C:\tlperl526\site\lib\Tk\demos\images\QuitPBa.xpm
+C:\tlperl526\site\lib\Tk\demos\images\c.icon
+C:\tlperl526\site\lib\Tk\demos\images\cursor.cur
+C:\tlperl526\site\lib\Tk\demos\images\cursor.mask
+C:\tlperl526\site\lib\Tk\demos\images\cursor.xbm
+C:\tlperl526\site\lib\Tk\demos\images\dir.icon
+C:\tlperl526\site\lib\Tk\demos\images\dir.mask
+C:\tlperl526\site\lib\Tk\demos\images\earth.gif
+C:\tlperl526\site\lib\Tk\demos\images\earthris.gif
+C:\tlperl526\site\lib\Tk\demos\images\face
+C:\tlperl526\site\lib\Tk\demos\images\flagdown
+C:\tlperl526\site\lib\Tk\demos\images\flagup
+C:\tlperl526\site\lib\Tk\demos\images\grey.25
+C:\tlperl526\site\lib\Tk\demos\images\grey.5
+C:\tlperl526\site\lib\Tk\demos\images\letters
+C:\tlperl526\site\lib\Tk\demos\images\mickey.gif
+C:\tlperl526\site\lib\Tk\demos\images\ned.xpm
+C:\tlperl526\site\lib\Tk\demos\images\noletters
+C:\tlperl526\site\lib\Tk\demos\images\page.icon
+C:\tlperl526\site\lib\Tk\demos\images\page.mask
+C:\tlperl526\site\lib\Tk\demos\images\pattern
+C:\tlperl526\site\lib\Tk\demos\images\teapot.ppm
+C:\tlperl526\site\lib\Tk\demos\widget_lib\Ball.pm
+C:\tlperl526\site\lib\Tk\demos\widget_lib\HList.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\HList2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\Plot.pm
+C:\tlperl526\site\lib\Tk\demos\widget_lib\WidgetDemo.pm
+C:\tlperl526\site\lib\Tk\demos\widget_lib\arrows.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\balloon.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\bind.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\bitmaps.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\bounce.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\browseentry.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\browseentry2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\button.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\check.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\choosedir.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\clrpick.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\colors.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\cscroll.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\ctext.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\dialog1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\dialog2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\dirtree.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\entry1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\entry2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\entry3.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\filebox.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\floor.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\form.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\form_mgr.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\hello.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\hscale.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\icon.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\image1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\image2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\items.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\keysyms.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\labelframe.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\labels.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\labframe.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\mega.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\menbut.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\menus.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\menus2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\msgBox.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\notebook.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\paned1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\paned2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\photo1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\photo2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\plot.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\progress.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\puzzle.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\radio.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\ruler.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\sayings.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\search.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\showVars.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\slide.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\spin.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\states.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\style.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\texts.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\trace1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\trace2.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\transtile.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\twind.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\unicodeout.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\virtevents1.pl
+C:\tlperl526\site\lib\Tk\demos\widget_lib\vscale.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\Gedi.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\TEMPLATE.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\Tiler.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\all.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\cursor.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\lib\npuz\Xcamel.npuz
+C:\tlperl526\site\lib\Tk\demos\widtrib\npuz.pl
+C:\tlperl526\site\lib\Tk\demos\widtrib\plop.pl
+C:\tlperl526\site\lib\Tk\event.pod
+C:\tlperl526\site\lib\Tk\exit.pod
+C:\tlperl526\site\lib\Tk\file.xbm
+C:\tlperl526\site\lib\Tk\file.xpm
+C:\tlperl526\site\lib\Tk\fileevent.pod
+C:\tlperl526\site\lib\Tk\focus.pod
+C:\tlperl526\site\lib\Tk\folder.xbm
+C:\tlperl526\site\lib\Tk\folder.xpm
+C:\tlperl526\site\lib\Tk\form.pod
+C:\tlperl526\site\lib\Tk\getOpenFile.pod
+C:\tlperl526\site\lib\Tk\getSaveFile.pod
+C:\tlperl526\site\lib\Tk\grab.pod
+C:\tlperl526\site\lib\Tk\grid.pod
+C:\tlperl526\site\lib\Tk\icon.gif
+C:\tlperl526\site\lib\Tk\install.pm
+C:\tlperl526\site\lib\Tk\license.terms
+C:\tlperl526\site\lib\Tk\mega.pod
+C:\tlperl526\site\lib\Tk\messageBox.pod
+C:\tlperl526\site\lib\Tk\openfile.xbm
+C:\tlperl526\site\lib\Tk\openfolder.xbm
+C:\tlperl526\site\lib\Tk\openfolder.xpm
+C:\tlperl526\site\lib\Tk\option.pod
+C:\tlperl526\site\lib\Tk\options.pod
+C:\tlperl526\site\lib\Tk\overview.pod
+C:\tlperl526\site\lib\Tk\pTk.pod
+C:\tlperl526\site\lib\Tk\pTk\Lang.h
+C:\tlperl526\site\lib\Tk\pTk\Lang.m
+C:\tlperl526\site\lib\Tk\pTk\Lang.t
+C:\tlperl526\site\lib\Tk\pTk\Lang_f.h
+C:\tlperl526\site\lib\Tk\pTk\Tcl-pTk
+C:\tlperl526\site\lib\Tk\pTk\Xlib.h
+C:\tlperl526\site\lib\Tk\pTk\Xlib.m
+C:\tlperl526\site\lib\Tk\pTk\Xlib.t
+C:\tlperl526\site\lib\Tk\pTk\Xlib_f.h
+C:\tlperl526\site\lib\Tk\pTk\compat\limits.h
+C:\tlperl526\site\lib\Tk\pTk\compat\stdlib.h
+C:\tlperl526\site\lib\Tk\pTk\compat\unistd.h
+C:\tlperl526\site\lib\Tk\pTk\default.h
+C:\tlperl526\site\lib\Tk\pTk\img.h
+C:\tlperl526\site\lib\Tk\pTk\imgInt.h
+C:\tlperl526\site\lib\Tk\pTk\imgInt.m
+C:\tlperl526\site\lib\Tk\pTk\imgInt.t
+C:\tlperl526\site\lib\Tk\pTk\imgInt_f.h
+C:\tlperl526\site\lib\Tk\pTk\ks_names.h
+C:\tlperl526\site\lib\Tk\pTk\mkVFunc
+C:\tlperl526\site\lib\Tk\pTk\moredefs.h
+C:\tlperl526\site\lib\Tk\pTk\port.h
+C:\tlperl526\site\lib\Tk\pTk\tcl.h
+C:\tlperl526\site\lib\Tk\pTk\tclDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tclDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tclDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tclDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tclIntDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tclIntPlatDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tclMath.h
+C:\tlperl526\site\lib\Tk\pTk\tclPlatDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tclWinInt.h
+C:\tlperl526\site\lib\Tk\pTk\tix.h
+C:\tlperl526\site\lib\Tk\pTk\tix.m
+C:\tlperl526\site\lib\Tk\pTk\tix.t
+C:\tlperl526\site\lib\Tk\pTk\tixBitmaps.h
+C:\tlperl526\site\lib\Tk\pTk\tixDef.h
+C:\tlperl526\site\lib\Tk\pTk\tixForm.h
+C:\tlperl526\site\lib\Tk\pTk\tixGrData.h
+C:\tlperl526\site\lib\Tk\pTk\tixGrid.h
+C:\tlperl526\site\lib\Tk\pTk\tixHList.h
+C:\tlperl526\site\lib\Tk\pTk\tixImgXpm.h
+C:\tlperl526\site\lib\Tk\pTk\tixImgXpm.m
+C:\tlperl526\site\lib\Tk\pTk\tixImgXpm.t
+C:\tlperl526\site\lib\Tk\pTk\tixImgXpm_f.h
+C:\tlperl526\site\lib\Tk\pTk\tixInt.h
+C:\tlperl526\site\lib\Tk\pTk\tixInt.m
+C:\tlperl526\site\lib\Tk\pTk\tixInt.t
+C:\tlperl526\site\lib\Tk\pTk\tixInt_f.h
+C:\tlperl526\site\lib\Tk\pTk\tixPort.h
+C:\tlperl526\site\lib\Tk\pTk\tixTList.h
+C:\tlperl526\site\lib\Tk\pTk\tixWinInt.h
+C:\tlperl526\site\lib\Tk\pTk\tixWinPort.h
+C:\tlperl526\site\lib\Tk\pTk\tix_f.h
+C:\tlperl526\site\lib\Tk\pTk\tk.h
+C:\tlperl526\site\lib\Tk\pTk\tk.m
+C:\tlperl526\site\lib\Tk\pTk\tk.t
+C:\tlperl526\site\lib\Tk\pTk\tk3d.h
+C:\tlperl526\site\lib\Tk\pTk\tkButton.h
+C:\tlperl526\site\lib\Tk\pTk\tkCanvas.h
+C:\tlperl526\site\lib\Tk\pTk\tkCanvases.h
+C:\tlperl526\site\lib\Tk\pTk\tkColor.h
+C:\tlperl526\site\lib\Tk\pTk\tkConfig.h
+C:\tlperl526\site\lib\Tk\pTk\tkDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tkDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tkDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tkDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkEvent.h
+C:\tlperl526\site\lib\Tk\pTk\tkEvent.m
+C:\tlperl526\site\lib\Tk\pTk\tkEvent.t
+C:\tlperl526\site\lib\Tk\pTk\tkEvent_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkFileFilter.h
+C:\tlperl526\site\lib\Tk\pTk\tkFont.h
+C:\tlperl526\site\lib\Tk\pTk\tkImgPhoto.h
+C:\tlperl526\site\lib\Tk\pTk\tkImgPhoto.m
+C:\tlperl526\site\lib\Tk\pTk\tkImgPhoto.t
+C:\tlperl526\site\lib\Tk\pTk\tkImgPhoto_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkInitScript.h
+C:\tlperl526\site\lib\Tk\pTk\tkInt.h
+C:\tlperl526\site\lib\Tk\pTk\tkInt.m
+C:\tlperl526\site\lib\Tk\pTk\tkInt.t
+C:\tlperl526\site\lib\Tk\pTk\tkIntDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tkIntDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tkIntDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tkIntDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkIntPlatDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tkIntPlatDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tkIntPlatDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tkIntPlatDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkIntXlibDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tkIntXlibDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tkIntXlibDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tkIntXlibDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkInt_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkMenu.h
+C:\tlperl526\site\lib\Tk\pTk\tkMenubutton.h
+C:\tlperl526\site\lib\Tk\pTk\tkOption.h
+C:\tlperl526\site\lib\Tk\pTk\tkOption.m
+C:\tlperl526\site\lib\Tk\pTk\tkOption.t
+C:\tlperl526\site\lib\Tk\pTk\tkOption_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkPlatDecls.h
+C:\tlperl526\site\lib\Tk\pTk\tkPlatDecls.m
+C:\tlperl526\site\lib\Tk\pTk\tkPlatDecls.t
+C:\tlperl526\site\lib\Tk\pTk\tkPlatDecls_f.h
+C:\tlperl526\site\lib\Tk\pTk\tkPort.h
+C:\tlperl526\site\lib\Tk\pTk\tkScale.h
+C:\tlperl526\site\lib\Tk\pTk\tkScrollbar.h
+C:\tlperl526\site\lib\Tk\pTk\tkSelect.h
+C:\tlperl526\site\lib\Tk\pTk\tkText.h
+C:\tlperl526\site\lib\Tk\pTk\tkUndo.h
+C:\tlperl526\site\lib\Tk\pTk\tkVMacro.h
+C:\tlperl526\site\lib\Tk\pTk\tkWin.h
+C:\tlperl526\site\lib\Tk\pTk\tkWinDefault.h
+C:\tlperl526\site\lib\Tk\pTk\tkWinInt.h
+C:\tlperl526\site\lib\Tk\pTk\tkWinPort.h
+C:\tlperl526\site\lib\Tk\pTk\tkXrm.h
+C:\tlperl526\site\lib\Tk\pTk\tk_f.h
+C:\tlperl526\site\lib\Tk\pTk\xbytes.h
+C:\tlperl526\site\lib\Tk\pack.pod
+C:\tlperl526\site\lib\Tk\palette.pod
+C:\tlperl526\site\lib\Tk\place.pod
+C:\tlperl526\site\lib\Tk\prolog.ps
+C:\tlperl526\site\lib\Tk\selection.pod
+C:\tlperl526\site\lib\Tk\send.pod
+C:\tlperl526\site\lib\Tk\srcfile.xpm
+C:\tlperl526\site\lib\Tk\textfile.xpm
+C:\tlperl526\site\lib\Tk\tixWm.pod
+C:\tlperl526\site\lib\Tk\tkGlue.def
+C:\tlperl526\site\lib\Tk\tkGlue.h
+C:\tlperl526\site\lib\Tk\tkGlue.m
+C:\tlperl526\site\lib\Tk\tkGlue.t
+C:\tlperl526\site\lib\Tk\tkGlue_f.h
+C:\tlperl526\site\lib\Tk\tkvars.pod
+C:\tlperl526\site\lib\Tk\tranicon.gif
+C:\tlperl526\site\lib\Tk\typemap
+C:\tlperl526\site\lib\Tk\vtab.def
+C:\tlperl526\site\lib\Tk\widgets.pm
+C:\tlperl526\site\lib\Tk\widgets.pod
+C:\tlperl526\site\lib\Tk\win.xbm
+C:\tlperl526\site\lib\Tk\winfolder.xpm
+C:\tlperl526\site\lib\Tk\wintext.xpm
+C:\tlperl526\site\lib\auto\Tk\CancelRepeat.al
+C:\tlperl526\site\lib\auto\Tk\Canvas\Canvas.dll
+C:\tlperl526\site\lib\auto\Tk\Clipboard\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Clipboard\getSelected.al
+C:\tlperl526\site\lib\auto\Tk\Compound\Compound.dll
+C:\tlperl526\site\lib\auto\Tk\DragDrop\Win32Site\Win32Site.dll
+C:\tlperl526\site\lib\auto\Tk\EnterFocus.al
+C:\tlperl526\site\lib\auto\Tk\Entry\Entry.dll
+C:\tlperl526\site\lib\auto\Tk\Error.al
+C:\tlperl526\site\lib\auto\Tk\Event\Event.dll
+C:\tlperl526\site\lib\auto\Tk\FirstMenu.al
+C:\tlperl526\site\lib\auto\Tk\FocusChildren.al
+C:\tlperl526\site\lib\auto\Tk\FocusOK.al
+C:\tlperl526\site\lib\auto\Tk\Frame\AddScrollbars.al
+C:\tlperl526\site\lib\auto\Tk\Frame\FindMenu.al
+C:\tlperl526\site\lib\auto\Tk\Frame\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Frame\freeze_on_map.al
+C:\tlperl526\site\lib\auto\Tk\Frame\label.al
+C:\tlperl526\site\lib\auto\Tk\Frame\labelPack.al
+C:\tlperl526\site\lib\auto\Tk\Frame\labelVariable.al
+C:\tlperl526\site\lib\auto\Tk\Frame\packscrollbars.al
+C:\tlperl526\site\lib\auto\Tk\Frame\queuePack.al
+C:\tlperl526\site\lib\auto\Tk\Frame\sbset.al
+C:\tlperl526\site\lib\auto\Tk\Frame\scrollbars.al
+C:\tlperl526\site\lib\auto\Tk\HList\HList.dll
+C:\tlperl526\site\lib\auto\Tk\IO\IO.dll
+C:\tlperl526\site\lib\auto\Tk\ImageNames.al
+C:\tlperl526\site\lib\auto\Tk\ImageTypes.al
+C:\tlperl526\site\lib\auto\Tk\JPEG\JPEG.dll
+C:\tlperl526\site\lib\auto\Tk\Listbox\AutoScan.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\BeginExtend.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\BeginSelect.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\BeginToggle.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\ButtonRelease_1.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\CLEAR.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\Cancel.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\Cntrl_End.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\Cntrl_Home.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\Cntrl_backslash.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\DELETE.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\DataExtend.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\EXISTS.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\EXTEND.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\ExtendUpDown.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\FETCH.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\FETCHSIZE.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\Listbox.dll
+C:\tlperl526\site\lib\auto\Tk\Listbox\Motion.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\POP.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\PUSH.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\SHIFT.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\SPLICE.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\STORE.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\SelectAll.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\SetList.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\TIEARRAY.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\TIESCALAR.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\UNSHIFT.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\UpDown.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Listbox\clipboardPaste.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\deleteSelected.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\getSelected.al
+C:\tlperl526\site\lib\auto\Tk\Listbox\xyIndex.al
+C:\tlperl526\site\lib\auto\Tk\Menubutton\Menubutton.dll
+C:\tlperl526\site\lib\auto\Tk\NBFrame\NBFrame.dll
+C:\tlperl526\site\lib\auto\Tk\PNG\PNG.dll
+C:\tlperl526\site\lib\auto\Tk\Pixmap\Pixmap.dll
+C:\tlperl526\site\lib\auto\Tk\Receive.al
+C:\tlperl526\site\lib\auto\Tk\RepeatId.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Activate.al
+C:\tlperl526\site\lib\auto\Tk\Scale\ButtonDown.al
+C:\tlperl526\site\lib\auto\Tk\Scale\ButtonUp.al
+C:\tlperl526\site\lib\auto\Tk\Scale\ControlPress.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Drag.al
+C:\tlperl526\site\lib\auto\Tk\Scale\EndDrag.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Enter.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Increment.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Leave.al
+C:\tlperl526\site\lib\auto\Tk\Scale\Scale.dll
+C:\tlperl526\site\lib\auto\Tk\Scale\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ButtonDown.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ButtonUp.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Drag.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\EndDrag.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Enter.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Leave.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Motion.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ScrlByPages.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ScrlByUnits.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ScrlToPos.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\ScrlTopBottom.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Scrollbar.dll
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\Select.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\StartDrag.al
+C:\tlperl526\site\lib\auto\Tk\Scrollbar\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Selection.al
+C:\tlperl526\site\lib\auto\Tk\TList\TList.dll
+C:\tlperl526\site\lib\auto\Tk\Table\Create.al
+C:\tlperl526\site\lib\auto\Tk\Table\Posn.al
+C:\tlperl526\site\lib\auto\Tk\Table\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Table\see.al
+C:\tlperl526\site\lib\auto\Tk\Table\totalColumns.al
+C:\tlperl526\site\lib\auto\Tk\Table\totalRows.al
+C:\tlperl526\site\lib\auto\Tk\TextEdit\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\TextUndo\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Text\Text.dll
+C:\tlperl526\site\lib\auto\Tk\Text\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\TixGrid\TixGrid.dll
+C:\tlperl526\site\lib\auto\Tk\Tk.dll
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_BindIn.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_BindOut.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_Create.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_Destroy.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_In.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\FG_Out.al
+C:\tlperl526\site\lib\auto\Tk\Toplevel\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\TraverseToMenu.al
+C:\tlperl526\site\lib\auto\Tk\Widget\ASkludge.al
+C:\tlperl526\site\lib\auto\Tk\Widget\AltKeyInDialog.al
+C:\tlperl526\site\lib\auto\Tk\Widget\AmpWidget.al
+C:\tlperl526\site\lib\auto\Tk\Widget\FindAltKeyTarget.al
+C:\tlperl526\site\lib\auto\Tk\Widget\MasterMenu.al
+C:\tlperl526\site\lib\auto\Tk\Widget\RestoreFocusGrab.al
+C:\tlperl526\site\lib\auto\Tk\Widget\SetAmpText.al
+C:\tlperl526\site\lib\auto\Tk\Widget\SetFocusGrab.al
+C:\tlperl526\site\lib\auto\Tk\Widget\UnderlineAmpersand.al
+C:\tlperl526\site\lib\auto\Tk\Widget\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Widget\bindDump.al
+C:\tlperl526\site\lib\auto\Tk\Widget\clipboardKeysyms.al
+C:\tlperl526\site\lib\auto\Tk\Widget\pathname.al
+C:\tlperl526\site\lib\auto\Tk\Wm\AnchorAdjust.al
+C:\tlperl526\site\lib\auto\Tk\Wm\FullScreen.al
+C:\tlperl526\site\lib\auto\Tk\Wm\Popup.al
+C:\tlperl526\site\lib\auto\Tk\Wm\Post.al
+C:\tlperl526\site\lib\auto\Tk\Wm\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Wm\iconposition.al
+C:\tlperl526\site\lib\auto\Tk\X\X.dll
+C:\tlperl526\site\lib\auto\Tk\X\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\Xlib\Xlib.dll
+C:\tlperl526\site\lib\auto\Tk\autosplit.ix
+C:\tlperl526\site\lib\auto\Tk\break.al
+C:\tlperl526\site\lib\auto\Tk\focusFollowsMouse.al
+C:\tlperl526\site\lib\auto\Tk\focusNext.al
+C:\tlperl526\site\lib\auto\Tk\focusPrev.al
+C:\tlperl526\site\lib\auto\Tk\getEncoding.al
+C:\tlperl526\site\lib\auto\Tk\getNextFocus.al
+C:\tlperl526\site\lib\auto\Tk\getPrevFocus.al
+C:\tlperl526\site\lib\auto\Tk\interps.al
+C:\tlperl526\site\lib\auto\Tk\lsearch.al
+C:\tlperl526\site\lib\auto\Tk\pTk\extralibs.ld
+C:\tlperl526\site\lib\auto\Tk\tabFocus.al
+C:\tlperl526\site\lib\auto\Tk\updateWidgets.al
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dll
index aaea038696e..75ca2ab9a20 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dll
index a6999af8459..79d7cfc45d9 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist
index f39d318ae22..19c42c1367a 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\Tk\DirSelect.pm
+C:\tlperl526\site\lib\Tk\DirSelect.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll
index 525b9ca16ad..f13fe393efe 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll
index a0a92119300..a20841f1a97 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll
index 61b4c43543d..12ed3947cbd 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll
index 3887b0688f7..c2b28964077 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll
index c99e35fa409..4985b7270df 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll
index 47462a79290..21212646b93 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dll
index a8650b82e74..02d31f43326 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dll
index 859bcf7837d..685874a6ec4 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll
index 826dc1c5ee9..c003318840a 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll
index d3e627056bc..9260f4a7b77 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll
index ca6e720a39b..b2859bafcef 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll
index dceb08656e9..9a29cd449e6 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll
index 6581166a0d2..63b9ae958d1 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll
index 74a7db0aec0..07a4dc6daf1 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll
index db74843f80d..c14323ccc9c 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll
index 68783a2bc86..d68c98bf2a4 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll
index c1fc88120c5..7e135378ed1 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll
index 5efc1ed7168..485c772a0d0 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll b/Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll
index f6753ab9b41..4e8d1614b59 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Try/Tiny/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Try/Tiny/.packlist
index 44c33603fa6..c0f914d4fb7 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Try/Tiny/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Try/Tiny/.packlist
@@ -1 +1 @@
-C:\tlperl\site\lib\Try\Tiny.pm
+C:\tlperl526\site\lib\Try\Tiny.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Types/Serialiser/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Types/Serialiser/.packlist
deleted file mode 100644
index 67c43ab14db..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/Types/Serialiser/.packlist
+++ /dev/null
@@ -1,2 +0,0 @@
-C:\tlperl\site\lib\Types\Serialiser.pm
-C:\tlperl\site\lib\Types\Serialiser\Error.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/URI/.packlist b/Master/tlpkg/tlperl/site/lib/auto/URI/.packlist
index 9213ecb7b1d..ff40cb104cf 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/URI/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/URI/.packlist
@@ -1,53 +1,53 @@
-C:\tlperl\site\lib\URI.pm
-C:\tlperl\site\lib\URI\Escape.pm
-C:\tlperl\site\lib\URI\Heuristic.pm
-C:\tlperl\site\lib\URI\IRI.pm
-C:\tlperl\site\lib\URI\QueryParam.pm
-C:\tlperl\site\lib\URI\Split.pm
-C:\tlperl\site\lib\URI\URL.pm
-C:\tlperl\site\lib\URI\WithBase.pm
-C:\tlperl\site\lib\URI\_foreign.pm
-C:\tlperl\site\lib\URI\_generic.pm
-C:\tlperl\site\lib\URI\_idna.pm
-C:\tlperl\site\lib\URI\_ldap.pm
-C:\tlperl\site\lib\URI\_login.pm
-C:\tlperl\site\lib\URI\_punycode.pm
-C:\tlperl\site\lib\URI\_query.pm
-C:\tlperl\site\lib\URI\_segment.pm
-C:\tlperl\site\lib\URI\_server.pm
-C:\tlperl\site\lib\URI\_userpass.pm
-C:\tlperl\site\lib\URI\data.pm
-C:\tlperl\site\lib\URI\file.pm
-C:\tlperl\site\lib\URI\file\Base.pm
-C:\tlperl\site\lib\URI\file\FAT.pm
-C:\tlperl\site\lib\URI\file\Mac.pm
-C:\tlperl\site\lib\URI\file\OS2.pm
-C:\tlperl\site\lib\URI\file\QNX.pm
-C:\tlperl\site\lib\URI\file\Unix.pm
-C:\tlperl\site\lib\URI\file\Win32.pm
-C:\tlperl\site\lib\URI\ftp.pm
-C:\tlperl\site\lib\URI\gopher.pm
-C:\tlperl\site\lib\URI\http.pm
-C:\tlperl\site\lib\URI\https.pm
-C:\tlperl\site\lib\URI\ldap.pm
-C:\tlperl\site\lib\URI\ldapi.pm
-C:\tlperl\site\lib\URI\ldaps.pm
-C:\tlperl\site\lib\URI\mailto.pm
-C:\tlperl\site\lib\URI\mms.pm
-C:\tlperl\site\lib\URI\news.pm
-C:\tlperl\site\lib\URI\nntp.pm
-C:\tlperl\site\lib\URI\pop.pm
-C:\tlperl\site\lib\URI\rlogin.pm
-C:\tlperl\site\lib\URI\rsync.pm
-C:\tlperl\site\lib\URI\rtsp.pm
-C:\tlperl\site\lib\URI\rtspu.pm
-C:\tlperl\site\lib\URI\sftp.pm
-C:\tlperl\site\lib\URI\sip.pm
-C:\tlperl\site\lib\URI\sips.pm
-C:\tlperl\site\lib\URI\snews.pm
-C:\tlperl\site\lib\URI\ssh.pm
-C:\tlperl\site\lib\URI\telnet.pm
-C:\tlperl\site\lib\URI\tn3270.pm
-C:\tlperl\site\lib\URI\urn.pm
-C:\tlperl\site\lib\URI\urn\isbn.pm
-C:\tlperl\site\lib\URI\urn\oid.pm
+C:\tlperl526\site\lib\URI.pm
+C:\tlperl526\site\lib\URI\Escape.pm
+C:\tlperl526\site\lib\URI\Heuristic.pm
+C:\tlperl526\site\lib\URI\IRI.pm
+C:\tlperl526\site\lib\URI\QueryParam.pm
+C:\tlperl526\site\lib\URI\Split.pm
+C:\tlperl526\site\lib\URI\URL.pm
+C:\tlperl526\site\lib\URI\WithBase.pm
+C:\tlperl526\site\lib\URI\_foreign.pm
+C:\tlperl526\site\lib\URI\_generic.pm
+C:\tlperl526\site\lib\URI\_idna.pm
+C:\tlperl526\site\lib\URI\_ldap.pm
+C:\tlperl526\site\lib\URI\_login.pm
+C:\tlperl526\site\lib\URI\_punycode.pm
+C:\tlperl526\site\lib\URI\_query.pm
+C:\tlperl526\site\lib\URI\_segment.pm
+C:\tlperl526\site\lib\URI\_server.pm
+C:\tlperl526\site\lib\URI\_userpass.pm
+C:\tlperl526\site\lib\URI\data.pm
+C:\tlperl526\site\lib\URI\file.pm
+C:\tlperl526\site\lib\URI\file\Base.pm
+C:\tlperl526\site\lib\URI\file\FAT.pm
+C:\tlperl526\site\lib\URI\file\Mac.pm
+C:\tlperl526\site\lib\URI\file\OS2.pm
+C:\tlperl526\site\lib\URI\file\QNX.pm
+C:\tlperl526\site\lib\URI\file\Unix.pm
+C:\tlperl526\site\lib\URI\file\Win32.pm
+C:\tlperl526\site\lib\URI\ftp.pm
+C:\tlperl526\site\lib\URI\gopher.pm
+C:\tlperl526\site\lib\URI\http.pm
+C:\tlperl526\site\lib\URI\https.pm
+C:\tlperl526\site\lib\URI\ldap.pm
+C:\tlperl526\site\lib\URI\ldapi.pm
+C:\tlperl526\site\lib\URI\ldaps.pm
+C:\tlperl526\site\lib\URI\mailto.pm
+C:\tlperl526\site\lib\URI\mms.pm
+C:\tlperl526\site\lib\URI\news.pm
+C:\tlperl526\site\lib\URI\nntp.pm
+C:\tlperl526\site\lib\URI\pop.pm
+C:\tlperl526\site\lib\URI\rlogin.pm
+C:\tlperl526\site\lib\URI\rsync.pm
+C:\tlperl526\site\lib\URI\rtsp.pm
+C:\tlperl526\site\lib\URI\rtspu.pm
+C:\tlperl526\site\lib\URI\sftp.pm
+C:\tlperl526\site\lib\URI\sip.pm
+C:\tlperl526\site\lib\URI\sips.pm
+C:\tlperl526\site\lib\URI\snews.pm
+C:\tlperl526\site\lib\URI\ssh.pm
+C:\tlperl526\site\lib\URI\telnet.pm
+C:\tlperl526\site\lib\URI\tn3270.pm
+C:\tlperl526\site\lib\URI\urn.pm
+C:\tlperl526\site\lib\URI\urn\isbn.pm
+C:\tlperl526\site\lib\URI\urn\oid.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist b/Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist
index 854d05abe32..60260cec685 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\WWW\RobotRules.pm
-C:\tlperl\site\lib\WWW\RobotRules\AnyDBM_File.pm
+C:\tlperl526\site\lib\WWW\RobotRules.pm
+C:\tlperl526\site\lib\WWW\RobotRules\AnyDBM_File.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist
index 1cba447ccf8..f2a1d060af9 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist
@@ -1,7 +1,7 @@
-C:\tlperl\site\lib\Win32\API.pm
-C:\tlperl\site\lib\Win32\API\Callback.pm
-C:\tlperl\site\lib\Win32\API\Callback\IATPatch.pod
-C:\tlperl\site\lib\Win32\API\Struct.pm
-C:\tlperl\site\lib\Win32\API\Type.pm
-C:\tlperl\site\lib\auto\Win32\API\API.dll
-C:\tlperl\site\lib\auto\Win32\API\Callback\Callback.dll
+C:\tlperl526\site\lib\Win32\API.pm
+C:\tlperl526\site\lib\Win32\API\Callback.pm
+C:\tlperl526\site\lib\Win32\API\Callback\IATPatch.pod
+C:\tlperl526\site\lib\Win32\API\Struct.pm
+C:\tlperl526\site\lib\Win32\API\Type.pm
+C:\tlperl526\site\lib\auto\Win32\API\API.dll
+C:\tlperl526\site\lib\auto\Win32\API\Callback\Callback.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll
index 1da8a27ac20..14c1c55329b 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll
index 2d50bfa9573..c0cef779fd2 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist
index 1a443fac382..557fa6b8d0e 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\Win32\Console.pm
-C:\tlperl\site\lib\auto\Win32\Console\Console.dll
+C:\tlperl526\site\lib\Win32\Console.pm
+C:\tlperl526\site\lib\auto\Win32\Console\Console.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll
index 1eb79855d63..40131300a4b 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist
index eb21a2a013b..9192cb0d0f0 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist
@@ -1,11 +1,11 @@
-C:\tlperl\site\lib\OLE.pm
-C:\tlperl\site\lib\Win32\OLE.pm
-C:\tlperl\site\lib\Win32\OLE\Const.pm
-C:\tlperl\site\lib\Win32\OLE\Enum.pm
-C:\tlperl\site\lib\Win32\OLE\Lite.pm
-C:\tlperl\site\lib\Win32\OLE\NEWS.pod
-C:\tlperl\site\lib\Win32\OLE\NLS.pm
-C:\tlperl\site\lib\Win32\OLE\TPJ.pod
-C:\tlperl\site\lib\Win32\OLE\TypeInfo.pm
-C:\tlperl\site\lib\Win32\OLE\Variant.pm
-C:\tlperl\site\lib\auto\Win32\OLE\OLE.dll
+C:\tlperl526\site\lib\OLE.pm
+C:\tlperl526\site\lib\Win32\OLE.pm
+C:\tlperl526\site\lib\Win32\OLE\Const.pm
+C:\tlperl526\site\lib\Win32\OLE\Enum.pm
+C:\tlperl526\site\lib\Win32\OLE\Lite.pm
+C:\tlperl526\site\lib\Win32\OLE\NEWS.pod
+C:\tlperl526\site\lib\Win32\OLE\NLS.pm
+C:\tlperl526\site\lib\Win32\OLE\TPJ.pod
+C:\tlperl526\site\lib\Win32\OLE\TypeInfo.pm
+C:\tlperl526\site\lib\Win32\OLE\Variant.pm
+C:\tlperl526\site\lib\auto\Win32\OLE\OLE.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll
index 9f4ee98c466..bcd715bbcd9 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/.packlist
deleted file mode 100644
index 2c8a965f3a1..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/.packlist
+++ /dev/null
@@ -1,2 +0,0 @@
-C:\tlperl\site\lib\Win32\Process.pm
-C:\tlperl\site\lib\auto\Win32\Process\Process.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/Process.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/Process.dll
deleted file mode 100755
index 7c4e92a6725..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Process/Process.dll
+++ /dev/null
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist
index 2969a834652..d8e989c07c0 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\Win32\Shortcut.pm
-C:\tlperl\site\lib\auto\Win32\Shortcut\Shortcut.dll
+C:\tlperl526\site\lib\Win32\Shortcut.pm
+C:\tlperl526\site\lib\auto\Win32\Shortcut\Shortcut.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll
index 5bb6d509e87..4f20afefc29 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist
index 090c67dccf3..b62494f253e 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist
@@ -1,2 +1,2 @@
-C:\tlperl\site\lib\Tie\Registry.pm
-C:\tlperl\site\lib\Win32\TieRegistry.pm
+C:\tlperl526\site\lib\Tie\Registry.pm
+C:\tlperl526\site\lib\Win32\TieRegistry.pm
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist b/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist
index f86d8016410..0b36b63c563 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist
@@ -1,3 +1,3 @@
-C:\tlperl\site\lib\Win32API\Registry.pm
-C:\tlperl\site\lib\Win32API\Registry\cRegistry.pc
-C:\tlperl\site\lib\auto\Win32API\Registry\Registry.dll
+C:\tlperl526\site\lib\Win32API\Registry.pm
+C:\tlperl526\site\lib\Win32API\Registry\cRegistry.pc
+C:\tlperl526\site\lib\auto\Win32API\Registry\Registry.dll
diff --git a/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll b/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll
index a460a26c22f..3a6f095a769 100755
--- a/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll
+++ b/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/site/lib/auto/common/sense/.packlist b/Master/tlpkg/tlperl/site/lib/auto/common/sense/.packlist
deleted file mode 100644
index 3ec71dd10ac..00000000000
--- a/Master/tlpkg/tlperl/site/lib/auto/common/sense/.packlist
+++ /dev/null
@@ -1,2 +0,0 @@
-C:\tlperl\site\lib\common\sense.pm
-C:\tlperl\site\lib\common\sense.pod
diff --git a/Master/tlpkg/tlperl/site/lib/auto/libwww/perl/.packlist b/Master/tlpkg/tlperl/site/lib/auto/libwww/perl/.packlist
index 156f09f720f..17702f0880c 100644
--- a/Master/tlpkg/tlperl/site/lib/auto/libwww/perl/.packlist
+++ b/Master/tlpkg/tlperl/site/lib/auto/libwww/perl/.packlist
@@ -1,33 +1,33 @@
-C:\tlperl\bin\lwp-download
-C:\tlperl\bin\lwp-download.bat
-C:\tlperl\bin\lwp-dump
-C:\tlperl\bin\lwp-dump.bat
-C:\tlperl\bin\lwp-mirror
-C:\tlperl\bin\lwp-mirror.bat
-C:\tlperl\bin\lwp-request
-C:\tlperl\bin\lwp-request.bat
-C:\tlperl\site\lib\LWP.pm
-C:\tlperl\site\lib\LWP\Authen\Basic.pm
-C:\tlperl\site\lib\LWP\Authen\Digest.pm
-C:\tlperl\site\lib\LWP\Authen\Ntlm.pm
-C:\tlperl\site\lib\LWP\ConnCache.pm
-C:\tlperl\site\lib\LWP\Debug.pm
-C:\tlperl\site\lib\LWP\DebugFile.pm
-C:\tlperl\site\lib\LWP\Debug\TraceHTTP.pm
-C:\tlperl\site\lib\LWP\MemberMixin.pm
-C:\tlperl\site\lib\LWP\Protocol.pm
-C:\tlperl\site\lib\LWP\Protocol\cpan.pm
-C:\tlperl\site\lib\LWP\Protocol\data.pm
-C:\tlperl\site\lib\LWP\Protocol\file.pm
-C:\tlperl\site\lib\LWP\Protocol\ftp.pm
-C:\tlperl\site\lib\LWP\Protocol\gopher.pm
-C:\tlperl\site\lib\LWP\Protocol\http.pm
-C:\tlperl\site\lib\LWP\Protocol\loopback.pm
-C:\tlperl\site\lib\LWP\Protocol\mailto.pm
-C:\tlperl\site\lib\LWP\Protocol\nntp.pm
-C:\tlperl\site\lib\LWP\Protocol\nogo.pm
-C:\tlperl\site\lib\LWP\RobotUA.pm
-C:\tlperl\site\lib\LWP\Simple.pm
-C:\tlperl\site\lib\LWP\UserAgent.pm
-C:\tlperl\site\lib\libwww\lwpcook.pod
-C:\tlperl\site\lib\libwww\lwptut.pod
+C:\tlperl526\bin\lwp-download
+C:\tlperl526\bin\lwp-download.bat
+C:\tlperl526\bin\lwp-dump
+C:\tlperl526\bin\lwp-dump.bat
+C:\tlperl526\bin\lwp-mirror
+C:\tlperl526\bin\lwp-mirror.bat
+C:\tlperl526\bin\lwp-request
+C:\tlperl526\bin\lwp-request.bat
+C:\tlperl526\site\lib\LWP.pm
+C:\tlperl526\site\lib\LWP\Authen\Basic.pm
+C:\tlperl526\site\lib\LWP\Authen\Digest.pm
+C:\tlperl526\site\lib\LWP\Authen\Ntlm.pm
+C:\tlperl526\site\lib\LWP\ConnCache.pm
+C:\tlperl526\site\lib\LWP\Debug.pm
+C:\tlperl526\site\lib\LWP\DebugFile.pm
+C:\tlperl526\site\lib\LWP\Debug\TraceHTTP.pm
+C:\tlperl526\site\lib\LWP\MemberMixin.pm
+C:\tlperl526\site\lib\LWP\Protocol.pm
+C:\tlperl526\site\lib\LWP\Protocol\cpan.pm
+C:\tlperl526\site\lib\LWP\Protocol\data.pm
+C:\tlperl526\site\lib\LWP\Protocol\file.pm
+C:\tlperl526\site\lib\LWP\Protocol\ftp.pm
+C:\tlperl526\site\lib\LWP\Protocol\gopher.pm
+C:\tlperl526\site\lib\LWP\Protocol\http.pm
+C:\tlperl526\site\lib\LWP\Protocol\loopback.pm
+C:\tlperl526\site\lib\LWP\Protocol\mailto.pm
+C:\tlperl526\site\lib\LWP\Protocol\nntp.pm
+C:\tlperl526\site\lib\LWP\Protocol\nogo.pm
+C:\tlperl526\site\lib\LWP\RobotUA.pm
+C:\tlperl526\site\lib\LWP\Simple.pm
+C:\tlperl526\site\lib\LWP\UserAgent.pm
+C:\tlperl526\site\lib\libwww\lwpcook.pod
+C:\tlperl526\site\lib\libwww\lwptut.pod
diff --git a/Master/tlpkg/tlperl/site/lib/common/sense.pm b/Master/tlpkg/tlperl/site/lib/common/sense.pm
deleted file mode 100644
index 14f18a4710b..00000000000
--- a/Master/tlpkg/tlperl/site/lib/common/sense.pm
+++ /dev/null
@@ -1,16 +0,0 @@
-package common::sense;
-
-our $VERSION = 3.74;
-
-# overload should be included
-
-sub import {
- local $^W; # work around perl 5.16 spewing out warnings for next statement
- # use warnings
- ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x0c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00\x00\x00\x0c\x00\x00";
- # use strict, use utf8; use feature;
- $^H |= 0x1c820fc0;
- @^H{qw(feature_fc feature_unicode feature_switch feature_state feature_say feature___SUB__ feature_evalbytes)} = (1) x 7;
-}
-
-1
diff --git a/Master/tlpkg/tlperl/site/lib/common/sense.pod b/Master/tlpkg/tlperl/site/lib/common/sense.pod
deleted file mode 100644
index 1521faf5ced..00000000000
--- a/Master/tlpkg/tlperl/site/lib/common/sense.pod
+++ /dev/null
@@ -1,445 +0,0 @@
-=head1 NAME
-
-common::sense - save a tree AND a kitten, use common::sense!
-
-=head1 SYNOPSIS
-
- use common::sense;
-
- # Supposed to be mostly the same, with much lower memory usage, as:
-
- # use utf8;
- # use strict qw(vars subs);
- # use feature qw(say state switch);
- # use feature qw(unicode_strings unicode_eval current_sub fc evalbytes);
- # no feature qw(array_base);
- # no warnings;
- # use warnings qw(FATAL closed threads internal debugging pack
- # portable prototype inplace io pipe unpack malloc
- # glob digit printf layer reserved taint closure
- # semicolon);
- # no warnings qw(exec newline unopened);
-
-=head1 DESCRIPTION
-
- “Nothing is more fairly distributed than common sense: no one thinks
- he needs more of it than he already has.”
-
- – René Descartes
-
-This module implements some sane defaults for Perl programs, as defined by
-two typical (or not so typical - use your common sense) specimens of Perl
-coders. In fact, after working out details on which warnings and strict
-modes to enable and make fatal, we found that we (and our code written so
-far, and others) fully agree on every option, even though we never used
-warnings before, so it seems this module indeed reflects a "common" sense
-among some long-time Perl coders.
-
-The basic philosophy behind the choices made in common::sense can be
-summarised as: "enforcing strict policies to catch as many bugs as
-possible, while at the same time, not limiting the expressive power
-available to the programmer".
-
-Two typical examples of how this philosophy is applied in practise is the
-handling of uninitialised and malloc warnings:
-
-=over 4
-
-=item I<uninitialised>
-
-C<undef> is a well-defined feature of perl, and enabling warnings for
-using it rarely catches any bugs, but considerably limits you in what you
-can do, so uninitialised warnings are disabled.
-
-=item I<malloc>
-
-Freeing something twice on the C level is a serious bug, usually causing
-memory corruption. It often leads to side effects much later in the
-program and there are no advantages to not reporting this, so malloc
-warnings are fatal by default.
-
-=back
-
-Unfortunately, there is no fine-grained warning control in perl, so often
-whole groups of useful warnings had to be excluded because of a single
-useless warning (for example, perl puts an arbitrary limit on the length
-of text you can match with some regexes before emitting a warning, making
-the whole C<regexp> category useless).
-
-What follows is a more thorough discussion of what this module does,
-and why it does it, and what the advantages (and disadvantages) of this
-approach are.
-
-=head1 RATIONALE
-
-=over 4
-
-=item use utf8
-
-While it's not common sense to write your programs in UTF-8, it's quickly
-becoming the most common encoding, is the designated future default
-encoding for perl sources, and the most convenient encoding available
-(you can do really nice quoting tricks...). Experience has shown that our
-programs were either all pure ascii or utf-8, both of which will stay the
-same.
-
-There are few drawbacks to enabling UTF-8 source code by default (mainly
-some speed hits due to bugs in older versions of perl), so this module
-enables UTF-8 source code encoding by default.
-
-
-=item use strict qw(subs vars)
-
-Using C<use strict> is definitely common sense, but C<use strict
-'refs'> definitely overshoots its usefulness. After almost two
-decades of Perl hacking, we decided that it does more harm than being
-useful. Specifically, constructs like these:
-
- @{ $var->[0] }
-
-Must be written like this (or similarly), when C<use strict 'refs'> is in
-scope, and C<$var> can legally be C<undef>:
-
- @{ $var->[0] || [] }
-
-This is annoying, and doesn't shield against obvious mistakes such as
-using C<"">, so one would even have to write (at least for the time
-being):
-
- @{ defined $var->[0] ? $var->[0] : [] }
-
-... which nobody with a bit of common sense would consider
-writing: clear code is clearly something else.
-
-Curiously enough, sometimes perl is not so strict, as this works even with
-C<use strict> in scope:
-
- for (@{ $var->[0] }) { ...
-
-If that isn't hypocrisy! And all that from a mere program!
-
-
-=item use feature qw(say state given ...)
-
-We found it annoying that we always have to enable extra features. If
-something breaks because it didn't anticipate future changes, so be
-it. 5.10 broke almost all our XS modules and nobody cared either (or at
-least I know of nobody who really complained about gratuitous changes -
-as opposed to bugs).
-
-Few modules that are not actively maintained work with newer versions of
-Perl, regardless of use feature or not, so a new major perl release means
-changes to many modules - new keywords are just the tip of the iceberg.
-
-If your code isn't alive, it's dead, Jim - be an active maintainer.
-
-But nobody forces you to use those extra features in modules meant for
-older versions of perl - common::sense of course works there as well.
-There is also an important other mode where having additional features by
-default is useful: commandline hacks and internal use scripts: See "much
-reduced typing", below.
-
-There is one notable exception: C<unicode_eval> is not enabled by
-default. In our opinion, C<use feature> had one main effect - newer perl
-versions don't value backwards compatibility and the ability to write
-modules for multiple perl versions much, after all, you can use feature.
-
-C<unicode_eval> doesn't add a new feature, it breaks an existing function.
-
-=item no warnings, but a lot of new errors
-
-Ah, the dreaded warnings. Even worse, the horribly dreaded C<-w>
-switch: Even though we don't care if other people use warnings (and
-certainly there are useful ones), a lot of warnings simply go against the
-spirit of Perl.
-
-Most prominently, the warnings related to C<undef>. There is nothing wrong
-with C<undef>: it has well-defined semantics, it is useful, and spitting
-out warnings you never asked for is just evil.
-
-The result was that every one of our modules did C<no warnings> in the
-past, to avoid somebody accidentally using and forcing his bad standards
-on our code. Of course, this switched off all warnings, even the useful
-ones. Not a good situation. Really, the C<-w> switch should only enable
-warnings for the main program only.
-
-Funnily enough, L<perllexwarn> explicitly mentions C<-w> (and not in a
-favourable way, calling it outright "wrong"), but standard utilities, such
-as L<prove>, or MakeMaker when running C<make test>, still enable them
-blindly.
-
-For version 2 of common::sense, we finally sat down a few hours and went
-through I<every single warning message>, identifying - according to
-common sense - all the useful ones.
-
-This resulted in the rather impressive list in the SYNOPSIS. When we
-weren't sure, we didn't include the warning, so the list might grow in
-the future (we might have made a mistake, too, so the list might shrink
-as well).
-
-Note the presence of C<FATAL> in the list: we do not think that the
-conditions caught by these warnings are worthy of a warning, we I<insist>
-that they are worthy of I<stopping> your program, I<instantly>. They are
-I<bugs>!
-
-Therefore we consider C<common::sense> to be much stricter than C<use
-warnings>, which is good if you are into strict things (we are not,
-actually, but these things tend to be subjective).
-
-After deciding on the list, we ran the module against all of our code that
-uses C<common::sense> (that is almost all of our code), and found only one
-occurrence where one of them caused a problem: one of elmex's (unreleased)
-modules contained:
-
- $fmt =~ s/([^\s\[]*)\[( [^\]]* )\]/\x0$1\x1$2\x0/xgo;
-
-We quickly agreed that indeed the code should be changed, even though it
-happened to do the right thing when the warning was switched off.
-
-
-=item much reduced typing
-
-Especially with version 2.0 of common::sense, the amount of boilerplate
-code you need to add to get I<this> policy is daunting. Nobody would write
-this out in throwaway scripts, commandline hacks or in quick internal-use
-scripts.
-
-By using common::sense you get a defined set of policies (ours, but maybe
-yours, too, if you accept them), and they are easy to apply to your
-scripts: typing C<use common::sense;> is even shorter than C<use warnings;
-use strict; use feature ...>.
-
-And you can immediately use the features of your installed perl, which
-is more difficult in code you release, but not usually an issue for
-internal-use code (downgrades of your production perl should be rare,
-right?).
-
-
-=item mucho reduced memory usage
-
-Just using all those pragmas mentioned in the SYNOPSIS together wastes
-<blink>I<< B<776> kilobytes >></blink> of precious memory in my perl, for
-I<every single perl process using our code>, which on our machines, is a
-lot. In comparison, this module only uses I<< B<four> >> kilobytes (I even
-had to write it out so it looks like more) of memory on the same platform.
-
-The money/time/effort/electricity invested in these gigabytes (probably
-petabytes globally!) of wasted memory could easily save 42 trees, and a
-kitten!
-
-Unfortunately, until everybody applies more common sense, there will still
-often be modules that pull in the monster pragmas. But one can hope...
-
-=back
-
-=head1 THERE IS NO 'no common::sense'!!!! !!!! !!
-
-This module doesn't offer an unimport. First of all, it wastes even more
-memory, second, and more importantly, who with even a bit of common sense
-would want no common sense?
-
-=head1 STABILITY AND FUTURE VERSIONS
-
-Future versions might change just about everything in this module. We
-might test our modules and upload new ones working with newer versions of
-this module, and leave you standing in the rain because we didn't tell
-you. In fact, we did so when switching from 1.0 to 2.0, which enabled gobs
-of warnings, and made them FATAL on top.
-
-Maybe we will load some nifty modules that try to emulate C<say> or so
-with perls older than 5.10 (this module, of course, should work with older
-perl versions - supporting 5.8 for example is just common sense at this
-time. Maybe not in the future, but of course you can trust our common
-sense to be consistent with, uhm, our opinion).
-
-=head1 WHAT OTHER PEOPLE HAD TO SAY ABOUT THIS MODULE
-
-apeiron
-
- "... wow"
- "I hope common::sense is a joke."
-
-crab
-
- "i wonder how it would be if joerg schilling wrote perl modules."
-
-Adam Kennedy
-
- "Very interesting, efficient, and potentially something I'd use all the time."
- [...]
- "So no common::sense for me, alas."
-
-H.Merijn Brand
-
- "Just one more reason to drop JSON::XS from my distribution list"
-
-Pista Palo
-
- "Something in short supply these days..."
-
-Steffen Schwigon
-
- "This module is quite for sure *not* just a repetition of all the other
- 'use strict, use warnings'-approaches, and it's also not the opposite.
- [...] And for its chosen middle-way it's also not the worst name ever.
- And everything is documented."
-
-BKB
-
- "[Deleted - thanks to Steffen Schwigon for pointing out this review was
- in error.]"
-
-Somni
-
- "the arrogance of the guy"
- "I swear he tacked somenoe else's name onto the module
- just so he could use the royal 'we' in the documentation"
-
-Anonymous Monk
-
- "You just gotta love this thing, its got META.json!!!"
-
-dngor
-
- "Heh. '"<elmex at ta-sa.org>"' The quotes are semantic
- distancing from that e-mail address."
-
-Jerad Pierce
-
- "Awful name (not a proper pragma), and the SYNOPSIS doesn't tell you
- anything either. Nor is it clear what features have to do with "common
- sense" or discipline."
-
-acme
-
- "THERE IS NO 'no common::sense'!!!! !!!! !!"
-
-apeiron (meta-comment about us commenting^Wquoting his comment)
-
- "How about quoting this: get a clue, you fucktarded amoeba."
-
-quanth
-
- "common sense is beautiful, json::xs is fast, Anyevent, EV are fast and
- furious. I love mlehmannware ;)"
-
-apeiron
-
- "... it's mlehmann's view of what common sense is. His view of common
- sense is certainly uncommon, insofar as anyone with a clue disagrees
- with him."
-
-apeiron (another meta-comment)
-
- "apeiron wonders if his little informant is here to steal more quotes"
-
-ew73
-
- "... I never got past the SYNOPSIS before calling it shit."
- [...]
- How come no one ever quotes me. :("
-
-chip (not willing to explain his cryptic questions about links in Changes files)
-
- "I'm willing to ask the question I've asked. I'm not willing to go
- through the whole dance you apparently have choreographed. Either
- answer the completely obvious question, or tell me to fuck off again."
-
-=head1 FREQUENTLY ASKED QUESTIONS
-
-Or frequently-come-up confusions.
-
-=over 4
-
-=item Is this module meant to be serious?
-
-Yes, we would have put it under the C<Acme::> namespace otherwise.
-
-=item But the manpage is written in a funny/stupid/... way?
-
-This was meant to make it clear that our common sense is a subjective
-thing and other people can use their own notions, taking the steam out
-of anybody who might be offended (as some people are always offended no
-matter what you do).
-
-This was a failure.
-
-But we hope the manpage still is somewhat entertaining even though it
-explains boring rationale.
-
-=item Why do you impose your conventions on my code?
-
-For some reason people keep thinking that C<common::sense> imposes
-process-wide limits, even though the SYNOPSIS makes it clear that it works
-like other similar modules - i.e. only within the scope that C<use>s them.
-
-So, no, we don't - nobody is forced to use this module, and using a module
-that relies on common::sense does not impose anything on you.
-
-=item Why do you think only your notion of common::sense is valid?
-
-Well, we don't, and have clearly written this in the documentation to
-every single release. We were just faster than anybody else w.r.t. to
-grabbing the namespace.
-
-=item But everybody knows that you have to use strict and use warnings,
-why do you disable them?
-
-Well, we don't do this either - we selectively disagree with the
-usefulness of some warnings over others. This module is aimed at
-experienced Perl programmers, not people migrating from other languages
-who might be surprised about stuff such as C<undef>. On the other hand,
-this does not exclude the usefulness of this module for total newbies, due
-to its strictness in enforcing policy, while at the same time not limiting
-the expressive power of perl.
-
-This module is considerably I<more> strict than the canonical C<use
-strict; use warnings>, as it makes all its warnings fatal in nature, so
-you can not get away with as many things as with the canonical approach.
-
-This was not implemented in version 1.0 because of the daunting number
-of warning categories and the difficulty in getting exactly the set of
-warnings you wish (i.e. look at the SYNOPSIS in how complicated it is to
-get a specific set of warnings - it is not reasonable to put this into
-every module, the maintenance effort would be enormous).
-
-=item But many modules C<use strict> or C<use warnings>, so the memory
-savings do not apply?
-
-I suddenly feel sad...
-
-But yes, that's true. Fortunately C<common::sense> still uses only a
-miniscule amount of RAM.
-
-=item But it adds another dependency to your modules!
-
-It's a fact, yeah. But it's trivial to install, most popular modules have
-many more dependencies. And we consider dependencies a good thing - it
-leads to better APIs, more thought about interworking of modules and so
-on.
-
-=item Why do you use JSON and not YAML for your META.yml?
-
-This is not true - YAML supports a large subset of JSON, and this subset
-is what META.yml is written in, so it would be correct to say "the
-META.yml is written in a common subset of YAML and JSON".
-
-The META.yml follows the YAML, JSON and META.yml specifications, and is
-correctly parsed by CPAN, so if you have trouble with it, the problem is
-likely on your side.
-
-=item But! But!
-
-Yeah, we know.
-
-=back
-
-=head1 AUTHOR
-
- Marc Lehmann <schmorp@schmorp.de>
- http://home.schmorp.de/
-
- Robin Redeker, "<elmex at ta-sa.org>".
-
-=cut
-
diff --git a/Master/tlpkg/tlperl/site/lib/libwww/lwpcook.pod b/Master/tlpkg/tlperl/site/lib/libwww/lwpcook.pod
index 43af716db06..b4d4989a6a0 100644
--- a/Master/tlpkg/tlperl/site/lib/libwww/lwpcook.pod
+++ b/Master/tlpkg/tlperl/site/lib/libwww/lwpcook.pod
@@ -97,7 +97,7 @@ operation is to access a WWW form application:
$ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(
- POST => 'http://rt.cpan.org/Public/Dist/Display.html');
+ POST => 'https://rt.cpan.org/Public/Dist/Display.html');
$req->content_type('application/x-www-form-urlencoded');
$req->content('Status=Active&Name=libwww-perl');
@@ -112,7 +112,7 @@ suitable default for the content_type:
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
- my $req = POST 'http://rt.cpan.org/Public/Dist/Display.html',
+ my $req = POST 'https://rt.cpan.org/Public/Dist/Display.html',
[ Status => 'Active', Name => 'libwww-perl' ];
print $ua->request($req)->as_string;
@@ -185,7 +185,9 @@ program for an example of this.
Some sites like to play games with cookies. By default LWP ignores
cookies provided by the servers it visits. LWP will collect cookies
-and respond to cookie requests if you set up a cookie jar.
+and respond to cookie requests if you set up a cookie jar. LWP doesn't
+provide a cookie jar itself, but if you install L<HTTP::CookieJar::LWP>,
+it can be used like this:
use LWP::UserAgent;
use HTTP::CookieJar::LWP;
@@ -258,7 +260,7 @@ name):
$ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET =>
- 'http://www.cpan.org/authors/Gisle_Aas/libwww-perl-6.02.tar.gz');
+ 'http://www.cpan.org/CPAN/authors/id/O/OA/OALDERS/libwww-perl-6.26.tar.gz');
$res = $ua->request($req, "libwww-perl.tar.gz");
if ($res->is_success) {
print "ok\n";
@@ -273,7 +275,7 @@ argument is a code reference):
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
- $URL = 'ftp://ftp.unit.no/pub/rfc/rfc-index.txt';
+ $URL = 'ftp://ftp.isc.org/pub/rfc/rfc-index.txt';
my $expected_length;
my $bytes_received = 0;