From b56b320b5e2515160073fa1b469514002688fe11 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 5 Apr 2016 22:27:26 +0000 Subject: tlperl 5.22.1 from siep git-svn-id: svn://tug.org/texlive/trunk@40252 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/tlperl/README.TEXLIVE | 4 +- Master/tlpkg/tlperl/bin/a2p.exe | Bin 124416 -> 0 bytes Master/tlpkg/tlperl/bin/libgcc_s_sjlj-1.dll | Bin 461048 -> 471519 bytes Master/tlpkg/tlperl/bin/libstdc++-6.dll | Bin 887921 -> 939212 bytes Master/tlpkg/tlperl/bin/libwinpthread-1.dll | Bin 52612 -> 52036 bytes Master/tlpkg/tlperl/bin/perl.exe | Bin 17408 -> 18432 bytes Master/tlpkg/tlperl/bin/perl5.20.2.exe | Bin 17408 -> 0 bytes Master/tlpkg/tlperl/bin/perl5.22.1.exe | Bin 0 -> 18432 bytes Master/tlpkg/tlperl/bin/perl520.dll | Bin 2046464 -> 0 bytes Master/tlpkg/tlperl/bin/perl522.dll | Bin 0 -> 2119168 bytes Master/tlpkg/tlperl/bin/perlglob.exe | Bin 13824 -> 13824 bytes Master/tlpkg/tlperl/bin/wperl.exe | Bin 17408 -> 18432 bytes Master/tlpkg/tlperl/lib/.packlist | 112 +- Master/tlpkg/tlperl/lib/App/Cpan.pm | 190 +- Master/tlpkg/tlperl/lib/App/Prove.pm | 24 +- Master/tlpkg/tlperl/lib/App/Prove/State.pm | 4 +- Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm | 4 +- .../tlperl/lib/App/Prove/State/Result/Test.pm | 4 +- Master/tlpkg/tlperl/lib/Archive/Tar.pm | 12 +- Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm | 2 +- Master/tlpkg/tlperl/lib/Archive/Tar/File.pm | 2 +- Master/tlpkg/tlperl/lib/Attribute/Handlers.pm | 12 +- Master/tlpkg/tlperl/lib/B.pm | 238 +- Master/tlpkg/tlperl/lib/B/Concise.pm | 249 +- Master/tlpkg/tlperl/lib/B/Debug.pm | 25 +- Master/tlpkg/tlperl/lib/B/Deparse.pm | 1717 +- Master/tlpkg/tlperl/lib/B/Op_private.pm | 836 + Master/tlpkg/tlperl/lib/B/Showlex.pm | 44 +- Master/tlpkg/tlperl/lib/Benchmark.pm | 16 +- Master/tlpkg/tlperl/lib/CGI.pm | 8116 -- Master/tlpkg/tlperl/lib/CGI/Apache.pm | 28 - Master/tlpkg/tlperl/lib/CGI/Carp.pm | 630 - Master/tlpkg/tlperl/lib/CGI/Cookie.pm | 541 - Master/tlpkg/tlperl/lib/CGI/Fast.pm | 221 - Master/tlpkg/tlperl/lib/CGI/Pretty.pm | 313 - Master/tlpkg/tlperl/lib/CGI/Push.pm | 326 - Master/tlpkg/tlperl/lib/CGI/Switch.pm | 29 - Master/tlpkg/tlperl/lib/CGI/Util.pm | 340 - Master/tlpkg/tlperl/lib/CORE/EXTERN.h | 12 +- Master/tlpkg/tlperl/lib/CORE/INTERN.h | 27 +- Master/tlpkg/tlperl/lib/CORE/XSUB.h | 78 +- Master/tlpkg/tlperl/lib/CORE/av.h | 8 - Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h | 108369 ++++++++++++++++-- Master/tlpkg/tlperl/lib/CORE/config.h | 567 +- Master/tlpkg/tlperl/lib/CORE/cop.h | 29 +- Master/tlpkg/tlperl/lib/CORE/cv.h | 70 +- Master/tlpkg/tlperl/lib/CORE/dosish.h | 6 - Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h | 607 + Master/tlpkg/tlperl/lib/CORE/embed.h | 326 +- Master/tlpkg/tlperl/lib/CORE/embedvar.h | 20 +- Master/tlpkg/tlperl/lib/CORE/fakesdio.h | 6 - Master/tlpkg/tlperl/lib/CORE/feature.h | 12 + Master/tlpkg/tlperl/lib/CORE/gv.h | 30 +- Master/tlpkg/tlperl/lib/CORE/handy.h | 645 +- Master/tlpkg/tlperl/lib/CORE/hv.h | 8 +- Master/tlpkg/tlperl/lib/CORE/hv_func.h | 198 +- Master/tlpkg/tlperl/lib/CORE/inline.h | 243 +- Master/tlpkg/tlperl/lib/CORE/intrpvar.h | 44 +- Master/tlpkg/tlperl/lib/CORE/iperlsys.h | 10 +- Master/tlpkg/tlperl/lib/CORE/keywords.h | 2 +- Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h | 969 +- Master/tlpkg/tlperl/lib/CORE/libperl520.a | Bin 926094 -> 0 bytes Master/tlpkg/tlperl/lib/CORE/libperl522.a | Bin 0 -> 953406 bytes Master/tlpkg/tlperl/lib/CORE/metaconfig.h | 21 +- Master/tlpkg/tlperl/lib/CORE/mg.h | 10 +- Master/tlpkg/tlperl/lib/CORE/mg_data.h | 21 +- Master/tlpkg/tlperl/lib/CORE/mg_raw.h | 20 +- Master/tlpkg/tlperl/lib/CORE/mg_vtable.h | 23 +- Master/tlpkg/tlperl/lib/CORE/mydtrace.h | 6 - Master/tlpkg/tlperl/lib/CORE/nostdio.h | 10 +- Master/tlpkg/tlperl/lib/CORE/op.h | 593 +- Master/tlpkg/tlperl/lib/CORE/op_reg_common.h | 70 +- Master/tlpkg/tlperl/lib/CORE/opcode.h | 1303 +- Master/tlpkg/tlperl/lib/CORE/opnames.h | 590 +- Master/tlpkg/tlperl/lib/CORE/overload.h | 47 +- Master/tlpkg/tlperl/lib/CORE/pad.h | 231 +- Master/tlpkg/tlperl/lib/CORE/parser.h | 30 +- Master/tlpkg/tlperl/lib/CORE/patchlevel.h | 6 +- Master/tlpkg/tlperl/lib/CORE/perl.h | 1610 +- Master/tlpkg/tlperl/lib/CORE/perlhost.h | 4 +- Master/tlpkg/tlperl/lib/CORE/perlio.h | 14 +- Master/tlpkg/tlperl/lib/CORE/perliol.h | 14 +- Master/tlpkg/tlperl/lib/CORE/perlsdio.h | 39 +- Master/tlpkg/tlperl/lib/CORE/perly.h | 62 +- Master/tlpkg/tlperl/lib/CORE/pp.h | 74 +- Master/tlpkg/tlperl/lib/CORE/pp_proto.h | 15 + Master/tlpkg/tlperl/lib/CORE/proto.h | 1122 +- Master/tlpkg/tlperl/lib/CORE/regcharclass.h | 2774 +- Master/tlpkg/tlperl/lib/CORE/regcomp.h | 157 +- Master/tlpkg/tlperl/lib/CORE/regexp.h | 161 +- Master/tlpkg/tlperl/lib/CORE/regnodes.h | 289 +- Master/tlpkg/tlperl/lib/CORE/scope.h | 21 +- Master/tlpkg/tlperl/lib/CORE/sv.h | 202 +- Master/tlpkg/tlperl/lib/CORE/thread.h | 6 - Master/tlpkg/tlperl/lib/CORE/uconfig.h | 575 +- Master/tlpkg/tlperl/lib/CORE/unicode_constants.h | 165 +- Master/tlpkg/tlperl/lib/CORE/unixish.h | 6 - Master/tlpkg/tlperl/lib/CORE/utf8.h | 208 +- Master/tlpkg/tlperl/lib/CORE/utfebcdic.h | 677 +- Master/tlpkg/tlperl/lib/CORE/util.h | 152 +- Master/tlpkg/tlperl/lib/CORE/vdir.h | 4 +- Master/tlpkg/tlperl/lib/CORE/vmem.h | 4 +- Master/tlpkg/tlperl/lib/CORE/warnings.h | 137 +- Master/tlpkg/tlperl/lib/CORE/win32.h | 39 +- Master/tlpkg/tlperl/lib/CORE/win32iop.h | 5 +- Master/tlpkg/tlperl/lib/CPAN.pm | 89 +- Master/tlpkg/tlperl/lib/CPAN/Distribution.pm | 106 +- Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm | 16 +- Master/tlpkg/tlperl/lib/CPAN/HTTP/Credentials.pm | 6 +- Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm | 7 +- Master/tlpkg/tlperl/lib/CPAN/Meta.pm | 599 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm | 362 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm | 73 +- Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm | 5 +- .../tlperl/lib/CPAN/Meta/History/Meta_1_0.pod | 238 + .../tlperl/lib/CPAN/Meta/History/Meta_1_1.pod | 300 + .../tlperl/lib/CPAN/Meta/History/Meta_1_2.pod | 711 + .../tlperl/lib/CPAN/Meta/History/Meta_1_3.pod | 734 + .../tlperl/lib/CPAN/Meta/History/Meta_1_4.pod | 787 + Master/tlpkg/tlperl/lib/CPAN/Meta/Merge.pm | 278 + Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm | 213 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm | 443 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm | 67 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm | 355 +- Master/tlpkg/tlperl/lib/CPAN/Module.pm | 17 +- Master/tlpkg/tlperl/lib/CPAN/Plugin.pm | 145 + Master/tlpkg/tlperl/lib/CPAN/Plugin/Specfile.pm | 258 + Master/tlpkg/tlperl/lib/CPAN/Shell.pm | 177 +- Master/tlpkg/tlperl/lib/Carp.pm | 51 +- Master/tlpkg/tlperl/lib/Carp/Heavy.pm | 8 +- Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm | 2 +- Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm | 2 +- Master/tlpkg/tlperl/lib/Compress/Zlib.pm | 12 +- Master/tlpkg/tlperl/lib/Config.pm | 14 +- Master/tlpkg/tlperl/lib/Config.pm.orig | 12 +- Master/tlpkg/tlperl/lib/Config.pod | 605 +- Master/tlpkg/tlperl/lib/Config/Perl/V.pm | 5 +- Master/tlpkg/tlperl/lib/Config_heavy.pl | 143 +- Master/tlpkg/tlperl/lib/Config_heavy.pl.orig | 147 +- Master/tlpkg/tlperl/lib/Cwd.pm | 369 +- Master/tlpkg/tlperl/lib/DB.pm | 6 +- Master/tlpkg/tlperl/lib/Data/Dumper.pm | 89 +- Master/tlpkg/tlperl/lib/Date/Format.pm | 403 - Master/tlpkg/tlperl/lib/Date/Language.pm | 144 - Master/tlpkg/tlperl/lib/Date/Language/Afar.pm | 49 - Master/tlpkg/tlperl/lib/Date/Language/Amharic.pm | 87 - Master/tlpkg/tlperl/lib/Date/Language/Austrian.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Brazilian.pm | 35 - Master/tlpkg/tlperl/lib/Date/Language/Bulgarian.pm | 92 - Master/tlpkg/tlperl/lib/Date/Language/Chinese.pm | 36 - .../tlpkg/tlperl/lib/Date/Language/Chinese_GB.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Czech.pm | 58 - Master/tlpkg/tlperl/lib/Date/Language/Danish.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Dutch.pm | 40 - Master/tlpkg/tlperl/lib/Date/Language/English.pm | 37 - Master/tlpkg/tlperl/lib/Date/Language/Finnish.pm | 45 - Master/tlpkg/tlperl/lib/Date/Language/French.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Gedeo.pm | 51 - Master/tlpkg/tlperl/lib/Date/Language/German.pm | 37 - Master/tlpkg/tlperl/lib/Date/Language/Greek.pm | 91 - Master/tlpkg/tlperl/lib/Date/Language/Hungarian.pm | 88 - Master/tlpkg/tlperl/lib/Date/Language/Icelandic.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Italian.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Norwegian.pm | 36 - Master/tlpkg/tlperl/lib/Date/Language/Oromo.pm | 37 - Master/tlpkg/tlperl/lib/Date/Language/Romanian.pm | 37 - Master/tlpkg/tlperl/lib/Date/Language/Russian.pm | 49 - .../tlperl/lib/Date/Language/Russian_cp1251.pm | 39 - .../tlperl/lib/Date/Language/Russian_koi8r.pm | 39 - Master/tlpkg/tlperl/lib/Date/Language/Sidama.pm | 37 - Master/tlpkg/tlperl/lib/Date/Language/Somali.pm | 62 - Master/tlpkg/tlperl/lib/Date/Language/Spanish.pm | 35 - Master/tlpkg/tlperl/lib/Date/Language/Swedish.pm | 41 - Master/tlpkg/tlperl/lib/Date/Language/Tigrinya.pm | 58 - .../tlperl/lib/Date/Language/TigrinyaEritrean.pm | 93 - .../tlperl/lib/Date/Language/TigrinyaEthiopian.pm | 93 - Master/tlpkg/tlperl/lib/Date/Language/Turkish.pm | 59 - Master/tlpkg/tlperl/lib/Date/Parse.pm | 380 - Master/tlpkg/tlperl/lib/Devel/PPPort.pm | 1013 +- Master/tlpkg/tlperl/lib/Devel/Peek.pm | 12 +- Master/tlpkg/tlperl/lib/Digest/MD5.pm | 12 +- Master/tlpkg/tlperl/lib/Digest/SHA.pm | 192 +- Master/tlpkg/tlperl/lib/Digest/SHA1.pm | 246 - Master/tlpkg/tlperl/lib/DynaLoader.pm | 7 +- Master/tlpkg/tlperl/lib/Encode.pm | 44 +- Master/tlpkg/tlperl/lib/Encode/Alias.pm | 6 +- Master/tlpkg/tlperl/lib/Encode/Locale.pm | 376 - Master/tlpkg/tlperl/lib/Encode/MIME/Header.pm | 4 +- Master/tlpkg/tlperl/lib/Encode/compat.pm | 87 - Master/tlpkg/tlperl/lib/Encode/compat/5006001.pm | 32 - Master/tlpkg/tlperl/lib/Encode/compat/Alias.pm | 330 - Master/tlpkg/tlperl/lib/Encode/compat/common.pm | 127 - Master/tlpkg/tlperl/lib/Errno.pm | 249 +- Master/tlpkg/tlperl/lib/Exporter.pm | 4 +- Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm | 6 +- Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm | 5 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm | 5 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm | 10 +- .../lib/ExtUtils/CBuilder/Platform/Windows.pm | 5 +- .../lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm | 7 +- .../lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm | 5 +- .../lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm | 5 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm | 5 +- .../lib/ExtUtils/CBuilder/Platform/android.pm | 7 +- .../lib/ExtUtils/CBuilder/Platform/cygwin.pm | 5 +- .../lib/ExtUtils/CBuilder/Platform/darwin.pm | 5 +- .../lib/ExtUtils/CBuilder/Platform/dec_osf.pm | 5 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm | 5 +- Master/tlpkg/tlperl/lib/ExtUtils/Command.pm | 31 +- Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm | 10 +- Master/tlpkg/tlperl/lib/ExtUtils/Install.pm | 14 +- Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm | 42 +- Master/tlpkg/tlperl/lib/ExtUtils/MANIFEST.SKIP | 8 + Master/tlpkg/tlperl/lib/ExtUtils/MM.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm | 179 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm | 3 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm | 3 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm | 13 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm | 3 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm | 285 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm | 92 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm | 54 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MY.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm | 196 +- .../tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod | 2 +- .../tlpkg/tlperl/lib/ExtUtils/MakeMaker/Locale.pm | 376 + .../tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod | 2 +- .../tlpkg/tlperl/lib/ExtUtils/MakeMaker/version.pm | 55 + .../tlperl/lib/ExtUtils/MakeMaker/version/regex.pm | 123 + .../tlperl/lib/ExtUtils/MakeMaker/version/vpp.pm | 1028 + Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm | 56 +- Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm | 14 +- Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm | 23 +- Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm | 138 +- .../tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm | 2 +- .../tlperl/lib/ExtUtils/ParseXS/CountLines.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Eval.pm | 2 +- .../tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm | 23 +- Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm | 3 +- Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm | 2 +- .../tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm | 2 +- .../tlperl/lib/ExtUtils/Typemaps/OutputMap.pm | 4 +- Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/typemap | 30 +- Master/tlpkg/tlperl/lib/Fatal.pm | 112 +- Master/tlpkg/tlperl/lib/Fcntl.pm | 9 +- Master/tlpkg/tlperl/lib/File/Find.pm | 1878 +- Master/tlpkg/tlperl/lib/File/Glob.pm | 2 +- Master/tlpkg/tlperl/lib/File/Listing.pm | 435 - Master/tlpkg/tlperl/lib/File/Spec.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/Functions.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/Mac.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/OS2.pm | 2 +- Master/tlpkg/tlperl/lib/File/Spec/Unix.pm | 9 +- Master/tlpkg/tlperl/lib/File/Spec/VMS.pm | 133 +- Master/tlpkg/tlperl/lib/File/Spec/Win32.pm | 2 +- Master/tlpkg/tlperl/lib/File/Which.pm | 281 - Master/tlpkg/tlperl/lib/Filter/Simple.pm | 6 +- Master/tlpkg/tlperl/lib/Filter/Util/Call.pm | 20 +- Master/tlpkg/tlperl/lib/Getopt/Long.pm | 102 +- Master/tlpkg/tlperl/lib/Getopt/Std.pm | 6 +- Master/tlpkg/tlperl/lib/HTML/Entities.pm | 483 - Master/tlpkg/tlperl/lib/HTML/Filter.pm | 112 - Master/tlpkg/tlperl/lib/HTML/HeadParser.pm | 315 - Master/tlpkg/tlperl/lib/HTML/LinkExtor.pm | 185 - Master/tlpkg/tlperl/lib/HTML/Parser.pm | 1240 - Master/tlpkg/tlperl/lib/HTML/PullParser.pm | 209 - Master/tlpkg/tlperl/lib/HTML/Tagset.pm | 471 - Master/tlpkg/tlperl/lib/HTML/TokeParser.pm | 371 - Master/tlpkg/tlperl/lib/HTTP/Config.pm | 436 - Master/tlpkg/tlperl/lib/HTTP/Cookies.pm | 781 - Master/tlpkg/tlperl/lib/HTTP/Cookies/Microsoft.pm | 329 - Master/tlpkg/tlperl/lib/HTTP/Cookies/Netscape.pm | 114 - Master/tlpkg/tlperl/lib/HTTP/Daemon.pm | 906 - Master/tlpkg/tlperl/lib/HTTP/Date.pm | 388 - Master/tlpkg/tlperl/lib/HTTP/Headers.pm | 854 - Master/tlpkg/tlperl/lib/HTTP/Headers/Auth.pm | 98 - Master/tlpkg/tlperl/lib/HTTP/Headers/ETag.pm | 94 - Master/tlpkg/tlperl/lib/HTTP/Headers/Util.pm | 199 - Master/tlpkg/tlperl/lib/HTTP/Message.pm | 1106 - Master/tlpkg/tlperl/lib/HTTP/Negotiate.pm | 528 - Master/tlpkg/tlperl/lib/HTTP/Request.pm | 242 - Master/tlpkg/tlperl/lib/HTTP/Request/Common.pm | 514 - Master/tlpkg/tlperl/lib/HTTP/Response.pm | 637 - Master/tlpkg/tlperl/lib/HTTP/Status.pm | 267 - Master/tlpkg/tlperl/lib/HTTP/Tiny.pm | 726 +- Master/tlpkg/tlperl/lib/Hash/Util.pm | 132 +- Master/tlpkg/tlperl/lib/IO.pm | 2 +- .../tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm | 6 +- .../tlperl/lib/IO/Compress/Adapter/Deflate.pm | 6 +- .../tlperl/lib/IO/Compress/Adapter/Identity.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Compress/Base.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm | 2 +- Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm | 12 +- .../tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm | 2 +- Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm | 14 +- Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm | 24 +- .../tlpkg/tlperl/lib/IO/Compress/Zip/Constants.pm | 2 +- .../tlpkg/tlperl/lib/IO/Compress/Zlib/Constants.pm | 2 +- Master/tlpkg/tlperl/lib/IO/Compress/Zlib/Extra.pm | 4 +- Master/tlpkg/tlperl/lib/IO/HTML.pm | 575 - Master/tlpkg/tlperl/lib/IO/Socket/IP.pm | 154 +- Master/tlpkg/tlperl/lib/IO/String.pm | 551 - .../tlperl/lib/IO/Uncompress/Adapter/Bunzip2.pm | 6 +- .../tlperl/lib/IO/Uncompress/Adapter/Identity.pm | 6 +- .../tlperl/lib/IO/Uncompress/Adapter/Inflate.pm | 6 +- .../tlpkg/tlperl/lib/IO/Uncompress/AnyInflate.pm | 18 +- .../tlperl/lib/IO/Uncompress/AnyUncompress.pm | 38 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Base.pm | 7 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Bunzip2.pm | 8 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Gunzip.pm | 12 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Inflate.pm | 8 +- .../tlpkg/tlperl/lib/IO/Uncompress/RawInflate.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm | 16 +- Master/tlpkg/tlperl/lib/IPC/Open3.pm | 16 +- Master/tlpkg/tlperl/lib/JSON/PP.pm | 20 +- Master/tlpkg/tlperl/lib/LWP.pm | 669 - Master/tlpkg/tlperl/lib/LWP/Authen/Basic.pm | 65 - Master/tlpkg/tlperl/lib/LWP/Authen/Digest.pm | 75 - Master/tlpkg/tlperl/lib/LWP/Authen/Ntlm.pm | 180 - Master/tlpkg/tlperl/lib/LWP/ConnCache.pm | 313 - Master/tlpkg/tlperl/lib/LWP/Debug.pm | 110 - Master/tlpkg/tlperl/lib/LWP/DebugFile.pm | 5 - Master/tlpkg/tlperl/lib/LWP/MediaTypes.pm | 280 - Master/tlpkg/tlperl/lib/LWP/MemberMixin.pm | 44 - Master/tlpkg/tlperl/lib/LWP/Protocol.pm | 291 - Master/tlpkg/tlperl/lib/LWP/Protocol/GHTTP.pm | 73 - Master/tlpkg/tlperl/lib/LWP/Protocol/cpan.pm | 72 - Master/tlpkg/tlperl/lib/LWP/Protocol/data.pm | 52 - Master/tlpkg/tlperl/lib/LWP/Protocol/file.pm | 146 - Master/tlpkg/tlperl/lib/LWP/Protocol/ftp.pm | 543 - Master/tlpkg/tlperl/lib/LWP/Protocol/gopher.pm | 213 - Master/tlpkg/tlperl/lib/LWP/Protocol/http.pm | 515 - Master/tlpkg/tlperl/lib/LWP/Protocol/loopback.pm | 26 - Master/tlpkg/tlperl/lib/LWP/Protocol/mailto.pm | 183 - Master/tlpkg/tlperl/lib/LWP/Protocol/nntp.pm | 145 - Master/tlpkg/tlperl/lib/LWP/Protocol/nogo.pm | 24 - Master/tlpkg/tlperl/lib/LWP/RobotUA.pm | 303 - Master/tlpkg/tlperl/lib/LWP/Simple.pm | 253 - Master/tlpkg/tlperl/lib/LWP/UserAgent.pm | 1861 - Master/tlpkg/tlperl/lib/LWP/media.types | 1479 - Master/tlpkg/tlperl/lib/List/Util.pm | 195 +- Master/tlpkg/tlperl/lib/List/Util/XS.pm | 2 +- Master/tlpkg/tlperl/lib/Locale/Codes.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes.pod | 2 +- Master/tlpkg/tlperl/lib/Locale/Codes/API.pod | 2 +- Master/tlpkg/tlperl/lib/Locale/Codes/Changes.pod | 48 +- Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pod | 2 +- Master/tlpkg/tlperl/lib/Locale/Codes/Country.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Country.pod | 10 +- .../tlpkg/tlperl/lib/Locale/Codes/Country_Codes.pm | 462 +- .../tlperl/lib/Locale/Codes/Country_Retired.pm | 36 +- Master/tlpkg/tlperl/lib/Locale/Codes/Currency.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Currency.pod | 10 +- .../tlperl/lib/Locale/Codes/Currency_Codes.pm | 645 +- .../tlperl/lib/Locale/Codes/Currency_Retired.pm | 14 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pod | 10 +- .../tlpkg/tlperl/lib/Locale/Codes/LangExt_Codes.pm | 1086 +- .../tlperl/lib/Locale/Codes/LangExt_Retired.pm | 7 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pod | 10 +- .../tlpkg/tlperl/lib/Locale/Codes/LangFam_Codes.pm | 4 +- .../tlperl/lib/Locale/Codes/LangFam_Retired.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pod | 10 +- .../tlpkg/tlperl/lib/Locale/Codes/LangVar_Codes.pm | 332 +- .../tlperl/lib/Locale/Codes/LangVar_Retired.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Language.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Language.pod | 10 +- .../tlperl/lib/Locale/Codes/Language_Codes.pm | 62845 +++++----- .../tlperl/lib/Locale/Codes/Language_Retired.pm | 90 +- Master/tlpkg/tlperl/lib/Locale/Codes/Script.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Codes/Script.pod | 10 +- .../tlpkg/tlperl/lib/Locale/Codes/Script_Codes.pm | 2279 +- .../tlperl/lib/Locale/Codes/Script_Retired.pm | 5 +- Master/tlpkg/tlperl/lib/Locale/Country.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Country.pod | 10 +- Master/tlpkg/tlperl/lib/Locale/Currency.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Currency.pod | 10 +- Master/tlpkg/tlperl/lib/Locale/Language.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Language.pod | 10 +- Master/tlpkg/tlperl/lib/Locale/Maketext.pm | 2 +- Master/tlpkg/tlperl/lib/Locale/Script.pm | 4 +- Master/tlpkg/tlperl/lib/Locale/Script.pod | 10 +- Master/tlpkg/tlperl/lib/MIME/Base64.pm | 2 +- Master/tlpkg/tlperl/lib/Math/BigFloat.pm | 84 +- Master/tlpkg/tlperl/lib/Math/BigInt.pm | 250 +- Master/tlpkg/tlperl/lib/Math/BigInt/Calc.pm | 61 +- Master/tlpkg/tlperl/lib/Math/BigInt/CalcEmu.pm | 64 +- Master/tlpkg/tlperl/lib/Math/BigRat.pm | 84 +- Master/tlpkg/tlperl/lib/Math/Int64.pm | 578 - .../tlpkg/tlperl/lib/Math/Int64/die_on_overflow.pm | 42 - .../tlperl/lib/Math/Int64/native_if_available.pm | 40 - Master/tlpkg/tlperl/lib/Math/UInt64.pm | 32 - Master/tlpkg/tlperl/lib/Module/Build.pm | 1117 - Master/tlpkg/tlperl/lib/Module/Build/API.pod | 2124 - Master/tlpkg/tlperl/lib/Module/Build/Authoring.pod | 326 - Master/tlpkg/tlperl/lib/Module/Build/Base.pm | 5737 - Master/tlpkg/tlperl/lib/Module/Build/Bundling.pod | 147 - Master/tlpkg/tlperl/lib/Module/Build/Compat.pm | 632 - Master/tlpkg/tlperl/lib/Module/Build/Config.pm | 59 - Master/tlpkg/tlperl/lib/Module/Build/ConfigData.pm | 210 - Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm | 529 - Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm | 19 - Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm | 34 - Master/tlpkg/tlperl/lib/Module/Build/Notes.pm | 332 - Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm | 186 - .../tlperl/lib/Module/Build/Platform/Default.pm | 33 - .../tlperl/lib/Module/Build/Platform/MacOS.pm | 152 - .../tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm | 73 - .../tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm | 523 - .../tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm | 34 - .../tlperl/lib/Module/Build/Platform/Windows.pm | 319 - .../tlpkg/tlperl/lib/Module/Build/Platform/aix.pm | 40 - .../tlperl/lib/Module/Build/Platform/cygwin.pm | 55 - .../tlperl/lib/Module/Build/Platform/darwin.pm | 40 - .../tlpkg/tlperl/lib/Module/Build/Platform/os2.pm | 49 - Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm | 65 - Master/tlpkg/tlperl/lib/Module/Build/Version.pm | 21 - Master/tlpkg/tlperl/lib/Module/Build/YAML.pm | 19 - Master/tlpkg/tlperl/lib/Module/CoreList.pm | 1327 +- Master/tlpkg/tlperl/lib/Module/CoreList.pod | 9 +- .../tlperl/lib/Module/CoreList/TieHashDelta.pm | 2 +- Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm | 101 +- Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm | 5 +- Master/tlpkg/tlperl/lib/Module/Metadata.pm | 306 +- Master/tlpkg/tlperl/lib/Mozilla/CA.pm | 99 - Master/tlpkg/tlperl/lib/Mozilla/CA/cacert.pem | 3894 - Master/tlpkg/tlperl/lib/Mozilla/mk-ca-bundle.pl | 495 - Master/tlpkg/tlperl/lib/Net/Cmd.pm | 213 +- Master/tlpkg/tlperl/lib/Net/Config.pm | 36 +- Master/tlpkg/tlperl/lib/Net/Domain.pm | 58 +- Master/tlpkg/tlperl/lib/Net/FTP.pm | 533 +- Master/tlpkg/tlperl/lib/Net/FTP/A.pm | 18 +- Master/tlpkg/tlperl/lib/Net/FTP/E.pm | 11 +- Master/tlpkg/tlperl/lib/Net/FTP/I.pm | 18 +- Master/tlpkg/tlperl/lib/Net/FTP/L.pm | 11 +- Master/tlpkg/tlperl/lib/Net/FTP/dataconn.pm | 63 +- Master/tlpkg/tlperl/lib/Net/HTTP.pm | 292 - Master/tlpkg/tlperl/lib/Net/HTTP/Methods.pm | 633 - Master/tlpkg/tlperl/lib/Net/HTTP/NB.pm | 109 - Master/tlpkg/tlperl/lib/Net/HTTPS.pm | 110 - Master/tlpkg/tlperl/lib/Net/NNTP.pm | 207 +- Master/tlpkg/tlperl/lib/Net/Netrc.pm | 48 +- Master/tlpkg/tlperl/lib/Net/POP3.pm | 162 +- Master/tlpkg/tlperl/lib/Net/SMTP.pm | 215 +- Master/tlpkg/tlperl/lib/Net/Time.pm | 47 +- Master/tlpkg/tlperl/lib/Net/libnetFAQ.pod | 26 +- Master/tlpkg/tlperl/lib/OLE.pm | 177 - Master/tlpkg/tlperl/lib/Opcode.pm | 14 +- Master/tlpkg/tlperl/lib/POSIX.pm | 41 +- Master/tlpkg/tlperl/lib/POSIX.pod | 605 +- Master/tlpkg/tlperl/lib/Package/Constants.pm | 108 - Master/tlpkg/tlperl/lib/Perl/OSType.pm | 14 +- Master/tlpkg/tlperl/lib/PerlIO/encoding.pm | 2 +- Master/tlpkg/tlperl/lib/PerlIO/mmap.pm | 2 +- Master/tlpkg/tlperl/lib/PerlIO/scalar.pm | 2 +- Master/tlpkg/tlperl/lib/PerlIO/via/QuotedPrint.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Escapes.pm | 316 +- Master/tlpkg/tlperl/lib/Pod/Find.pm | 6 +- Master/tlpkg/tlperl/lib/Pod/Functions.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Html.pm | 8 +- Master/tlpkg/tlperl/lib/Pod/InputObjects.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/ParseUtils.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Parser.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc.pm | 142 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/BaseTo.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/GetOptsOO.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToANSI.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToChecker.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToMan.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToNroff.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToPod.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToRtf.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToTerm.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToText.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToTk.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToXml.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Select.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple.pm | 19 +- Master/tlpkg/tlperl/lib/Pod/Simple.pod | 6 +- Master/tlpkg/tlperl/lib/Pod/Simple/BlackBox.pm | 43 +- Master/tlpkg/tlperl/lib/Pod/Simple/Checker.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Debug.pm | 5 +- Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsText.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsXML.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/HTML.pm | 21 +- Master/tlpkg/tlperl/lib/Pod/Simple/HTMLBatch.pm | 14 +- Master/tlpkg/tlperl/lib/Pod/Simple/LinkSection.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple/Methody.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Progress.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/PullParser.pm | 9 +- .../tlperl/lib/Pod/Simple/PullParserEndToken.pm | 2 +- .../tlperl/lib/Pod/Simple/PullParserStartToken.pm | 2 +- .../tlperl/lib/Pod/Simple/PullParserTextToken.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/PullParserToken.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/RTF.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Search.pm | 13 +- Master/tlpkg/tlperl/lib/Pod/Simple/SimpleTree.pm | 5 +- Master/tlpkg/tlperl/lib/Pod/Simple/Subclassing.pod | 55 +- Master/tlpkg/tlperl/lib/Pod/Simple/Text.pm | 5 +- Master/tlpkg/tlperl/lib/Pod/Simple/TextContent.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/TiedOutFH.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Transcode.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/TranscodeDumb.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/TranscodeSmart.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/XHTML.pm | 50 +- Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm | 15 +- Master/tlpkg/tlperl/lib/Pod/Usage.pm | 44 +- Master/tlpkg/tlperl/lib/SDBM_File.pm | 2 +- Master/tlpkg/tlperl/lib/Safe.pm | 10 +- Master/tlpkg/tlperl/lib/Scalar/Util.pm | 87 +- Master/tlpkg/tlperl/lib/SelfLoader.pm | 27 +- Master/tlpkg/tlperl/lib/Storable.pm | 18 +- Master/tlpkg/tlperl/lib/Sub/Util.pm | 149 + Master/tlpkg/tlperl/lib/Sys/Hostname.pm | 2 +- Master/tlpkg/tlperl/lib/TAP/Base.pm | 13 +- Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm | 4 +- .../lib/TAP/Formatter/Console/ParallelSession.pm | 4 +- .../tlperl/lib/TAP/Formatter/Console/Session.pm | 18 +- Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm | 6 +- .../tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm | 18 +- Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm | 38 +- Master/tlpkg/tlperl/lib/TAP/Harness.pm | 67 +- Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm | 86 +- Master/tlpkg/tlperl/lib/TAP/Object.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser.pm | 21 +- Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm | 4 +- .../tlperl/lib/TAP/Parser/Iterator/Process.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm | 6 +- .../tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm | 4 +- .../tlperl/lib/TAP/Parser/Scheduler/Spinner.pm | 4 +- Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm | 4 +- .../lib/TAP/Parser/SourceHandler/Executable.pm | 4 +- .../tlperl/lib/TAP/Parser/SourceHandler/File.pm | 4 +- .../tlperl/lib/TAP/Parser/SourceHandler/Handle.pm | 4 +- .../tlperl/lib/TAP/Parser/SourceHandler/Perl.pm | 4 +- .../tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm | 4 +- .../tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm | 4 +- Master/tlpkg/tlperl/lib/Term/ANSIColor.pm | 137 +- Master/tlpkg/tlperl/lib/Term/Complete.pm | 4 +- Master/tlpkg/tlperl/lib/Term/ReadLine.pm | 6 +- Master/tlpkg/tlperl/lib/Test/Builder.pm | 65 +- Master/tlpkg/tlperl/lib/Test/Builder/IO/Scalar.pm | 658 + Master/tlpkg/tlperl/lib/Test/Builder/Module.pm | 44 +- Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm | 48 +- .../tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm | 2 +- Master/tlpkg/tlperl/lib/Test/Harness.pm | 4 +- Master/tlpkg/tlperl/lib/Test/More.pm | 151 +- Master/tlpkg/tlperl/lib/Test/Simple.pm | 25 +- Master/tlpkg/tlperl/lib/Test/Tester.pm | 652 + Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm | 231 + .../tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm | 76 + Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm | 32 + Master/tlpkg/tlperl/lib/Test/Tutorial.pod | 46 +- Master/tlpkg/tlperl/lib/Test/use/ok.pm | 62 + Master/tlpkg/tlperl/lib/Text/Balanced.pm | 2 +- Master/tlpkg/tlperl/lib/Text/ParseWords.pm | 23 +- Master/tlpkg/tlperl/lib/Tie/File.pm | 25 +- Master/tlpkg/tlperl/lib/Tie/Registry.pm | 45 - Master/tlpkg/tlperl/lib/Tie/Watch.pm | 563 - Master/tlpkg/tlperl/lib/Time/Piece.pm | 2 +- Master/tlpkg/tlperl/lib/Time/Seconds.pm | 4 +- Master/tlpkg/tlperl/lib/Time/Zone.pm | 291 - Master/tlpkg/tlperl/lib/Tk.pm | 857 - Master/tlpkg/tlperl/lib/Tk.pod | 865 - Master/tlpkg/tlperl/lib/Tk/804delta.pod | 110 - Master/tlpkg/tlperl/lib/Tk/Adjuster.pm | 438 - Master/tlpkg/tlperl/lib/Tk/Adjuster.pod | 223 - Master/tlpkg/tlperl/lib/Tk/After.pm | 105 - Master/tlpkg/tlperl/lib/Tk/Animation.pm | 230 - Master/tlpkg/tlperl/lib/Tk/Animation.pod | 92 - Master/tlpkg/tlperl/lib/Tk/Balloon.pm | 644 - Master/tlpkg/tlperl/lib/Tk/Balloon.pod | 293 - Master/tlpkg/tlperl/lib/Tk/Bitmap.pm | 10 - Master/tlpkg/tlperl/lib/Tk/Bitmap.pod | 103 - Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm | 524 - Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pod | 210 - Master/tlpkg/tlperl/lib/Tk/Button.pm | 247 - Master/tlpkg/tlperl/lib/Tk/Button.pod | 255 - Master/tlpkg/tlperl/lib/Tk/Camel.xpm | 41 - Master/tlpkg/tlperl/lib/Tk/Canvas.pm | 1436 - Master/tlpkg/tlperl/lib/Tk/Canvas.pod | 2394 - Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm | 42 - Master/tlpkg/tlperl/lib/Tk/Checkbutton.pod | 347 - Master/tlpkg/tlperl/lib/Tk/Clipboard.pm | 122 - Master/tlpkg/tlperl/lib/Tk/Clipboard.pod | 89 - Master/tlpkg/tlperl/lib/Tk/CmdLine.pm | 497 - Master/tlpkg/tlperl/lib/Tk/CmdLine.pod | 454 - Master/tlpkg/tlperl/lib/Tk/ColorDialog.pm | 58 - Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm | 58 - Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm | 317 - Master/tlpkg/tlperl/lib/Tk/ColorEditor.pod | 120 - Master/tlpkg/tlperl/lib/Tk/ColorSelect.pm | 414 - Master/tlpkg/tlperl/lib/Tk/Compound.pm | 40 - Master/tlpkg/tlperl/lib/Tk/Compound.pod | 298 - Master/tlpkg/tlperl/lib/Tk/Config.pm | 13 - Master/tlpkg/tlperl/lib/Tk/ConfigSpecs.pod | 262 - Master/tlpkg/tlperl/lib/Tk/Configure.pm | 68 - Master/tlpkg/tlperl/lib/Tk/Credits | 7 - Master/tlpkg/tlperl/lib/Tk/DItem.pod | 439 - Master/tlpkg/tlperl/lib/Tk/Derived.pm | 512 - Master/tlpkg/tlperl/lib/Tk/Derived.pod | 89 - Master/tlpkg/tlperl/lib/Tk/Dialog.pm | 68 - Master/tlpkg/tlperl/lib/Tk/Dialog.pod | 107 - Master/tlpkg/tlperl/lib/Tk/DialogBox.pm | 152 - Master/tlpkg/tlperl/lib/Tk/DialogBox.pod | 156 - Master/tlpkg/tlperl/lib/Tk/DirSelect.pm | 503 - Master/tlpkg/tlperl/lib/Tk/DirTree.pm | 261 - Master/tlpkg/tlperl/lib/Tk/DirTree.pod | 172 - Master/tlpkg/tlperl/lib/Tk/Dirlist.pm | 113 - Master/tlpkg/tlperl/lib/Tk/DragDrop.pm | 332 - Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm | 61 - Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pod | 16 - Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm | 61 - Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm | 110 - Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm | 34 - Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pod | 18 - Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm | 200 - Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm | 107 - Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm | 8 - Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm | 50 - Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm | 145 - Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm | 159 - Master/tlpkg/tlperl/lib/Tk/DropSite.pm | 257 - Master/tlpkg/tlperl/lib/Tk/DropSite.pod | 33 - Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm | 46 - Master/tlpkg/tlperl/lib/Tk/English.pm | 307 - Master/tlpkg/tlperl/lib/Tk/Entry.pm | 615 - Master/tlpkg/tlperl/lib/Tk/Entry.pod | 693 - Master/tlpkg/tlperl/lib/Tk/Error.pod | 145 - Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm | 129 - Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pod | 36 - Master/tlpkg/tlperl/lib/Tk/Event.pm | 14 - Master/tlpkg/tlperl/lib/Tk/Event/IO.pm | 132 - Master/tlpkg/tlperl/lib/Tk/Eventloop.pod | 62 - Master/tlpkg/tlperl/lib/Tk/FBox.pm | 1061 - Master/tlpkg/tlperl/lib/Tk/FBox.pod | 67 - Master/tlpkg/tlperl/lib/Tk/FileSelect.pm | 578 - Master/tlpkg/tlperl/lib/Tk/FileSelect.pod | 150 - Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm | 109 - Master/tlpkg/tlperl/lib/Tk/Font.pm | 163 - Master/tlpkg/tlperl/lib/Tk/Font.pod | 407 - Master/tlpkg/tlperl/lib/Tk/Frame.pm | 378 - Master/tlpkg/tlperl/lib/Tk/Frame.pod | 146 - Master/tlpkg/tlperl/lib/Tk/HList.pm | 708 - Master/tlpkg/tlperl/lib/Tk/HList.pod | 1050 - Master/tlpkg/tlperl/lib/Tk/IO.pm | 183 - Master/tlpkg/tlperl/lib/Tk/IO.pod | 51 - Master/tlpkg/tlperl/lib/Tk/IconList.pm | 712 - Master/tlpkg/tlperl/lib/Tk/IconList.pod | 82 - Master/tlpkg/tlperl/lib/Tk/Image.pm | 74 - Master/tlpkg/tlperl/lib/Tk/Image.pod | 145 - Master/tlpkg/tlperl/lib/Tk/InputO.pod | 50 - Master/tlpkg/tlperl/lib/Tk/Internals.pod | 142 - Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm | 38 - Master/tlpkg/tlperl/lib/Tk/JPEG.pm | 57 - Master/tlpkg/tlperl/lib/Tk/LabEntry.pm | 31 - Master/tlpkg/tlperl/lib/Tk/LabFrame.pm | 138 - Master/tlpkg/tlperl/lib/Tk/LabFrame.pod | 110 - Master/tlpkg/tlperl/lib/Tk/LabRadio.pm | 63 - Master/tlpkg/tlperl/lib/Tk/Label.pm | 21 - Master/tlpkg/tlperl/lib/Tk/Label.pod | 133 - Master/tlpkg/tlperl/lib/Tk/Labelframe.pm | 16 - Master/tlpkg/tlperl/lib/Tk/Labelframe.pod | 206 - Master/tlpkg/tlperl/lib/Tk/Listbox.pm | 910 - Master/tlpkg/tlperl/lib/Tk/Listbox.pod | 794 - Master/tlpkg/tlperl/lib/Tk/MMtry.pm | 60 - Master/tlpkg/tlperl/lib/Tk/MMutil.pm | 603 - Master/tlpkg/tlperl/lib/Tk/MainWindow.pm | 210 - Master/tlpkg/tlperl/lib/Tk/MainWindow.pod | 85 - Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm | 342 - Master/tlpkg/tlperl/lib/Tk/Menu.pm | 1201 - Master/tlpkg/tlperl/lib/Tk/Menu.pod | 876 - Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm | 178 - Master/tlpkg/tlperl/lib/Tk/Menu/Item.pod | 96 - Master/tlpkg/tlperl/lib/Tk/Menubar.pm | 15 - Master/tlpkg/tlperl/lib/Tk/Menubutton.pm | 401 - Master/tlpkg/tlperl/lib/Tk/Menubutton.pod | 249 - Master/tlpkg/tlperl/lib/Tk/Message.pm | 20 - Master/tlpkg/tlperl/lib/Tk/Message.pod | 151 - Master/tlpkg/tlperl/lib/Tk/MsgBox.pm | 506 - Master/tlpkg/tlperl/lib/Tk/MsgBox.pod | 83 - Master/tlpkg/tlperl/lib/Tk/Mwm.pod | 109 - Master/tlpkg/tlperl/lib/Tk/NBFrame.pm | 20 - Master/tlpkg/tlperl/lib/Tk/NoteBook.pm | 480 - Master/tlpkg/tlperl/lib/Tk/NoteBook.pod | 235 - Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm | 128 - Master/tlpkg/tlperl/lib/Tk/Optionmenu.pod | 100 - Master/tlpkg/tlperl/lib/Tk/PNG.pm | 50 - Master/tlpkg/tlperl/lib/Tk/Pane.pm | 544 - Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm | 221 - Master/tlpkg/tlperl/lib/Tk/Panedwindow.pod | 326 - Master/tlpkg/tlperl/lib/Tk/Photo.pm | 22 - Master/tlpkg/tlperl/lib/Tk/Photo.pod | 475 - Master/tlpkg/tlperl/lib/Tk/Pixmap.pm | 19 - Master/tlpkg/tlperl/lib/Tk/Pixmap.pod | 64 - Master/tlpkg/tlperl/lib/Tk/Popup.pod | 89 - Master/tlpkg/tlperl/lib/Tk/Pretty.pm | 93 - Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm | 517 - Master/tlpkg/tlperl/lib/Tk/README.Adjust | 77 - Master/tlpkg/tlperl/lib/Tk/ROText.pm | 48 - Master/tlpkg/tlperl/lib/Tk/ROText.pod | 48 - Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm | 45 - Master/tlpkg/tlperl/lib/Tk/Radiobutton.pod | 333 - Master/tlpkg/tlperl/lib/Tk/Region.pm | 182 - Master/tlpkg/tlperl/lib/Tk/Reindex.pm | 233 - Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm | 13 - Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm | 13 - Master/tlpkg/tlperl/lib/Tk/Scale.pm | 278 - Master/tlpkg/tlperl/lib/Tk/Scale.pod | 356 - Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm | 429 - Master/tlpkg/tlperl/lib/Tk/Scrollbar.pod | 429 - Master/tlpkg/tlperl/lib/Tk/Scrolled.pod | 86 - Master/tlpkg/tlperl/lib/Tk/Spinbox.pm | 115 - Master/tlpkg/tlperl/lib/Tk/Spinbox.pod | 819 - Master/tlpkg/tlperl/lib/Tk/Stats.pm | 26 - Master/tlpkg/tlperl/lib/Tk/Submethods.pm | 45 - Master/tlpkg/tlperl/lib/Tk/Submethods.pod | 27 - Master/tlpkg/tlperl/lib/Tk/TList.pm | 416 - Master/tlpkg/tlperl/lib/Tk/TList.pod | 597 - Master/tlpkg/tlperl/lib/Tk/Table.pm | 597 - Master/tlpkg/tlperl/lib/Tk/Table.pod | 102 - Master/tlpkg/tlperl/lib/Tk/Tcl-perl.pod | 200 - Master/tlpkg/tlperl/lib/Tk/Text.pm | 1673 - Master/tlpkg/tlperl/lib/Tk/Text.pod | 2224 - Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm | 46 - Master/tlpkg/tlperl/lib/Tk/TextEdit.pm | 509 - Master/tlpkg/tlperl/lib/Tk/TextList.pm | 982 - Master/tlpkg/tlperl/lib/Tk/TextUndo.pm | 1023 - Master/tlpkg/tlperl/lib/Tk/TextUndo.pod | 73 - Master/tlpkg/tlperl/lib/Tk/Tiler.pm | 202 - Master/tlpkg/tlperl/lib/Tk/Tiler.pod | 32 - Master/tlpkg/tlperl/lib/Tk/TixGrid.pm | 1597 - Master/tlpkg/tlperl/lib/Tk/TixGrid.pod | 539 - Master/tlpkg/tlperl/lib/Tk/Tk.xbm | 44 - Master/tlpkg/tlperl/lib/Tk/Tk.xpm | 41 - Master/tlpkg/tlperl/lib/Tk/TkXSUB.def | 62 - Master/tlpkg/tlperl/lib/Tk/Toplevel.pm | 211 - Master/tlpkg/tlperl/lib/Tk/Toplevel.pod | 199 - Master/tlpkg/tlperl/lib/Tk/Trace.pm | 405 - Master/tlpkg/tlperl/lib/Tk/Tree.pm | 313 - Master/tlpkg/tlperl/lib/Tk/Tree.pod | 274 - Master/tlpkg/tlperl/lib/Tk/UserGuide.pod | 586 - Master/tlpkg/tlperl/lib/Tk/Widget.pm | 1774 - Master/tlpkg/tlperl/lib/Tk/Widget.pod | 678 - Master/tlpkg/tlperl/lib/Tk/WidgetDemo.pod | 59 - Master/tlpkg/tlperl/lib/Tk/Wm.pm | 174 - Master/tlpkg/tlperl/lib/Tk/Wm.pod | 669 - Master/tlpkg/tlperl/lib/Tk/X.pm | 391 - Master/tlpkg/tlperl/lib/Tk/X.pod | 373 - Master/tlpkg/tlperl/lib/Tk/X11/X.h | 677 - Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h | 79 - Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h | 60 - Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h | 1214 - Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h | 855 - Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h | 79 - Master/tlpkg/tlperl/lib/Tk/X11/keysym.h | 39 - Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h | 1169 - Master/tlpkg/tlperl/lib/Tk/X11/license.terms | 39 - Master/tlpkg/tlperl/lib/Tk/X11Font.pm | 184 - Master/tlpkg/tlperl/lib/Tk/X11Font.pod | 88 - Master/tlpkg/tlperl/lib/Tk/Xcamel.gif | Bin 4193 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/Xlib.pm | 15 - Master/tlpkg/tlperl/lib/Tk/Xrm.pm | 9 - Master/tlpkg/tlperl/lib/Tk/Xrm.pod | 45 - Master/tlpkg/tlperl/lib/Tk/act_folder.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/act_folder.xpm | 22 - Master/tlpkg/tlperl/lib/Tk/after.pod | 168 - Master/tlpkg/tlperl/lib/Tk/anim.gif | Bin 2533 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/balArrow.xbm | 4 - Master/tlpkg/tlperl/lib/Tk/bind.pod | 583 - Master/tlpkg/tlperl/lib/Tk/bindtags.pod | 107 - Master/tlpkg/tlperl/lib/Tk/callbacks.pod | 104 - Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm | 6 - Master/tlpkg/tlperl/lib/Tk/chooseColor.pod | 64 - Master/tlpkg/tlperl/lib/Tk/chooseDirectory.pod | 95 - Master/tlpkg/tlperl/lib/Tk/composite.pod | 171 - Master/tlpkg/tlperl/lib/Tk/demos/LabEnLabRad.pm | 41 - Master/tlpkg/tlperl/lib/Tk/demos/images/QuitPB.xpm | 48 - .../tlpkg/tlperl/lib/Tk/demos/images/QuitPBa.xpm | 48 - Master/tlpkg/tlperl/lib/Tk/demos/images/c.icon | 16 - Master/tlpkg/tlperl/lib/Tk/demos/images/cursor.cur | Bin 326 -> 0 bytes .../tlpkg/tlperl/lib/Tk/demos/images/cursor.mask | 6 - Master/tlpkg/tlperl/lib/Tk/demos/images/cursor.xbm | 8 - Master/tlpkg/tlperl/lib/Tk/demos/images/dir.icon | 16 - Master/tlpkg/tlperl/lib/Tk/demos/images/dir.mask | 16 - Master/tlpkg/tlperl/lib/Tk/demos/images/earth.gif | Bin 51552 -> 0 bytes .../tlpkg/tlperl/lib/Tk/demos/images/earthris.gif | Bin 6343 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/demos/images/face | 173 - Master/tlpkg/tlperl/lib/Tk/demos/images/flagdown | 27 - Master/tlpkg/tlperl/lib/Tk/demos/images/flagup | 27 - Master/tlpkg/tlperl/lib/Tk/demos/images/grey.25 | 6 - Master/tlpkg/tlperl/lib/Tk/demos/images/grey.5 | 6 - Master/tlpkg/tlperl/lib/Tk/demos/images/letters | 27 - Master/tlpkg/tlperl/lib/Tk/demos/images/mickey.gif | Bin 9344 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/demos/images/ned.xpm | 69 - Master/tlpkg/tlperl/lib/Tk/demos/images/noletters | 27 - Master/tlpkg/tlperl/lib/Tk/demos/images/page.icon | 16 - Master/tlpkg/tlperl/lib/Tk/demos/images/page.mask | 16 - Master/tlpkg/tlperl/lib/Tk/demos/images/pattern | 6 - Master/tlpkg/tlperl/lib/Tk/demos/images/teapot.ppm | 31 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/Ball.pm | 144 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/HList.pl | 65 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/HList2.pl | 124 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/Plot.pm | 199 - .../tlperl/lib/Tk/demos/widget_lib/WidgetDemo.pm | 130 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/arrows.pl | 242 - .../tlperl/lib/Tk/demos/widget_lib/balloon.pl | 168 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/bind.pl | 65 - .../tlperl/lib/Tk/demos/widget_lib/bitmaps.pl | 44 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/bounce.pl | 274 - .../tlperl/lib/Tk/demos/widget_lib/browseentry.pl | 34 - .../tlperl/lib/Tk/demos/widget_lib/browseentry2.pl | 39 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/button.pl | 28 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/check.pl | 44 - .../tlperl/lib/Tk/demos/widget_lib/choosedir.pl | 39 - .../tlperl/lib/Tk/demos/widget_lib/clrpick.pl | 45 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/colors.pl | 85 - .../tlperl/lib/Tk/demos/widget_lib/cscroll.pl | 86 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/ctext.pl | 170 - .../tlperl/lib/Tk/demos/widget_lib/dialog1.pl | 33 - .../tlperl/lib/Tk/demos/widget_lib/dialog2.pl | 33 - .../tlperl/lib/Tk/demos/widget_lib/dirtree.pl | 7 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/entry1.pl | 28 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/entry2.pl | 33 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/entry3.pl | 199 - .../tlperl/lib/Tk/demos/widget_lib/filebox.pl | 106 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/floor.pl | 1324 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/form.pl | 31 - .../tlperl/lib/Tk/demos/widget_lib/form_mgr.pl | 21 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/hello.pl | 51 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/hscale.pl | 48 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/icon.pl | 64 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/image1.pl | 28 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/image2.pl | 104 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/items.pl | 358 - .../tlperl/lib/Tk/demos/widget_lib/keysyms.pl | 20 - .../tlperl/lib/Tk/demos/widget_lib/labelframe.pl | 74 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/labels.pl | 43 - .../tlperl/lib/Tk/demos/widget_lib/labframe.pl | 13 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/mega.pl | 135 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/menbut.pl | 122 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/menus.pl | 196 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/menus2.pl | 216 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/msgBox.pl | 82 - .../tlperl/lib/Tk/demos/widget_lib/notebook.pl | 59 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/paned1.pl | 26 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/paned2.pl | 65 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/photo1.pl | 30 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/photo2.pl | 156 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/plot.pl | 28 - .../tlperl/lib/Tk/demos/widget_lib/progress.pl | 46 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/puzzle.pl | 86 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/radio.pl | 78 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/ruler.pl | 146 - .../tlperl/lib/Tk/demos/widget_lib/sayings.pl | 48 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/search.pl | 177 - .../tlperl/lib/Tk/demos/widget_lib/showVars.pl | 37 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/slide.pl | 178 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/spin.pl | 36 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/states.pl | 28 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/style.pl | 154 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/texts.pl | 71 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/trace1.pl | 49 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/trace2.pl | 188 - .../tlperl/lib/Tk/demos/widget_lib/transtile.pl | 113 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/twind.pl | 186 - .../tlperl/lib/Tk/demos/widget_lib/unicodeout.pl | 64 - .../tlperl/lib/Tk/demos/widget_lib/virtevents1.pl | 59 - .../tlpkg/tlperl/lib/Tk/demos/widget_lib/vscale.pl | 48 - Master/tlpkg/tlperl/lib/Tk/demos/widtrib/Gedi.pl | 429 - .../tlpkg/tlperl/lib/Tk/demos/widtrib/TEMPLATE.pl | 92 - Master/tlpkg/tlperl/lib/Tk/demos/widtrib/Tiler.pl | 15 - Master/tlpkg/tlperl/lib/Tk/demos/widtrib/all.pl | 331 - Master/tlpkg/tlperl/lib/Tk/demos/widtrib/cursor.pl | 65 - .../lib/Tk/demos/widtrib/lib/npuz/Xcamel.npuz | Bin 26699 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/demos/widtrib/npuz.pl | 226 - Master/tlpkg/tlperl/lib/Tk/demos/widtrib/plop.pl | 381 - Master/tlpkg/tlperl/lib/Tk/event.pod | 417 - Master/tlpkg/tlperl/lib/Tk/exit.pod | 42 - Master/tlpkg/tlperl/lib/Tk/file.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/file.xpm | 18 - Master/tlpkg/tlperl/lib/Tk/fileevent.pod | 112 - Master/tlpkg/tlperl/lib/Tk/focus.pod | 166 - Master/tlpkg/tlperl/lib/Tk/folder.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/folder.xpm | 21 - Master/tlpkg/tlperl/lib/Tk/form.pod | 397 - Master/tlpkg/tlperl/lib/Tk/getOpenFile.pod | 182 - Master/tlpkg/tlperl/lib/Tk/grab.pod | 140 - Master/tlpkg/tlperl/lib/Tk/grid.pod | 409 - Master/tlpkg/tlperl/lib/Tk/icon.gif | Bin 1924 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/install.pm | 37 - Master/tlpkg/tlperl/lib/Tk/license.terms | 35 - Master/tlpkg/tlperl/lib/Tk/mega.pod | 423 - Master/tlpkg/tlperl/lib/Tk/messageBox.pod | 67 - Master/tlpkg/tlperl/lib/Tk/openfile.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/openfolder.xbm | 5 - Master/tlpkg/tlperl/lib/Tk/openfolder.xpm | 21 - Master/tlpkg/tlperl/lib/Tk/option.pod | 217 - Master/tlpkg/tlperl/lib/Tk/options.pod | 787 - Master/tlpkg/tlperl/lib/Tk/overview.pod | 138 - Master/tlpkg/tlperl/lib/Tk/pTk.pod | 550 - Master/tlpkg/tlperl/lib/Tk/pTk/Lang.h | 202 - Master/tlpkg/tlperl/lib/Tk/pTk/Lang.m | 192 - Master/tlpkg/tlperl/lib/Tk/pTk/Lang.t | 217 - Master/tlpkg/tlperl/lib/Tk/pTk/Lang_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/Tcl-pTk | 260 - Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.h | 151 - Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.m | 661 - Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.t | 657 - Master/tlpkg/tlperl/lib/Tk/pTk/Xlib_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/compat/limits.h | 22 - Master/tlpkg/tlperl/lib/Tk/pTk/compat/stdlib.h | 45 - Master/tlpkg/tlperl/lib/Tk/pTk/compat/unistd.h | 87 - Master/tlpkg/tlperl/lib/Tk/pTk/default.h | 36 - Master/tlpkg/tlperl/lib/Tk/pTk/img.h | 41 - Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.h | 75 - Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.m | 62 - Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.t | 93 - Master/tlpkg/tlperl/lib/Tk/pTk/imgInt_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/ks_names.h | 925 - Master/tlpkg/tlperl/lib/Tk/pTk/mkVFunc | 433 - Master/tlpkg/tlperl/lib/Tk/pTk/moredefs.h | 131 - Master/tlpkg/tlperl/lib/Tk/pTk/port.h | 32 - Master/tlpkg/tlperl/lib/Tk/pTk/tcl.h | 2411 - Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.h | 4143 - Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.m | 538 - Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.t | 675 - Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tclIntDecls.h | 1324 - Master/tlpkg/tlperl/lib/Tk/pTk/tclIntPlatDecls.h | 585 - Master/tlpkg/tlperl/lib/Tk/pTk/tclMath.h | 27 - Master/tlpkg/tlperl/lib/Tk/pTk/tclPlatDecls.h | 197 - Master/tlpkg/tlperl/lib/Tk/pTk/tclWinInt.h | 145 - Master/tlpkg/tlperl/lib/Tk/pTk/tix.h | 512 - Master/tlpkg/tlperl/lib/Tk/pTk/tix.m | 126 - Master/tlpkg/tlperl/lib/Tk/pTk/tix.t | 170 - Master/tlpkg/tlperl/lib/Tk/pTk/tixBitmaps.h | 618 - Master/tlpkg/tlperl/lib/Tk/pTk/tixDef.h | 173 - Master/tlpkg/tlperl/lib/Tk/pTk/tixForm.h | 143 - Master/tlpkg/tlperl/lib/Tk/pTk/tixGrData.h | 88 - Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h | 458 - Master/tlpkg/tlperl/lib/Tk/pTk/tixHList.h | 323 - Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.h | 134 - Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.m | 34 - Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.t | 49 - Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.h | 886 - Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.m | 171 - Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.t | 249 - Master/tlpkg/tlperl/lib/Tk/pTk/tixInt_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tixPort.h | 110 - Master/tlpkg/tlperl/lib/Tk/pTk/tixTList.h | 148 - Master/tlpkg/tlperl/lib/Tk/pTk/tixWinInt.h | 23 - Master/tlpkg/tlperl/lib/Tk/pTk/tixWinPort.h | 40 - Master/tlpkg/tlperl/lib/Tk/pTk/tix_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tk.h | 1857 - Master/tlpkg/tlperl/lib/Tk/pTk/tk.m | 94 - Master/tlpkg/tlperl/lib/Tk/pTk/tk.t | 151 - Master/tlpkg/tlperl/lib/Tk/pTk/tk3d.h | 102 - Master/tlpkg/tlperl/lib/Tk/pTk/tkButton.h | 320 - Master/tlpkg/tlperl/lib/Tk/pTk/tkCanvas.h | 334 - Master/tlpkg/tlperl/lib/Tk/pTk/tkCanvases.h | 81 - Master/tlpkg/tlperl/lib/Tk/pTk/tkColor.h | 89 - Master/tlpkg/tlperl/lib/Tk/pTk/tkConfig.h | 15 - Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.h | 2277 - Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.m | 870 - Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.t | 1158 - Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.h | 122 - Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.m | 274 - Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.t | 304 - Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkFileFilter.h | 92 - Master/tlpkg/tlperl/lib/Tk/pTk/tkFont.h | 226 - Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.h | 36 - Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.m | 55 - Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.t | 66 - Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkInitScript.h | 58 - Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.h | 1200 - Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.m | 125 - Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.t | 182 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.h | 1572 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.m | 466 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.t | 642 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.h | 1227 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.m | 474 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.t | 845 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.h | 2436 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.m | 446 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.t | 1521 - Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkInt_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkMenu.h | 588 - Master/tlpkg/tlperl/lib/Tk/pTk/tkMenubutton.h | 240 - Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.h | 17 - Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.m | 26 - Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.t | 26 - Master/tlpkg/tlperl/lib/Tk/pTk/tkOption_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.h | 300 - Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.m | 114 - Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.t | 190 - Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls_f.h | 15 - Master/tlpkg/tlperl/lib/Tk/pTk/tkPort.h | 53 - Master/tlpkg/tlperl/lib/Tk/pTk/tkScale.h | 257 - Master/tlpkg/tlperl/lib/Tk/pTk/tkScrollbar.h | 209 - Master/tlpkg/tlperl/lib/Tk/pTk/tkSelect.h | 187 - Master/tlpkg/tlperl/lib/Tk/pTk/tkText.h | 927 - Master/tlpkg/tlperl/lib/Tk/pTk/tkUndo.h | 90 - Master/tlpkg/tlperl/lib/Tk/pTk/tkVMacro.h | 69 - Master/tlpkg/tlperl/lib/Tk/pTk/tkWin.h | 60 - Master/tlpkg/tlperl/lib/Tk/pTk/tkWinDefault.h | 525 - Master/tlpkg/tlperl/lib/Tk/pTk/tkWinInt.h | 211 - Master/tlpkg/tlperl/lib/Tk/pTk/tkWinPort.h | 156 - Master/tlpkg/tlperl/lib/Tk/pTk/tkXrm.h | 12 - Master/tlpkg/tlperl/lib/Tk/pTk/tk_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/pTk/xbytes.h | 58 - Master/tlpkg/tlperl/lib/Tk/pack.pod | 324 - Master/tlpkg/tlperl/lib/Tk/palette.pod | 89 - Master/tlpkg/tlperl/lib/Tk/place.pod | 283 - Master/tlpkg/tlperl/lib/Tk/prolog.ps | 284 - Master/tlpkg/tlperl/lib/Tk/selection.pod | 159 - Master/tlpkg/tlperl/lib/Tk/send.pod | 118 - Master/tlpkg/tlperl/lib/Tk/srcfile.xpm | 18 - Master/tlpkg/tlperl/lib/Tk/textfile.xpm | 18 - Master/tlpkg/tlperl/lib/Tk/tixWm.pod | 73 - Master/tlpkg/tlperl/lib/Tk/tkGlue.def | 130 - Master/tlpkg/tlperl/lib/Tk/tkGlue.h | 79 - Master/tlpkg/tlperl/lib/Tk/tkGlue.m | 74 - Master/tlpkg/tlperl/lib/Tk/tkGlue.t | 70 - Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h | 14 - Master/tlpkg/tlperl/lib/Tk/tkvars.pod | 107 - Master/tlpkg/tlperl/lib/Tk/tranicon.gif | Bin 1718 -> 0 bytes Master/tlpkg/tlperl/lib/Tk/typemap | 96 - Master/tlpkg/tlperl/lib/Tk/vtab.def | 90 - Master/tlpkg/tlperl/lib/Tk/widgets.pm | 20 - Master/tlpkg/tlperl/lib/Tk/widgets.pod | 20 - Master/tlpkg/tlperl/lib/Tk/win.xbm | 6 - Master/tlpkg/tlperl/lib/Tk/winfolder.xpm | 39 - Master/tlpkg/tlperl/lib/Tk/wintext.xpm | 42 - Master/tlpkg/tlperl/lib/UNIVERSAL.pm | 29 +- Master/tlpkg/tlperl/lib/URI.pm | 1149 - Master/tlpkg/tlperl/lib/URI/Escape.pm | 220 - Master/tlpkg/tlperl/lib/URI/Heuristic.pm | 253 - Master/tlpkg/tlperl/lib/URI/IRI.pm | 45 - Master/tlpkg/tlperl/lib/URI/QueryParam.pm | 194 - Master/tlpkg/tlperl/lib/URI/Split.pm | 95 - Master/tlpkg/tlperl/lib/URI/URL.pm | 303 - Master/tlpkg/tlperl/lib/URI/WithBase.pm | 174 - Master/tlpkg/tlperl/lib/URI/_foreign.pm | 8 - Master/tlpkg/tlperl/lib/URI/_generic.pm | 254 - Master/tlpkg/tlperl/lib/URI/_idna.pm | 89 - Master/tlpkg/tlperl/lib/URI/_ldap.pm | 140 - Master/tlpkg/tlperl/lib/URI/_login.pm | 11 - Master/tlpkg/tlperl/lib/URI/_punycode.pm | 203 - Master/tlpkg/tlperl/lib/URI/_query.pm | 95 - Master/tlpkg/tlperl/lib/URI/_segment.pm | 22 - Master/tlpkg/tlperl/lib/URI/_server.pm | 164 - Master/tlpkg/tlperl/lib/URI/_userpass.pm | 53 - Master/tlpkg/tlperl/lib/URI/data.pm | 142 - Master/tlpkg/tlperl/lib/URI/file.pm | 327 - Master/tlpkg/tlperl/lib/URI/file/Base.pm | 82 - Master/tlpkg/tlperl/lib/URI/file/FAT.pm | 25 - Master/tlpkg/tlperl/lib/URI/file/Mac.pm | 121 - Master/tlpkg/tlperl/lib/URI/file/OS2.pm | 30 - Master/tlpkg/tlperl/lib/URI/file/QNX.pm | 18 - Master/tlpkg/tlperl/lib/URI/file/Unix.pm | 56 - Master/tlpkg/tlperl/lib/URI/file/Win32.pm | 85 - Master/tlpkg/tlperl/lib/URI/ftp.pm | 44 - Master/tlpkg/tlperl/lib/URI/gopher.pm | 95 - Master/tlpkg/tlperl/lib/URI/http.pm | 25 - Master/tlpkg/tlperl/lib/URI/https.pm | 12 - Master/tlpkg/tlperl/lib/URI/ldap.pm | 120 - Master/tlpkg/tlperl/lib/URI/ldapi.pm | 27 - Master/tlpkg/tlperl/lib/URI/ldaps.pm | 12 - Master/tlpkg/tlperl/lib/URI/mailto.pm | 71 - Master/tlpkg/tlperl/lib/URI/mms.pm | 10 - Master/tlpkg/tlperl/lib/URI/news.pm | 69 - Master/tlpkg/tlperl/lib/URI/nntp.pm | 8 - Master/tlpkg/tlperl/lib/URI/pop.pm | 69 - Master/tlpkg/tlperl/lib/URI/rlogin.pm | 10 - Master/tlpkg/tlperl/lib/URI/rsync.pm | 12 - Master/tlpkg/tlperl/lib/URI/rtsp.pm | 10 - Master/tlpkg/tlperl/lib/URI/rtspu.pm | 10 - Master/tlpkg/tlperl/lib/URI/sip.pm | 85 - Master/tlpkg/tlperl/lib/URI/sips.pm | 12 - Master/tlpkg/tlperl/lib/URI/snews.pm | 12 - Master/tlpkg/tlperl/lib/URI/ssh.pm | 14 - Master/tlpkg/tlperl/lib/URI/telnet.pm | 10 - Master/tlpkg/tlperl/lib/URI/tn3270.pm | 10 - Master/tlpkg/tlperl/lib/URI/urn.pm | 98 - Master/tlpkg/tlperl/lib/URI/urn/isbn.pm | 103 - Master/tlpkg/tlperl/lib/URI/urn/oid.pm | 18 - Master/tlpkg/tlperl/lib/Unicode/Collate.pm | 105 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Big5.pm | 3 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/GB2312.pm | 3 +- .../tlperl/lib/Unicode/Collate/CJK/JISX0208.pm | 3 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Korean.pm | 27 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Pinyin.pm | 3 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Stroke.pm | 3 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Zhuyin.pm | 3 +- Master/tlpkg/tlperl/lib/Unicode/Collate/Locale.pm | 3 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/af.pl | 6 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ar.pl | 24 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/as.pl | 20 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/az.pl | 94 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/be.pl | 72 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/bg.pl | 76 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/bn.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ca.pl | 28 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/cs.pl | 44 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/cy.pl | 52 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/da.pl | 148 +- .../tlperl/lib/Unicode/Collate/Locale/de_phone.pl | 52 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ee.pl | 62 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/eo.pl | 52 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/es.pl | 12 +- .../tlperl/lib/Unicode/Collate/Locale/es_trad.pl | 24 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/et.pl | 100 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fa.pl | 88 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fi.pl | 122 +- .../tlperl/lib/Unicode/Collate/Locale/fi_phone.pl | 118 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fil.pl | 18 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fo.pl | 148 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fr.pl | 2 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/gu.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ha.pl | 24 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/haw.pl | 68 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hi.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hr.pl | 90 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hu.pl | 296 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hy.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ig.pl | 102 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/is.pl | 156 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ja.pl | 2650 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kk.pl | 92 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kl.pl | 144 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kn.pl | 14 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ko.pl | 1284 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kok.pl | 20 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ln.pl | 18 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/lt.pl | 82 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/lv.pl | 68 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mk.pl | 76 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ml.pl | 40 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mr.pl | 22 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mt.pl | 54 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nb.pl | 146 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nn.pl | 146 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nso.pl | 68 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/om.pl | 38 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/or.pl | 18 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/pa.pl | 48 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/pl.pl | 96 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ro.pl | 100 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ru.pl | 76 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sa.pl | 22 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/se.pl | 292 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/si.pl | 14 +- .../tlperl/lib/Unicode/Collate/Locale/si_dict.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sk.pl | 84 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sl.pl | 28 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sq.pl | 92 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sr.pl | 84 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sv.pl | 172 +- .../tlperl/lib/Unicode/Collate/Locale/sv_refo.pl | 168 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ta.pl | 104 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/te.pl | 12 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/th.pl | 36 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/tn.pl | 68 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/to.pl | 118 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/tr.pl | 86 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/uk.pl | 76 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ur.pl | 144 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/vi.pl | 420 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/wae.pl | 42 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/wo.pl | 56 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/yo.pl | 46 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/zh.pl | 416 +- .../tlperl/lib/Unicode/Collate/Locale/zh_big5.pl | 416 +- .../tlperl/lib/Unicode/Collate/Locale/zh_gb.pl | 416 +- .../tlperl/lib/Unicode/Collate/Locale/zh_pin.pl | 642 +- .../tlperl/lib/Unicode/Collate/Locale/zh_strk.pl | 642 +- .../tlperl/lib/Unicode/Collate/Locale/zh_zhu.pl | 642 +- .../tlpkg/tlperl/lib/Unicode/Collate/allkeys.txt | 49253 ++++---- Master/tlpkg/tlperl/lib/Unicode/Normalize.pm | 500 +- Master/tlpkg/tlperl/lib/Unicode/UCD.pm | 473 +- Master/tlpkg/tlperl/lib/WWW/RobotRules.pm | 453 - .../tlpkg/tlperl/lib/WWW/RobotRules/AnyDBM_File.pm | 170 - Master/tlpkg/tlperl/lib/Win32.pm | 93 +- Master/tlpkg/tlperl/lib/Win32/API.pm | 1469 - Master/tlpkg/tlperl/lib/Win32/API/Callback.pm | 589 - .../tlperl/lib/Win32/API/Callback/IATPatch.pod | 181 - Master/tlpkg/tlperl/lib/Win32/API/Struct.pm | 714 - Master/tlpkg/tlperl/lib/Win32/API/Test.pm | 144 - Master/tlpkg/tlperl/lib/Win32/API/Type.pm | 606 - Master/tlpkg/tlperl/lib/Win32/Console.pm | 1463 - Master/tlpkg/tlperl/lib/Win32/OLE.pm | 968 - Master/tlpkg/tlperl/lib/Win32/OLE/Const.pm | 201 - Master/tlpkg/tlperl/lib/Win32/OLE/Enum.pm | 95 - Master/tlpkg/tlperl/lib/Win32/OLE/Lite.pm | 224 - Master/tlpkg/tlperl/lib/Win32/OLE/NEWS.pod | 380 - Master/tlpkg/tlperl/lib/Win32/OLE/NLS.pm | 968 - Master/tlpkg/tlperl/lib/Win32/OLE/TPJ.pod | 798 - Master/tlpkg/tlperl/lib/Win32/OLE/TypeInfo.pm | 389 - Master/tlpkg/tlperl/lib/Win32/OLE/Variant.pm | 577 - Master/tlpkg/tlperl/lib/Win32/Shortcut.pm | 752 - Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm | 3812 - Master/tlpkg/tlperl/lib/Win32/WinError.pm | 1017 - Master/tlpkg/tlperl/lib/Win32API/File.pm | 20 +- Master/tlpkg/tlperl/lib/Win32API/Registry.pm | 1779 - .../tlperl/lib/Win32API/Registry/cRegistry.pc | 87 - Master/tlpkg/tlperl/lib/XSLoader.pm | 10 +- Master/tlpkg/tlperl/lib/_charnames.pm | 133 +- Master/tlpkg/tlperl/lib/arybase.pm | 2 +- Master/tlpkg/tlperl/lib/attributes.pm | 21 +- Master/tlpkg/tlperl/lib/auto/B/B.dll | Bin 82432 -> 93696 bytes .../tlperl/lib/auto/Compress/Raw/Bzip2/Bzip2.dll | Bin 101376 -> 99840 bytes .../tlperl/lib/auto/Compress/Raw/Zlib/Zlib.dll | Bin 142336 -> 140800 bytes Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll | Bin 22528 -> 22016 bytes .../tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll | Bin 45568 -> 45056 bytes Master/tlpkg/tlperl/lib/auto/Date/Parse/.packlist | 37 - .../tlpkg/tlperl/lib/auto/Devel/PPPort/PPPort.dll | Bin 110592 -> 113152 bytes Master/tlpkg/tlperl/lib/auto/Devel/Peek/Peek.dll | Bin 23040 -> 22528 bytes Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll | Bin 24576 -> 26112 bytes Master/tlpkg/tlperl/lib/auto/Digest/SHA/SHA.dll | Bin 55808 -> 52736 bytes Master/tlpkg/tlperl/lib/auto/Digest/SHA1/.packlist | 2 - Master/tlpkg/tlperl/lib/auto/Digest/SHA1/SHA1.dll | Bin 25600 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Encode/Byte/Byte.dll | Bin 117248 -> 122368 bytes Master/tlpkg/tlperl/lib/auto/Encode/CN/CN.dll | Bin 748544 -> 770560 bytes .../tlpkg/tlperl/lib/auto/Encode/EBCDIC/EBCDIC.dll | Bin 24064 -> 23552 bytes Master/tlpkg/tlperl/lib/auto/Encode/Encode.dll | Bin 40960 -> 40448 bytes Master/tlpkg/tlperl/lib/auto/Encode/JP/JP.dll | Bin 864768 -> 898048 bytes Master/tlpkg/tlperl/lib/auto/Encode/KR/KR.dll | Bin 819712 -> 860160 bytes .../tlpkg/tlperl/lib/auto/Encode/Locale/.packlist | 1 - .../tlpkg/tlperl/lib/auto/Encode/Symbol/Symbol.dll | Bin 27648 -> 27648 bytes Master/tlpkg/tlperl/lib/auto/Encode/TW/TW.dll | Bin 765440 -> 791040 bytes .../tlperl/lib/auto/Encode/Unicode/Unicode.dll | Bin 32768 -> 32256 bytes .../tlpkg/tlperl/lib/auto/Encode/compat/.packlist | 4 - Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll | Bin 20480 -> 19968 bytes .../tlpkg/tlperl/lib/auto/File/DosGlob/DosGlob.dll | Bin 13824 -> 13824 bytes Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll | Bin 29696 -> 28672 bytes .../tlpkg/tlperl/lib/auto/File/Listing/.packlist | 1 - Master/tlpkg/tlperl/lib/auto/File/Which/.packlist | 3 - .../tlperl/lib/auto/Filter/Util/Call/Call.dll | Bin 18944 -> 18944 bytes Master/tlpkg/tlperl/lib/auto/HTML/Parser/.packlist | 8 - .../tlpkg/tlperl/lib/auto/HTML/Parser/Parser.dll | Bin 56320 -> 0 bytes Master/tlpkg/tlperl/lib/auto/HTML/Tagset/.packlist | 1 - .../tlpkg/tlperl/lib/auto/HTTP/Cookies/.packlist | 3 - Master/tlpkg/tlperl/lib/auto/HTTP/Daemon/.packlist | 1 - Master/tlpkg/tlperl/lib/auto/HTTP/Date/.packlist | 1 - .../tlpkg/tlperl/lib/auto/HTTP/Message/.packlist | 10 - .../tlpkg/tlperl/lib/auto/HTTP/Negotiate/.packlist | 1 - .../lib/auto/Hash/Util/FieldHash/FieldHash.dll | Bin 22528 -> 22016 bytes Master/tlpkg/tlperl/lib/auto/Hash/Util/Util.dll | Bin 20480 -> 20992 bytes Master/tlpkg/tlperl/lib/auto/IO/HTML/.packlist | 1 - Master/tlpkg/tlperl/lib/auto/IO/IO.dll | Bin 25088 -> 24064 bytes Master/tlpkg/tlperl/lib/auto/IO/String/.packlist | 1 - Master/tlpkg/tlperl/lib/auto/LWP/.packlist | 33 - .../tlpkg/tlperl/lib/auto/LWP/MediaTypes/.packlist | 2 - Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll | Bin 51200 -> 55808 bytes .../tlpkg/tlperl/lib/auto/MIME/Base64/Base64.dll | Bin 21504 -> 20992 bytes .../lib/auto/Math/BigInt/FastCalc/FastCalc.dll | Bin 21504 -> 20992 bytes Master/tlpkg/tlperl/lib/auto/Math/Int64/.packlist | 5 - Master/tlpkg/tlperl/lib/auto/Math/Int64/Int64.dll | Bin 82944 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Mozilla/CA/.packlist | 3 - Master/tlpkg/tlperl/lib/auto/Net/HTTP/.packlist | 4 - Master/tlpkg/tlperl/lib/auto/Opcode/Opcode.dll | Bin 27136 -> 25600 bytes Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll | Bin 98816 -> 117248 bytes .../tlperl/lib/auto/PerlIO/encoding/encoding.dll | Bin 30208 -> 30208 bytes Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.dll | Bin 13312 -> 13312 bytes .../tlpkg/tlperl/lib/auto/PerlIO/scalar/scalar.dll | Bin 19456 -> 18944 bytes Master/tlpkg/tlperl/lib/auto/PerlIO/via/via.dll | Bin 23552 -> 23552 bytes .../tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll | Bin 35840 -> 33792 bytes Master/tlpkg/tlperl/lib/auto/Socket/.packlist | 2 - Master/tlpkg/tlperl/lib/auto/Socket/Socket.dll | Bin 35328 -> 30720 bytes Master/tlpkg/tlperl/lib/auto/Storable/Storable.dll | Bin 117760 -> 116736 bytes .../tlperl/lib/auto/Sys/Hostname/Hostname.dll | Bin 13824 -> 13312 bytes .../auto/Tie/Hash/NamedCapture/NamedCapture.dll | Bin 17920 -> 17408 bytes Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll | Bin 26624 -> 26112 bytes Master/tlpkg/tlperl/lib/auto/Time/Piece/Piece.dll | Bin 27136 -> 26624 bytes Master/tlpkg/tlperl/lib/auto/Tk/.packlist | 644 - Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al | 15 - Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll | Bin 210944 -> 0 bytes .../tlperl/lib/auto/Tk/Clipboard/autosplit.ix | 6 - .../tlperl/lib/auto/Tk/Clipboard/getSelected.al | 15 - .../tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll | Bin 27648 -> 0 bytes .../tlpkg/tlperl/lib/auto/Tk/DirSelect/.packlist | 1 - .../lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll | Bin 17408 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al | 27 - Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll | Bin 53760 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Error.al | 20 - Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll | Bin 65024 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al | 21 - Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al | 35 - Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al | 36 - .../tlperl/lib/auto/Tk/Frame/AddScrollbars.al | 52 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al | 22 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix | 24 - .../tlperl/lib/auto/Tk/Frame/freeze_on_map.al | 18 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al | 24 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al | 50 - .../tlperl/lib/auto/Tk/Frame/labelVariable.al | 27 - .../tlperl/lib/auto/Tk/Frame/packscrollbars.al | 86 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al | 18 - Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al | 15 - .../tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al | 24 - Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll | Bin 67584 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll | Bin 17408 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll | Bin 128512 -> 0 bytes .../tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al | 49 - .../tlperl/lib/auto/Tk/Listbox/BeginExtend.al | 34 - .../tlperl/lib/auto/Tk/Listbox/BeginSelect.al | 46 - .../tlperl/lib/auto/Tk/Listbox/BeginToggle.al | 40 - .../tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al | 16 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al | 16 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al | 42 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al | 19 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al | 19 - .../tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al | 19 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al | 19 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al | 39 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al | 16 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al | 16 - .../tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al | 36 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al | 56 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al | 16 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll | Bin 40960 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al | 77 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al | 19 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al | 19 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al | 84 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al | 80 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al | 32 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al | 16 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al | 15 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al | 15 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al | 16 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al | 41 - .../tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix | 56 - .../tlperl/lib/auto/Tk/Listbox/clipboardPaste.al | 21 - .../tlperl/lib/auto/Tk/Listbox/deleteSelected.al | 18 - .../tlperl/lib/auto/Tk/Listbox/getSelected.al | 24 - Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al | 29 - .../tlperl/lib/auto/Tk/Menubutton/Menubutton.dll | Bin 28160 -> 0 bytes .../tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll | Bin 30720 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll | Bin 215040 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll | Bin 34304 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Receive.al | 23 - Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al | 16 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al | 33 - .../tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al | 40 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al | 16 - .../tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al | 31 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al | 29 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al | 23 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al | 19 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al | 61 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al | 15 - Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll | Bin 32256 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix | 22 - .../tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al | 55 - .../tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al | 26 - Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al | 43 - .../tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al | 28 - Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al | 21 - Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al | 18 - .../tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al | 15 - .../tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al | 38 - .../tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al | 37 - .../tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al | 35 - .../tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al | 32 - .../tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll | Bin 28672 -> 0 bytes .../tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al | 59 - .../tlperl/lib/auto/Tk/Scrollbar/StartDrag.al | 38 - .../tlperl/lib/auto/Tk/Scrollbar/autosplit.ix | 30 - Master/tlpkg/tlperl/lib/auto/Tk/Selection.al | 18 - Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll | Bin 38400 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al | 17 - Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al | 15 - Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix | 14 - Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al | 46 - .../tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll | Bin 130560 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix | 3 - .../tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix | 3 - .../tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix | 3 - .../tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll | Bin 84992 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll | Bin 941056 -> 0 bytes .../tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al | 19 - .../tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al | 20 - .../tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al | 56 - .../tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al | 29 - Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al | 24 - Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al | 32 - .../tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix | 10 - Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al | 27 - Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al | 30 - .../tlperl/lib/auto/Tk/Widget/AltKeyInDialog.al | 20 - .../tlpkg/tlperl/lib/auto/Tk/Widget/AmpWidget.al | 36 - .../tlperl/lib/auto/Tk/Widget/FindAltKeyTarget.al | 38 - .../tlpkg/tlperl/lib/auto/Tk/Widget/MasterMenu.al | 14 - .../tlperl/lib/auto/Tk/Widget/RestoreFocusGrab.al | 59 - .../tlpkg/tlperl/lib/auto/Tk/Widget/SetAmpText.al | 19 - .../tlperl/lib/auto/Tk/Widget/SetFocusGrab.al | 38 - .../lib/auto/Tk/Widget/UnderlineAmpersand.al | 29 - .../tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix | 27 - Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al | 87 - .../tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al | 51 - Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al | 15 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al | 17 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al | 29 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al | 50 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al | 20 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix | 14 - Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al | 24 - Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll | Bin 31744 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix | 3 - Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll | Bin 37888 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix | 49 - Master/tlpkg/tlperl/lib/auto/Tk/break.al | 13 - .../tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al | 14 - Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al | 18 - Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al | 28 - Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al | 43 - Master/tlpkg/tlperl/lib/auto/Tk/getNextFocus.al | 44 - Master/tlpkg/tlperl/lib/auto/Tk/getPrevFocus.al | 54 - Master/tlpkg/tlperl/lib/auto/Tk/interps.al | 14 - Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al | 19 - Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld | 1 - Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al | 13 - Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al | 17 - Master/tlpkg/tlperl/lib/auto/URI/.packlist | 52 - .../tlperl/lib/auto/Unicode/Collate/Collate.dll | Bin 528896 -> 579072 bytes .../lib/auto/Unicode/Normalize/Normalize.dll | Bin 212992 -> 0 bytes .../tlpkg/tlperl/lib/auto/WWW/RobotRules/.packlist | 2 - Master/tlpkg/tlperl/lib/auto/Win32/API/.packlist | 8 - Master/tlpkg/tlperl/lib/auto/Win32/API/API.dll | Bin 33280 -> 0 bytes .../lib/auto/Win32/API/Callback/Callback.dll | Bin 25088 -> 0 bytes .../tlpkg/tlperl/lib/auto/Win32/Console/.packlist | 2 - .../tlperl/lib/auto/Win32/Console/Console.dll | Bin 59904 -> 0 bytes Master/tlpkg/tlperl/lib/auto/Win32/OLE/.packlist | 11 - Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dll | Bin 148480 -> 0 bytes .../tlpkg/tlperl/lib/auto/Win32/Shortcut/.packlist | 2 - .../tlperl/lib/auto/Win32/Shortcut/Shortcut.dll | Bin 52224 -> 0 bytes .../tlperl/lib/auto/Win32/TieRegistry/.packlist | 2 - Master/tlpkg/tlperl/lib/auto/Win32/Win32.dll | Bin 58368 -> 57856 bytes .../tlpkg/tlperl/lib/auto/Win32API/File/File.dll | Bin 107008 -> 102912 bytes .../tlperl/lib/auto/Win32API/Registry/.packlist | 3 - .../tlperl/lib/auto/Win32API/Registry/Registry.dll | Bin 229888 -> 0 bytes Master/tlpkg/tlperl/lib/auto/arybase/arybase.dll | Bin 26112 -> 26112 bytes .../tlperl/lib/auto/attributes/attributes.dll | Bin 17920 -> 17408 bytes Master/tlpkg/tlperl/lib/auto/mro/mro.dll | Bin 26112 -> 25600 bytes Master/tlpkg/tlperl/lib/auto/re/re.dll | Bin 460800 -> 548352 bytes Master/tlpkg/tlperl/lib/auto/sdbm/extralibs.ld | 1 - .../tlperl/lib/auto/threads/shared/shared.dll | Bin 41472 -> 41984 bytes Master/tlpkg/tlperl/lib/auto/threads/threads.dll | Bin 42496 -> 41984 bytes Master/tlpkg/tlperl/lib/autodie.pm | 30 +- Master/tlpkg/tlperl/lib/autodie/Scope/Guard.pm | 65 + .../tlpkg/tlperl/lib/autodie/Scope/GuardStack.pm | 127 + Master/tlpkg/tlperl/lib/autodie/ScopeUtil.pm | 80 + Master/tlpkg/tlperl/lib/autodie/exception.pm | 86 +- .../tlpkg/tlperl/lib/autodie/exception/system.pm | 4 +- Master/tlpkg/tlperl/lib/autodie/hints.pm | 6 +- Master/tlpkg/tlperl/lib/autodie/skip.pm | 4 +- Master/tlpkg/tlperl/lib/bigint.pm | 26 +- Master/tlpkg/tlperl/lib/bignum.pm | 28 +- Master/tlpkg/tlperl/lib/bigrat.pm | 28 +- Master/tlpkg/tlperl/lib/charnames.pm | 12 +- Master/tlpkg/tlperl/lib/constant.pm | 50 +- Master/tlpkg/tlperl/lib/dumpvar.pl | 56 +- Master/tlpkg/tlperl/lib/encoding.pm | 468 +- Master/tlpkg/tlperl/lib/experimental.pm | 71 +- Master/tlpkg/tlperl/lib/feature.pm | 58 +- Master/tlpkg/tlperl/lib/if.pm | 15 +- Master/tlpkg/tlperl/lib/inc/latest.pm | 248 - Master/tlpkg/tlperl/lib/inc/latest/private.pm | 102 - Master/tlpkg/tlperl/lib/locale.pm | 89 +- Master/tlpkg/tlperl/lib/lwpcook.pod | 311 - Master/tlpkg/tlperl/lib/lwptut.pod | 839 - Master/tlpkg/tlperl/lib/meta_notation.pm | 54 + Master/tlpkg/tlperl/lib/mro.pm | 2 +- Master/tlpkg/tlperl/lib/ok.pm | 47 + Master/tlpkg/tlperl/lib/overload.pm | 42 +- Master/tlpkg/tlperl/lib/overload/numbers.pm | 14 + Master/tlpkg/tlperl/lib/parent.pm | 2 +- Master/tlpkg/tlperl/lib/perl5db.pl | 92 +- Master/tlpkg/tlperl/lib/perlfaq.pm | 9 +- Master/tlpkg/tlperl/lib/perllocal.pod | 110 +- Master/tlpkg/tlperl/lib/re.pm | 137 +- Master/tlpkg/tlperl/lib/sigtrap.pm | 6 +- Master/tlpkg/tlperl/lib/strict.pm | 65 +- Master/tlpkg/tlperl/lib/threads.pm | 7 +- Master/tlpkg/tlperl/lib/threads/shared.pm | 4 +- Master/tlpkg/tlperl/lib/unicore/Blocks.txt | 42 +- Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl | 35 +- Master/tlpkg/tlperl/lib/unicore/Decomposition.pl | 15 +- Master/tlpkg/tlperl/lib/unicore/Heavy.pl | 5101 +- Master/tlpkg/tlperl/lib/unicore/Name.pl | 2836 +- Master/tlpkg/tlperl/lib/unicore/Name.pm | 2 +- Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt | 50 +- Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt | 52 +- Master/tlpkg/tlperl/lib/unicore/To/Age.pl | 143 +- Master/tlpkg/tlperl/lib/unicore/To/Bc.pl | 118 +- Master/tlpkg/tlperl/lib/unicore/To/Bmg.pl | 5 +- Master/tlpkg/tlperl/lib/unicore/To/Bpb.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Bpt.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Cf.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Digit.pl | 85 +- Master/tlpkg/tlperl/lib/unicore/To/Ea.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Fold.pl | 54 +- Master/tlpkg/tlperl/lib/unicore/To/GCB.pl | 78 +- Master/tlpkg/tlperl/lib/unicore/To/Gc.pl | 288 +- Master/tlpkg/tlperl/lib/unicore/To/Hst.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Isc.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Jg.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/To/Jt.pl | 92 +- Master/tlpkg/tlperl/lib/unicore/To/Lb.pl | 266 +- Master/tlpkg/tlperl/lib/unicore/To/Lc.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Lower.pl | 54 +- Master/tlpkg/tlperl/lib/unicore/To/NFCQC.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/To/NFDQC.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/To/NFKCCF.pl | 64 +- Master/tlpkg/tlperl/lib/unicore/To/NFKCQC.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/To/NFKDQC.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/To/Na1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/NameAlia.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/To/Nt.pl | 25 +- Master/tlpkg/tlperl/lib/unicore/To/Nv.pl | 85 +- Master/tlpkg/tlperl/lib/unicore/To/PerlDeci.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/To/SB.pl | 180 +- Master/tlpkg/tlperl/lib/unicore/To/Sc.pl | 202 +- Master/tlpkg/tlperl/lib/unicore/To/Scx.pl | 209 +- Master/tlpkg/tlperl/lib/unicore/To/Tc.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Title.pl | 54 +- Master/tlpkg/tlperl/lib/unicore/To/Uc.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Upper.pl | 54 +- Master/tlpkg/tlperl/lib/unicore/To/WB.pl | 138 +- Master/tlpkg/tlperl/lib/unicore/UCD.pl | 728 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/NA.pl | 286 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V11.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V20.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V30.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V31.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V32.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V40.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V41.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V50.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V51.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V52.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V60.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V61.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/V70.pl | 296 + Master/tlpkg/tlperl/lib/unicore/lib/Alpha/Y.pl | 176 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/AL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/AN.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/B.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/BN.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/CS.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/EN.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ES.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ET.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/L.pl | 166 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/NSM.pl | 84 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ON.pl | 90 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/R.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/WS.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/BidiC/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/BidiM/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/NB.pl | 52 +- Master/tlpkg/tlperl/lib/unicore/lib/Bpt/C.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bpt/N.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Bpt/O.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/CE/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/CI/Y.pl | 94 +- Master/tlpkg/tlperl/lib/unicore/lib/CWCF/Y.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/CWCM/Y.pl | 30 +- Master/tlpkg/tlperl/lib/unicore/lib/CWKCF/Y.pl | 40 +- Master/tlpkg/tlperl/lib/unicore/lib/CWL/Y.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/CWT/Y.pl | 40 +- Master/tlpkg/tlperl/lib/unicore/lib/CWU/Y.pl | 40 +- Master/tlpkg/tlperl/lib/unicore/lib/Cased/Y.pl | 30 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/A.pl | 24 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/AR.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATAR.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/B.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/BR.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/DB.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/NK.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/NR.pl | 50 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/OV.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/VR.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/CompEx/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/DI/Y.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Dash/Y.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Dep/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dia/Y.pl | 48 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Com.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Enc.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Fin.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Font.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Init.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Iso.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Med.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Nar.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Nb.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/NonCanon.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sqr.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sub.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sup.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Vert.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/A.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/H.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/N.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/Na.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/W.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Ext/Y.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/CN.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/EX.pl | 94 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/LV.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/LVT.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/SM.pl | 48 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/XX.pl | 76 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/C.pl | 284 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cf.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cn.pl | 286 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/L.pl | 142 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/LC.pl | 22 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Ll.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lm.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lo.pl | 120 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lt.pl | 34 - Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lu.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/M.pl | 72 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Mc.pl | 50 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Me.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Mn.pl | 84 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/N.pl | 44 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Nd.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Nl.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/No.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/P.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pd.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pe.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pf.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pi.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Po.pl | 38 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Ps.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/S.pl | 100 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sc.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sk.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sm.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/So.pl | 96 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Z.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Zs.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/GrBase/Y.pl | 306 +- Master/tlpkg/tlperl/lib/unicore/lib/Hex/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Hst/NA.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Hyphen/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/IDC/Y.pl | 190 +- Master/tlpkg/tlperl/lib/unicore/lib/IDS/Y.pl | 144 +- Master/tlpkg/tlperl/lib/unicore/lib/Ideo/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/2_0.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/2_1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_0.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_2.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/4_0.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/4_1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_0.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_2.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_0.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_1.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_2.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_3.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/In/7_0.pl | 1234 + Master/tlpkg/tlperl/lib/unicore/lib/Jg/Ain.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Alef.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Beh.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Dal.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/FarsiYeh.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Feh.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Gaf.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Hah.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Lam.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/NoJoinin.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Qaf.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Reh.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Sad.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Jg/Seen.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Waw.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Yeh.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/C.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/D.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/R.pl | 42 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/T.pl | 86 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/U.pl | 104 +- Master/tlpkg/tlperl/lib/unicore/lib/LOE/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/AI.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/AL.pl | 216 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/BA.pl | 32 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/BB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CJ.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CL.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CM.pl | 70 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/EX.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/GL.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/ID.pl | 54 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/IS.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/NS.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/OP.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/PO.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/PR.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/QU.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/SA.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/XX.pl | 284 +- Master/tlpkg/tlperl/lib/unicore/lib/Lower/Y.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Math/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/NChar/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/NFCQC/M.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/NFCQC/Y.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/NFDQC/N.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/NFDQC/Y.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKCQC/N.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKCQC/Y.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKDQC/N.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKDQC/Y.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/Nt/Di.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nt/None.pl | 44 +- Master/tlpkg/tlperl/lib/unicore/lib/Nt/Nu.pl | 30 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/0.pl | 22 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10.pl | 22 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/100.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1000.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10000.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/11.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/12.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/13.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/14.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/15.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/16.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/17.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/18.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/19.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_2.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_3.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_4.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_8.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2.pl | 32 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/20.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2_3.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3.pl | 32 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/30.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/300.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_4.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/4.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/40.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/50.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/500.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5000.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/50000.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/6.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/60.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/7.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/70.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/8.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/80.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/9.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/90.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/900.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/PatSyn/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/PatWS/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Alnum.pl | 186 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/Assigned.pl | 286 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Blank.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Graph.pl | 286 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PerlWord.pl | 2 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixPun.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Print.pl | 286 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/SpacePer.pl | 34 + Master/tlpkg/tlperl/lib/unicore/lib/Perl/Title.pl | 34 + Master/tlpkg/tlperl/lib/unicore/lib/Perl/Word.pl | 196 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/XPosixPu.pl | 36 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlAny.pl | 30 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlCh2.pl | 190 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlCha.pl | 142 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlFol.pl | 2 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlIDC.pl | 190 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlIDS.pl | 144 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlPr2.pl | 2 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlPro.pl | 2 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlQuo.pl | 6 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_XExtend.pl | 428 - .../tlpkg/tlperl/lib/unicore/lib/Perl/_XRegula.pl | 63 - .../tlpkg/tlperl/lib/unicore/lib/Perl/_XSpecia.pl | 26 - Master/tlpkg/tlperl/lib/unicore/lib/QMark/Y.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/AT.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/CL.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/EX.pl | 72 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/FO.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/LE.pl | 124 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/LO.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/NU.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/SC.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/ST.pl | 32 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/Sp.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/UP.pl | 40 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/XX.pl | 220 +- Master/tlpkg/tlperl/lib/unicore/lib/SD/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/STerm/Y.pl | 32 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Arab.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Armn.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Beng.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cham.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cprt.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cyrl.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Deva.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Dupl.pl | 24 + Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ethi.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Geor.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Gran.pl | 42 + Master/tlpkg/tlperl/lib/unicore/lib/Sc/Grek.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Gujr.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Guru.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Han.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hang.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hebr.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hira.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hmng.pl | 24 + Master/tlpkg/tlperl/lib/unicore/lib/Sc/Kana.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khar.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khmr.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Knda.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lana.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lao.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Latn.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Limb.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Linb.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mlym.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mong.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Orya.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sinh.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Talu.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Taml.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Telu.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tibt.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zinh.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zyyy.pl | 100 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zzzz.pl | 286 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Arab.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Armn.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Beng.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bopo.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cakm.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Copt.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cprt.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cyrl.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Deva.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Dupl.pl | 24 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Geor.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Gran.pl | 44 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Grek.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Gujr.pl | 6 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Guru.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Han.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hang.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hira.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kana.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Knda.pl | 44 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Latn.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Limb.pl | 26 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Linb.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mlym.pl | 38 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mong.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mymr.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Orya.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phlp.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sind.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sinh.pl | 42 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Syrc.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tagb.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Takr.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Taml.pl | 48 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Telu.pl | 42 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Thaa.pl | 4 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tirh.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Yi.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zinh.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zyyy.pl | 92 +- Master/tlpkg/tlperl/lib/unicore/lib/Space/Y.pl | 34 - Master/tlpkg/tlperl/lib/unicore/lib/Term/Y.pl | 38 +- Master/tlpkg/tlperl/lib/unicore/lib/UIdeo/Y.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/Upper/Y.pl | 40 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/EX.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/FO.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/HL.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/KA.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/LE.pl | 142 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/MB.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/ML.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/MN.pl | 2 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/NU.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/XX.pl | 202 +- Master/tlpkg/tlperl/lib/unicore/lib/XIDC/Y.pl | 190 +- Master/tlpkg/tlperl/lib/unicore/lib/XIDS/Y.pl | 144 +- Master/tlpkg/tlperl/lib/unicore/version | 2 +- Master/tlpkg/tlperl/lib/utf8.pm | 57 +- Master/tlpkg/tlperl/lib/utf8_heavy.pl | 19 +- Master/tlpkg/tlperl/lib/warnings.pm | 1015 +- Master/tlpkg/tlperl/lib/warnings/register.pm | 41 +- Master/tlpkg/tlperl/site/lib/Date/Format.pm | 403 + Master/tlpkg/tlperl/site/lib/Date/Language.pm | 144 + Master/tlpkg/tlperl/site/lib/Date/Language/Afar.pm | 49 + .../tlpkg/tlperl/site/lib/Date/Language/Amharic.pm | 87 + .../tlperl/site/lib/Date/Language/Austrian.pm | 36 + .../tlperl/site/lib/Date/Language/Brazilian.pm | 35 + .../tlperl/site/lib/Date/Language/Bulgarian.pm | 92 + .../tlpkg/tlperl/site/lib/Date/Language/Chinese.pm | 36 + .../tlperl/site/lib/Date/Language/Chinese_GB.pm | 36 + .../tlpkg/tlperl/site/lib/Date/Language/Czech.pm | 58 + .../tlpkg/tlperl/site/lib/Date/Language/Danish.pm | 36 + .../tlpkg/tlperl/site/lib/Date/Language/Dutch.pm | 40 + .../tlpkg/tlperl/site/lib/Date/Language/English.pm | 37 + .../tlpkg/tlperl/site/lib/Date/Language/Finnish.pm | 45 + .../tlpkg/tlperl/site/lib/Date/Language/French.pm | 36 + .../tlpkg/tlperl/site/lib/Date/Language/Gedeo.pm | 51 + .../tlpkg/tlperl/site/lib/Date/Language/German.pm | 37 + .../tlpkg/tlperl/site/lib/Date/Language/Greek.pm | 91 + .../tlperl/site/lib/Date/Language/Hungarian.pm | 88 + .../tlperl/site/lib/Date/Language/Icelandic.pm | 36 + .../tlpkg/tlperl/site/lib/Date/Language/Italian.pm | 36 + .../tlperl/site/lib/Date/Language/Norwegian.pm | 36 + .../tlpkg/tlperl/site/lib/Date/Language/Oromo.pm | 37 + .../tlperl/site/lib/Date/Language/Romanian.pm | 37 + .../tlpkg/tlperl/site/lib/Date/Language/Russian.pm | 49 + .../site/lib/Date/Language/Russian_cp1251.pm | 39 + .../tlperl/site/lib/Date/Language/Russian_koi8r.pm | 39 + .../tlpkg/tlperl/site/lib/Date/Language/Sidama.pm | 37 + .../tlpkg/tlperl/site/lib/Date/Language/Somali.pm | 62 + .../tlpkg/tlperl/site/lib/Date/Language/Spanish.pm | 35 + .../tlpkg/tlperl/site/lib/Date/Language/Swedish.pm | 41 + .../tlperl/site/lib/Date/Language/Tigrinya.pm | 58 + .../site/lib/Date/Language/TigrinyaEritrean.pm | 93 + .../site/lib/Date/Language/TigrinyaEthiopian.pm | 93 + .../tlpkg/tlperl/site/lib/Date/Language/Turkish.pm | 59 + Master/tlpkg/tlperl/site/lib/Date/Parse.pm | 380 + Master/tlpkg/tlperl/site/lib/Digest/SHA1.pm | 246 + Master/tlpkg/tlperl/site/lib/Encode/Locale.pm | 373 + Master/tlpkg/tlperl/site/lib/Encode/compat.pm | 87 + .../tlpkg/tlperl/site/lib/Encode/compat/5006001.pm | 32 + .../tlpkg/tlperl/site/lib/Encode/compat/Alias.pm | 330 + .../tlpkg/tlperl/site/lib/Encode/compat/common.pm | 127 + Master/tlpkg/tlperl/site/lib/File/Listing.pm | 435 + Master/tlpkg/tlperl/site/lib/File/Which.pm | 336 + Master/tlpkg/tlperl/site/lib/HTML/Entities.pm | 483 + Master/tlpkg/tlperl/site/lib/HTML/Filter.pm | 112 + Master/tlpkg/tlperl/site/lib/HTML/HeadParser.pm | 315 + Master/tlpkg/tlperl/site/lib/HTML/LinkExtor.pm | 185 + Master/tlpkg/tlperl/site/lib/HTML/Parser.pm | 1234 + Master/tlpkg/tlperl/site/lib/HTML/PullParser.pm | 209 + Master/tlpkg/tlperl/site/lib/HTML/Tagset.pm | 471 + Master/tlpkg/tlperl/site/lib/HTML/TokeParser.pm | 371 + Master/tlpkg/tlperl/site/lib/HTTP/Config.pm | 438 + Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm | 781 + .../tlperl/site/lib/HTTP/Cookies/Microsoft.pm | 329 + .../tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm | 114 + Master/tlpkg/tlperl/site/lib/HTTP/Daemon.pm | 906 + Master/tlpkg/tlperl/site/lib/HTTP/Date.pm | 388 + Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm | 873 + Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm | 100 + Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm | 96 + Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm | 197 + Master/tlpkg/tlperl/site/lib/HTTP/Message.pm | 1114 + Master/tlpkg/tlperl/site/lib/HTTP/Negotiate.pm | 528 + Master/tlpkg/tlperl/site/lib/HTTP/Request.pm | 241 + .../tlpkg/tlperl/site/lib/HTTP/Request/Common.pm | 521 + Master/tlpkg/tlperl/site/lib/HTTP/Response.pm | 644 + Master/tlpkg/tlperl/site/lib/HTTP/Status.pm | 269 + Master/tlpkg/tlperl/site/lib/IO/HTML.pm | 575 + Master/tlpkg/tlperl/site/lib/IO/String.pm | 551 + Master/tlpkg/tlperl/site/lib/LWP.pm | 669 + Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm | 65 + Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm | 75 + Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm | 180 + Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm | 313 + Master/tlpkg/tlperl/site/lib/LWP/Debug.pm | 110 + Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm | 5 + Master/tlpkg/tlperl/site/lib/LWP/MediaTypes.pm | 280 + Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm | 44 + Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm | 291 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/GHTTP.pm | 73 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm | 72 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm | 52 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm | 146 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm | 543 + .../tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm | 213 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm | 515 + .../tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm | 26 + .../tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm | 183 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm | 145 + Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm | 24 + Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm | 303 + Master/tlpkg/tlperl/site/lib/LWP/Simple.pm | 253 + Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm | 1861 + Master/tlpkg/tlperl/site/lib/LWP/media.types | 1479 + Master/tlpkg/tlperl/site/lib/Math/Int64.pm | 589 + .../tlperl/site/lib/Math/Int64/die_on_overflow.pm | 45 + .../site/lib/Math/Int64/native_if_available.pm | 43 + Master/tlpkg/tlperl/site/lib/Math/UInt64.pm | 32 + Master/tlpkg/tlperl/site/lib/Mozilla/CA.pm | 74 + Master/tlpkg/tlperl/site/lib/Mozilla/CA/cacert.pem | 3952 + .../tlpkg/tlperl/site/lib/Mozilla/mk-ca-bundle.pl | 500 + Master/tlpkg/tlperl/site/lib/Net/HTTP.pm | 294 + Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm | 648 + Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm | 110 + Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm | 111 + Master/tlpkg/tlperl/site/lib/OLE.pm | 177 + Master/tlpkg/tlperl/site/lib/Socket.pm | 1121 + Master/tlpkg/tlperl/site/lib/Tie/Registry.pm | 45 + Master/tlpkg/tlperl/site/lib/Tie/Watch.pm | 563 + Master/tlpkg/tlperl/site/lib/Time/Zone.pm | 291 + Master/tlpkg/tlperl/site/lib/Tk.pm | 857 + Master/tlpkg/tlperl/site/lib/Tk.pod | 865 + Master/tlpkg/tlperl/site/lib/Tk/804delta.pod | 110 + Master/tlpkg/tlperl/site/lib/Tk/Adjuster.pm | 438 + Master/tlpkg/tlperl/site/lib/Tk/Adjuster.pod | 223 + Master/tlpkg/tlperl/site/lib/Tk/After.pm | 105 + Master/tlpkg/tlperl/site/lib/Tk/Animation.pm | 230 + Master/tlpkg/tlperl/site/lib/Tk/Animation.pod | 92 + Master/tlpkg/tlperl/site/lib/Tk/Balloon.pm | 644 + Master/tlpkg/tlperl/site/lib/Tk/Balloon.pod | 293 + Master/tlpkg/tlperl/site/lib/Tk/Bitmap.pm | 10 + Master/tlpkg/tlperl/site/lib/Tk/Bitmap.pod | 103 + Master/tlpkg/tlperl/site/lib/Tk/BrowseEntry.pm | 524 + Master/tlpkg/tlperl/site/lib/Tk/BrowseEntry.pod | 210 + Master/tlpkg/tlperl/site/lib/Tk/Button.pm | 247 + Master/tlpkg/tlperl/site/lib/Tk/Button.pod | 255 + Master/tlpkg/tlperl/site/lib/Tk/Camel.xpm | 41 + Master/tlpkg/tlperl/site/lib/Tk/Canvas.pm | 1436 + Master/tlpkg/tlperl/site/lib/Tk/Canvas.pod | 2394 + Master/tlpkg/tlperl/site/lib/Tk/Checkbutton.pm | 42 + Master/tlpkg/tlperl/site/lib/Tk/Checkbutton.pod | 347 + Master/tlpkg/tlperl/site/lib/Tk/Clipboard.pm | 122 + Master/tlpkg/tlperl/site/lib/Tk/Clipboard.pod | 89 + Master/tlpkg/tlperl/site/lib/Tk/CmdLine.pm | 497 + Master/tlpkg/tlperl/site/lib/Tk/CmdLine.pod | 454 + Master/tlpkg/tlperl/site/lib/Tk/ColorDialog.pm | 58 + Master/tlpkg/tlperl/site/lib/Tk/ColorEdit.xpm | 58 + Master/tlpkg/tlperl/site/lib/Tk/ColorEditor.pm | 317 + Master/tlpkg/tlperl/site/lib/Tk/ColorEditor.pod | 120 + Master/tlpkg/tlperl/site/lib/Tk/ColorSelect.pm | 414 + Master/tlpkg/tlperl/site/lib/Tk/Compound.pm | 40 + Master/tlpkg/tlperl/site/lib/Tk/Compound.pod | 298 + Master/tlpkg/tlperl/site/lib/Tk/Config.pm | 13 + Master/tlpkg/tlperl/site/lib/Tk/ConfigSpecs.pod | 262 + Master/tlpkg/tlperl/site/lib/Tk/Configure.pm | 68 + Master/tlpkg/tlperl/site/lib/Tk/Credits | 7 + Master/tlpkg/tlperl/site/lib/Tk/DItem.pod | 439 + Master/tlpkg/tlperl/site/lib/Tk/Derived.pm | 512 + Master/tlpkg/tlperl/site/lib/Tk/Derived.pod | 89 + Master/tlpkg/tlperl/site/lib/Tk/Dialog.pm | 68 + Master/tlpkg/tlperl/site/lib/Tk/Dialog.pod | 107 + Master/tlpkg/tlperl/site/lib/Tk/DialogBox.pm | 152 + Master/tlpkg/tlperl/site/lib/Tk/DialogBox.pod | 156 + Master/tlpkg/tlperl/site/lib/Tk/DirSelect.pm | 503 + Master/tlpkg/tlperl/site/lib/Tk/DirTree.pm | 261 + Master/tlpkg/tlperl/site/lib/Tk/DirTree.pod | 172 + Master/tlpkg/tlperl/site/lib/Tk/Dirlist.pm | 113 + Master/tlpkg/tlperl/site/lib/Tk/DragDrop.pm | 332 + Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Common.pm | 61 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/Common.pod | 16 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/LocalDrop.pm | 61 + Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Rect.pm | 110 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/SunConst.pm | 34 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/SunConst.pod | 18 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/SunDrop.pm | 200 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/SunSite.pm | 107 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/Win32Drop.pm | 8 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/Win32Site.pm | 50 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/XDNDDrop.pm | 145 + .../tlpkg/tlperl/site/lib/Tk/DragDrop/XDNDSite.pm | 159 + Master/tlpkg/tlperl/site/lib/Tk/DropSite.pm | 257 + Master/tlpkg/tlperl/site/lib/Tk/DropSite.pod | 33 + Master/tlpkg/tlperl/site/lib/Tk/DummyEncode.pm | 46 + Master/tlpkg/tlperl/site/lib/Tk/English.pm | 307 + Master/tlpkg/tlperl/site/lib/Tk/Entry.pm | 615 + Master/tlpkg/tlperl/site/lib/Tk/Entry.pod | 693 + Master/tlpkg/tlperl/site/lib/Tk/Error.pod | 145 + Master/tlpkg/tlperl/site/lib/Tk/ErrorDialog.pm | 129 + Master/tlpkg/tlperl/site/lib/Tk/ErrorDialog.pod | 36 + Master/tlpkg/tlperl/site/lib/Tk/Event.pm | 14 + Master/tlpkg/tlperl/site/lib/Tk/Event/IO.pm | 132 + Master/tlpkg/tlperl/site/lib/Tk/Eventloop.pod | 62 + Master/tlpkg/tlperl/site/lib/Tk/FBox.pm | 1061 + Master/tlpkg/tlperl/site/lib/Tk/FBox.pod | 67 + Master/tlpkg/tlperl/site/lib/Tk/FileSelect.pm | 578 + Master/tlpkg/tlperl/site/lib/Tk/FileSelect.pod | 150 + Master/tlpkg/tlperl/site/lib/Tk/FloatEntry.pm | 109 + Master/tlpkg/tlperl/site/lib/Tk/Font.pm | 163 + Master/tlpkg/tlperl/site/lib/Tk/Font.pod | 407 + Master/tlpkg/tlperl/site/lib/Tk/Frame.pm | 378 + Master/tlpkg/tlperl/site/lib/Tk/Frame.pod | 146 + Master/tlpkg/tlperl/site/lib/Tk/HList.pm | 708 + Master/tlpkg/tlperl/site/lib/Tk/HList.pod | 1050 + Master/tlpkg/tlperl/site/lib/Tk/IO.pm | 183 + Master/tlpkg/tlperl/site/lib/Tk/IO.pod | 51 + Master/tlpkg/tlperl/site/lib/Tk/IconList.pm | 712 + Master/tlpkg/tlperl/site/lib/Tk/IconList.pod | 82 + Master/tlpkg/tlperl/site/lib/Tk/Image.pm | 74 + Master/tlpkg/tlperl/site/lib/Tk/Image.pod | 145 + Master/tlpkg/tlperl/site/lib/Tk/InputO.pod | 50 + Master/tlpkg/tlperl/site/lib/Tk/Internals.pod | 142 + Master/tlpkg/tlperl/site/lib/Tk/ItemStyle.pm | 38 + Master/tlpkg/tlperl/site/lib/Tk/JPEG.pm | 57 + Master/tlpkg/tlperl/site/lib/Tk/LabEntry.pm | 31 + Master/tlpkg/tlperl/site/lib/Tk/LabFrame.pm | 138 + Master/tlpkg/tlperl/site/lib/Tk/LabFrame.pod | 110 + Master/tlpkg/tlperl/site/lib/Tk/LabRadio.pm | 63 + Master/tlpkg/tlperl/site/lib/Tk/Label.pm | 21 + Master/tlpkg/tlperl/site/lib/Tk/Label.pod | 133 + Master/tlpkg/tlperl/site/lib/Tk/Labelframe.pm | 16 + Master/tlpkg/tlperl/site/lib/Tk/Labelframe.pod | 206 + Master/tlpkg/tlperl/site/lib/Tk/Listbox.pm | 910 + Master/tlpkg/tlperl/site/lib/Tk/Listbox.pod | 794 + Master/tlpkg/tlperl/site/lib/Tk/MMtry.pm | 60 + Master/tlpkg/tlperl/site/lib/Tk/MMutil.pm | 603 + Master/tlpkg/tlperl/site/lib/Tk/MainWindow.pm | 210 + Master/tlpkg/tlperl/site/lib/Tk/MainWindow.pod | 85 + Master/tlpkg/tlperl/site/lib/Tk/MakeDepend.pm | 342 + Master/tlpkg/tlperl/site/lib/Tk/Menu.pm | 1201 + Master/tlpkg/tlperl/site/lib/Tk/Menu.pod | 876 + Master/tlpkg/tlperl/site/lib/Tk/Menu/Item.pm | 178 + Master/tlpkg/tlperl/site/lib/Tk/Menu/Item.pod | 96 + Master/tlpkg/tlperl/site/lib/Tk/Menubar.pm | 15 + Master/tlpkg/tlperl/site/lib/Tk/Menubutton.pm | 401 + Master/tlpkg/tlperl/site/lib/Tk/Menubutton.pod | 249 + Master/tlpkg/tlperl/site/lib/Tk/Message.pm | 20 + Master/tlpkg/tlperl/site/lib/Tk/Message.pod | 151 + Master/tlpkg/tlperl/site/lib/Tk/MsgBox.pm | 506 + Master/tlpkg/tlperl/site/lib/Tk/MsgBox.pod | 83 + Master/tlpkg/tlperl/site/lib/Tk/Mwm.pod | 109 + Master/tlpkg/tlperl/site/lib/Tk/NBFrame.pm | 20 + Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm | 480 + Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pod | 235 + Master/tlpkg/tlperl/site/lib/Tk/Optionmenu.pm | 128 + Master/tlpkg/tlperl/site/lib/Tk/Optionmenu.pod | 100 + Master/tlpkg/tlperl/site/lib/Tk/PNG.pm | 50 + Master/tlpkg/tlperl/site/lib/Tk/Pane.pm | 544 + Master/tlpkg/tlperl/site/lib/Tk/Panedwindow.pm | 221 + Master/tlpkg/tlperl/site/lib/Tk/Panedwindow.pod | 326 + Master/tlpkg/tlperl/site/lib/Tk/Photo.pm | 22 + Master/tlpkg/tlperl/site/lib/Tk/Photo.pod | 475 + Master/tlpkg/tlperl/site/lib/Tk/Pixmap.pm | 19 + Master/tlpkg/tlperl/site/lib/Tk/Pixmap.pod | 64 + Master/tlpkg/tlperl/site/lib/Tk/Popup.pod | 89 + Master/tlpkg/tlperl/site/lib/Tk/Pretty.pm | 93 + Master/tlpkg/tlperl/site/lib/Tk/ProgressBar.pm | 517 + Master/tlpkg/tlperl/site/lib/Tk/README.Adjust | 77 + Master/tlpkg/tlperl/site/lib/Tk/ROText.pm | 48 + Master/tlpkg/tlperl/site/lib/Tk/ROText.pod | 48 + Master/tlpkg/tlperl/site/lib/Tk/Radiobutton.pm | 45 + Master/tlpkg/tlperl/site/lib/Tk/Radiobutton.pod | 333 + Master/tlpkg/tlperl/site/lib/Tk/Region.pm | 182 + Master/tlpkg/tlperl/site/lib/Tk/Reindex.pm | 233 + Master/tlpkg/tlperl/site/lib/Tk/ReindexedROText.pm | 13 + Master/tlpkg/tlperl/site/lib/Tk/ReindexedText.pm | 13 + Master/tlpkg/tlperl/site/lib/Tk/Scale.pm | 278 + Master/tlpkg/tlperl/site/lib/Tk/Scale.pod | 356 + Master/tlpkg/tlperl/site/lib/Tk/Scrollbar.pm | 429 + Master/tlpkg/tlperl/site/lib/Tk/Scrollbar.pod | 429 + Master/tlpkg/tlperl/site/lib/Tk/Scrolled.pod | 86 + Master/tlpkg/tlperl/site/lib/Tk/Spinbox.pm | 115 + Master/tlpkg/tlperl/site/lib/Tk/Spinbox.pod | 819 + Master/tlpkg/tlperl/site/lib/Tk/Stats.pm | 26 + Master/tlpkg/tlperl/site/lib/Tk/Submethods.pm | 45 + Master/tlpkg/tlperl/site/lib/Tk/Submethods.pod | 27 + Master/tlpkg/tlperl/site/lib/Tk/TList.pm | 416 + Master/tlpkg/tlperl/site/lib/Tk/TList.pod | 597 + Master/tlpkg/tlperl/site/lib/Tk/Table.pm | 597 + Master/tlpkg/tlperl/site/lib/Tk/Table.pod | 102 + Master/tlpkg/tlperl/site/lib/Tk/Tcl-perl.pod | 200 + Master/tlpkg/tlperl/site/lib/Tk/Text.pm | 1673 + Master/tlpkg/tlperl/site/lib/Tk/Text.pod | 2224 + Master/tlpkg/tlperl/site/lib/Tk/Text/Tag.pm | 46 + Master/tlpkg/tlperl/site/lib/Tk/TextEdit.pm | 509 + Master/tlpkg/tlperl/site/lib/Tk/TextList.pm | 982 + Master/tlpkg/tlperl/site/lib/Tk/TextUndo.pm | 1023 + Master/tlpkg/tlperl/site/lib/Tk/TextUndo.pod | 73 + Master/tlpkg/tlperl/site/lib/Tk/Tiler.pm | 202 + Master/tlpkg/tlperl/site/lib/Tk/Tiler.pod | 32 + Master/tlpkg/tlperl/site/lib/Tk/TixGrid.pm | 1597 + Master/tlpkg/tlperl/site/lib/Tk/TixGrid.pod | 539 + Master/tlpkg/tlperl/site/lib/Tk/Tk.xbm | 44 + Master/tlpkg/tlperl/site/lib/Tk/Tk.xpm | 41 + Master/tlpkg/tlperl/site/lib/Tk/TkXSUB.def | 62 + Master/tlpkg/tlperl/site/lib/Tk/Toplevel.pm | 211 + Master/tlpkg/tlperl/site/lib/Tk/Toplevel.pod | 199 + Master/tlpkg/tlperl/site/lib/Tk/Trace.pm | 405 + Master/tlpkg/tlperl/site/lib/Tk/Tree.pm | 313 + Master/tlpkg/tlperl/site/lib/Tk/Tree.pod | 274 + Master/tlpkg/tlperl/site/lib/Tk/UserGuide.pod | 586 + Master/tlpkg/tlperl/site/lib/Tk/Widget.pm | 1774 + Master/tlpkg/tlperl/site/lib/Tk/Widget.pod | 678 + Master/tlpkg/tlperl/site/lib/Tk/WidgetDemo.pod | 59 + Master/tlpkg/tlperl/site/lib/Tk/Wm.pm | 174 + Master/tlpkg/tlperl/site/lib/Tk/Wm.pod | 669 + Master/tlpkg/tlperl/site/lib/Tk/X.pm | 391 + Master/tlpkg/tlperl/site/lib/Tk/X.pod | 373 + Master/tlpkg/tlperl/site/lib/Tk/X11/X.h | 677 + Master/tlpkg/tlperl/site/lib/Tk/X11/Xatom.h | 79 + Master/tlpkg/tlperl/site/lib/Tk/X11/Xfuncproto.h | 60 + Master/tlpkg/tlperl/site/lib/Tk/X11/Xlib.h | 1214 + Master/tlpkg/tlperl/site/lib/Tk/X11/Xutil.h | 855 + Master/tlpkg/tlperl/site/lib/Tk/X11/cursorfont.h | 79 + Master/tlpkg/tlperl/site/lib/Tk/X11/keysym.h | 39 + Master/tlpkg/tlperl/site/lib/Tk/X11/keysymdef.h | 1169 + Master/tlpkg/tlperl/site/lib/Tk/X11/license.terms | 39 + Master/tlpkg/tlperl/site/lib/Tk/X11Font.pm | 184 + Master/tlpkg/tlperl/site/lib/Tk/X11Font.pod | 88 + Master/tlpkg/tlperl/site/lib/Tk/Xcamel.gif | Bin 0 -> 4193 bytes Master/tlpkg/tlperl/site/lib/Tk/Xlib.pm | 15 + Master/tlpkg/tlperl/site/lib/Tk/Xrm.pm | 9 + Master/tlpkg/tlperl/site/lib/Tk/Xrm.pod | 45 + Master/tlpkg/tlperl/site/lib/Tk/act_folder.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/act_folder.xpm | 22 + Master/tlpkg/tlperl/site/lib/Tk/after.pod | 168 + Master/tlpkg/tlperl/site/lib/Tk/anim.gif | Bin 0 -> 2533 bytes Master/tlpkg/tlperl/site/lib/Tk/arrowdownwin.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/balArrow.xbm | 4 + Master/tlpkg/tlperl/site/lib/Tk/bind.pod | 583 + Master/tlpkg/tlperl/site/lib/Tk/bindtags.pod | 107 + Master/tlpkg/tlperl/site/lib/Tk/callbacks.pod | 104 + Master/tlpkg/tlperl/site/lib/Tk/cbxarrow.xbm | 6 + Master/tlpkg/tlperl/site/lib/Tk/chooseColor.pod | 64 + .../tlpkg/tlperl/site/lib/Tk/chooseDirectory.pod | 95 + Master/tlpkg/tlperl/site/lib/Tk/composite.pod | 171 + .../tlpkg/tlperl/site/lib/Tk/demos/LabEnLabRad.pm | 41 + .../tlperl/site/lib/Tk/demos/images/QuitPB.xpm | 48 + .../tlperl/site/lib/Tk/demos/images/QuitPBa.xpm | 48 + .../tlpkg/tlperl/site/lib/Tk/demos/images/c.icon | 16 + .../tlperl/site/lib/Tk/demos/images/cursor.cur | Bin 0 -> 326 bytes .../tlperl/site/lib/Tk/demos/images/cursor.mask | 6 + .../tlperl/site/lib/Tk/demos/images/cursor.xbm | 8 + .../tlpkg/tlperl/site/lib/Tk/demos/images/dir.icon | 16 + .../tlpkg/tlperl/site/lib/Tk/demos/images/dir.mask | 16 + .../tlperl/site/lib/Tk/demos/images/earth.gif | Bin 0 -> 51552 bytes .../tlperl/site/lib/Tk/demos/images/earthris.gif | Bin 0 -> 6343 bytes Master/tlpkg/tlperl/site/lib/Tk/demos/images/face | 173 + .../tlpkg/tlperl/site/lib/Tk/demos/images/flagdown | 27 + .../tlpkg/tlperl/site/lib/Tk/demos/images/flagup | 27 + .../tlpkg/tlperl/site/lib/Tk/demos/images/grey.25 | 6 + .../tlpkg/tlperl/site/lib/Tk/demos/images/grey.5 | 6 + .../tlpkg/tlperl/site/lib/Tk/demos/images/letters | 27 + .../tlperl/site/lib/Tk/demos/images/mickey.gif | Bin 0 -> 9344 bytes .../tlpkg/tlperl/site/lib/Tk/demos/images/ned.xpm | 69 + .../tlperl/site/lib/Tk/demos/images/noletters | 27 + .../tlperl/site/lib/Tk/demos/images/page.icon | 16 + .../tlperl/site/lib/Tk/demos/images/page.mask | 16 + .../tlpkg/tlperl/site/lib/Tk/demos/images/pattern | 6 + .../tlperl/site/lib/Tk/demos/images/teapot.ppm | 31 + .../tlperl/site/lib/Tk/demos/widget_lib/Ball.pm | 144 + .../tlperl/site/lib/Tk/demos/widget_lib/HList.pl | 65 + .../tlperl/site/lib/Tk/demos/widget_lib/HList2.pl | 124 + .../tlperl/site/lib/Tk/demos/widget_lib/Plot.pm | 199 + .../site/lib/Tk/demos/widget_lib/WidgetDemo.pm | 130 + .../tlperl/site/lib/Tk/demos/widget_lib/arrows.pl | 242 + .../tlperl/site/lib/Tk/demos/widget_lib/balloon.pl | 168 + .../tlperl/site/lib/Tk/demos/widget_lib/bind.pl | 65 + .../tlperl/site/lib/Tk/demos/widget_lib/bitmaps.pl | 44 + .../tlperl/site/lib/Tk/demos/widget_lib/bounce.pl | 274 + .../site/lib/Tk/demos/widget_lib/browseentry.pl | 34 + .../site/lib/Tk/demos/widget_lib/browseentry2.pl | 39 + .../tlperl/site/lib/Tk/demos/widget_lib/button.pl | 28 + .../tlperl/site/lib/Tk/demos/widget_lib/check.pl | 44 + .../site/lib/Tk/demos/widget_lib/choosedir.pl | 39 + .../tlperl/site/lib/Tk/demos/widget_lib/clrpick.pl | 45 + .../tlperl/site/lib/Tk/demos/widget_lib/colors.pl | 85 + .../tlperl/site/lib/Tk/demos/widget_lib/cscroll.pl | 86 + .../tlperl/site/lib/Tk/demos/widget_lib/ctext.pl | 170 + .../tlperl/site/lib/Tk/demos/widget_lib/dialog1.pl | 33 + .../tlperl/site/lib/Tk/demos/widget_lib/dialog2.pl | 33 + .../tlperl/site/lib/Tk/demos/widget_lib/dirtree.pl | 7 + .../tlperl/site/lib/Tk/demos/widget_lib/entry1.pl | 28 + .../tlperl/site/lib/Tk/demos/widget_lib/entry2.pl | 33 + .../tlperl/site/lib/Tk/demos/widget_lib/entry3.pl | 199 + .../tlperl/site/lib/Tk/demos/widget_lib/filebox.pl | 106 + .../tlperl/site/lib/Tk/demos/widget_lib/floor.pl | 1324 + .../tlperl/site/lib/Tk/demos/widget_lib/form.pl | 31 + .../site/lib/Tk/demos/widget_lib/form_mgr.pl | 21 + .../tlperl/site/lib/Tk/demos/widget_lib/hello.pl | 51 + .../tlperl/site/lib/Tk/demos/widget_lib/hscale.pl | 48 + .../tlperl/site/lib/Tk/demos/widget_lib/icon.pl | 64 + .../tlperl/site/lib/Tk/demos/widget_lib/image1.pl | 28 + .../tlperl/site/lib/Tk/demos/widget_lib/image2.pl | 104 + .../tlperl/site/lib/Tk/demos/widget_lib/items.pl | 358 + .../tlperl/site/lib/Tk/demos/widget_lib/keysyms.pl | 20 + .../site/lib/Tk/demos/widget_lib/labelframe.pl | 74 + .../tlperl/site/lib/Tk/demos/widget_lib/labels.pl | 43 + .../site/lib/Tk/demos/widget_lib/labframe.pl | 13 + .../tlperl/site/lib/Tk/demos/widget_lib/mega.pl | 135 + .../tlperl/site/lib/Tk/demos/widget_lib/menbut.pl | 122 + .../tlperl/site/lib/Tk/demos/widget_lib/menus.pl | 196 + .../tlperl/site/lib/Tk/demos/widget_lib/menus2.pl | 216 + .../tlperl/site/lib/Tk/demos/widget_lib/msgBox.pl | 82 + .../site/lib/Tk/demos/widget_lib/notebook.pl | 59 + .../tlperl/site/lib/Tk/demos/widget_lib/paned1.pl | 26 + .../tlperl/site/lib/Tk/demos/widget_lib/paned2.pl | 65 + .../tlperl/site/lib/Tk/demos/widget_lib/photo1.pl | 30 + .../tlperl/site/lib/Tk/demos/widget_lib/photo2.pl | 156 + .../tlperl/site/lib/Tk/demos/widget_lib/plot.pl | 28 + .../site/lib/Tk/demos/widget_lib/progress.pl | 46 + .../tlperl/site/lib/Tk/demos/widget_lib/puzzle.pl | 86 + .../tlperl/site/lib/Tk/demos/widget_lib/radio.pl | 78 + .../tlperl/site/lib/Tk/demos/widget_lib/ruler.pl | 146 + .../tlperl/site/lib/Tk/demos/widget_lib/sayings.pl | 48 + .../tlperl/site/lib/Tk/demos/widget_lib/search.pl | 177 + .../site/lib/Tk/demos/widget_lib/showVars.pl | 37 + .../tlperl/site/lib/Tk/demos/widget_lib/slide.pl | 178 + .../tlperl/site/lib/Tk/demos/widget_lib/spin.pl | 36 + .../tlperl/site/lib/Tk/demos/widget_lib/states.pl | 28 + .../tlperl/site/lib/Tk/demos/widget_lib/style.pl | 154 + .../tlperl/site/lib/Tk/demos/widget_lib/texts.pl | 71 + .../tlperl/site/lib/Tk/demos/widget_lib/trace1.pl | 49 + .../tlperl/site/lib/Tk/demos/widget_lib/trace2.pl | 188 + .../site/lib/Tk/demos/widget_lib/transtile.pl | 113 + .../tlperl/site/lib/Tk/demos/widget_lib/twind.pl | 186 + .../site/lib/Tk/demos/widget_lib/unicodeout.pl | 64 + .../site/lib/Tk/demos/widget_lib/virtevents1.pl | 59 + .../tlperl/site/lib/Tk/demos/widget_lib/vscale.pl | 48 + .../tlpkg/tlperl/site/lib/Tk/demos/widtrib/Gedi.pl | 429 + .../tlperl/site/lib/Tk/demos/widtrib/TEMPLATE.pl | 92 + .../tlperl/site/lib/Tk/demos/widtrib/Tiler.pl | 15 + .../tlpkg/tlperl/site/lib/Tk/demos/widtrib/all.pl | 331 + .../tlperl/site/lib/Tk/demos/widtrib/cursor.pl | 65 + .../site/lib/Tk/demos/widtrib/lib/npuz/Xcamel.npuz | Bin 0 -> 26699 bytes .../tlpkg/tlperl/site/lib/Tk/demos/widtrib/npuz.pl | 226 + .../tlpkg/tlperl/site/lib/Tk/demos/widtrib/plop.pl | 381 + Master/tlpkg/tlperl/site/lib/Tk/event.pod | 417 + Master/tlpkg/tlperl/site/lib/Tk/exit.pod | 42 + Master/tlpkg/tlperl/site/lib/Tk/file.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/file.xpm | 18 + Master/tlpkg/tlperl/site/lib/Tk/fileevent.pod | 112 + Master/tlpkg/tlperl/site/lib/Tk/focus.pod | 166 + Master/tlpkg/tlperl/site/lib/Tk/folder.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/folder.xpm | 21 + Master/tlpkg/tlperl/site/lib/Tk/form.pod | 397 + Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod | 182 + Master/tlpkg/tlperl/site/lib/Tk/grab.pod | 140 + Master/tlpkg/tlperl/site/lib/Tk/grid.pod | 409 + Master/tlpkg/tlperl/site/lib/Tk/icon.gif | Bin 0 -> 1924 bytes Master/tlpkg/tlperl/site/lib/Tk/install.pm | 37 + Master/tlpkg/tlperl/site/lib/Tk/license.terms | 35 + Master/tlpkg/tlperl/site/lib/Tk/mega.pod | 423 + Master/tlpkg/tlperl/site/lib/Tk/messageBox.pod | 67 + Master/tlpkg/tlperl/site/lib/Tk/openfile.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/openfolder.xbm | 5 + Master/tlpkg/tlperl/site/lib/Tk/openfolder.xpm | 21 + Master/tlpkg/tlperl/site/lib/Tk/option.pod | 217 + Master/tlpkg/tlperl/site/lib/Tk/options.pod | 787 + Master/tlpkg/tlperl/site/lib/Tk/overview.pod | 138 + Master/tlpkg/tlperl/site/lib/Tk/pTk.pod | 550 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.h | 202 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.m | 192 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.t | 217 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Tcl-pTk | 260 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.h | 151 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.m | 661 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.t | 657 + Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib_f.h | 14 + .../tlpkg/tlperl/site/lib/Tk/pTk/compat/limits.h | 22 + .../tlpkg/tlperl/site/lib/Tk/pTk/compat/stdlib.h | 45 + .../tlpkg/tlperl/site/lib/Tk/pTk/compat/unistd.h | 87 + Master/tlpkg/tlperl/site/lib/Tk/pTk/default.h | 36 + Master/tlpkg/tlperl/site/lib/Tk/pTk/img.h | 41 + Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.h | 75 + Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.m | 62 + Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.t | 93 + Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/ks_names.h | 925 + Master/tlpkg/tlperl/site/lib/Tk/pTk/mkVFunc | 433 + Master/tlpkg/tlperl/site/lib/Tk/pTk/moredefs.h | 131 + Master/tlpkg/tlperl/site/lib/Tk/pTk/port.h | 32 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tcl.h | 2411 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.h | 4143 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.m | 538 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.t | 675 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclIntDecls.h | 1324 + .../tlpkg/tlperl/site/lib/Tk/pTk/tclIntPlatDecls.h | 585 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclMath.h | 27 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclPlatDecls.h | 197 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tclWinInt.h | 145 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.h | 512 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.m | 126 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.t | 170 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixBitmaps.h | 618 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixDef.h | 173 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixForm.h | 143 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixGrData.h | 88 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixGrid.h | 458 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixHList.h | 323 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.h | 134 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.m | 34 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.t | 49 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.h | 886 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.m | 171 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.t | 249 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixPort.h | 110 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixTList.h | 148 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixWinInt.h | 23 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tixWinPort.h | 40 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tix_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.h | 1857 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.m | 94 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.t | 151 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tk3d.h | 102 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkButton.h | 320 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkCanvas.h | 334 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkCanvases.h | 81 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkColor.h | 89 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkConfig.h | 15 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.h | 2277 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.m | 870 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.t | 1158 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.h | 122 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.m | 274 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.t | 304 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkFileFilter.h | 92 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkFont.h | 226 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.h | 36 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.m | 55 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.t | 66 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInitScript.h | 58 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.h | 1200 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.m | 125 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.t | 182 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.h | 1572 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.m | 466 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.t | 642 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls_f.h | 14 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.h | 1227 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.m | 474 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.t | 845 + .../tlperl/site/lib/Tk/pTk/tkIntPlatDecls_f.h | 14 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.h | 2436 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.m | 446 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.t | 1521 + .../tlperl/site/lib/Tk/pTk/tkIntXlibDecls_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkMenu.h | 588 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkMenubutton.h | 240 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.h | 17 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.m | 26 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.t | 26 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.h | 300 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.m | 114 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.t | 190 + .../tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls_f.h | 15 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPort.h | 53 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkScale.h | 257 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkScrollbar.h | 209 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkSelect.h | 187 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkText.h | 927 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkUndo.h | 90 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkVMacro.h | 69 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWin.h | 60 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinDefault.h | 525 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinInt.h | 211 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinPort.h | 156 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tkXrm.h | 12 + Master/tlpkg/tlperl/site/lib/Tk/pTk/tk_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/pTk/xbytes.h | 58 + Master/tlpkg/tlperl/site/lib/Tk/pack.pod | 324 + Master/tlpkg/tlperl/site/lib/Tk/palette.pod | 89 + Master/tlpkg/tlperl/site/lib/Tk/place.pod | 283 + Master/tlpkg/tlperl/site/lib/Tk/prolog.ps | 284 + Master/tlpkg/tlperl/site/lib/Tk/selection.pod | 159 + Master/tlpkg/tlperl/site/lib/Tk/send.pod | 118 + Master/tlpkg/tlperl/site/lib/Tk/srcfile.xpm | 18 + Master/tlpkg/tlperl/site/lib/Tk/textfile.xpm | 18 + Master/tlpkg/tlperl/site/lib/Tk/tixWm.pod | 73 + Master/tlpkg/tlperl/site/lib/Tk/tkGlue.def | 130 + Master/tlpkg/tlperl/site/lib/Tk/tkGlue.h | 79 + Master/tlpkg/tlperl/site/lib/Tk/tkGlue.m | 74 + Master/tlpkg/tlperl/site/lib/Tk/tkGlue.t | 70 + Master/tlpkg/tlperl/site/lib/Tk/tkGlue_f.h | 14 + Master/tlpkg/tlperl/site/lib/Tk/tkvars.pod | 107 + Master/tlpkg/tlperl/site/lib/Tk/tranicon.gif | Bin 0 -> 1718 bytes Master/tlpkg/tlperl/site/lib/Tk/typemap | 96 + Master/tlpkg/tlperl/site/lib/Tk/vtab.def | 90 + Master/tlpkg/tlperl/site/lib/Tk/widgets.pm | 20 + Master/tlpkg/tlperl/site/lib/Tk/widgets.pod | 20 + Master/tlpkg/tlperl/site/lib/Tk/win.xbm | 6 + Master/tlpkg/tlperl/site/lib/Tk/winfolder.xpm | 39 + Master/tlpkg/tlperl/site/lib/Tk/wintext.xpm | 42 + Master/tlpkg/tlperl/site/lib/URI.pm | 1161 + Master/tlpkg/tlperl/site/lib/URI/Escape.pm | 220 + Master/tlpkg/tlperl/site/lib/URI/Heuristic.pm | 253 + Master/tlpkg/tlperl/site/lib/URI/IRI.pm | 48 + Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm | 208 + Master/tlpkg/tlperl/site/lib/URI/Split.pm | 98 + Master/tlpkg/tlperl/site/lib/URI/URL.pm | 303 + Master/tlpkg/tlperl/site/lib/URI/WithBase.pm | 174 + Master/tlpkg/tlperl/site/lib/URI/_foreign.pm | 11 + Master/tlpkg/tlperl/site/lib/URI/_generic.pm | 257 + Master/tlpkg/tlperl/site/lib/URI/_idna.pm | 92 + Master/tlpkg/tlperl/site/lib/URI/_ldap.pm | 141 + Master/tlpkg/tlperl/site/lib/URI/_login.pm | 14 + Master/tlpkg/tlperl/site/lib/URI/_punycode.pm | 204 + Master/tlpkg/tlperl/site/lib/URI/_query.pm | 98 + Master/tlpkg/tlperl/site/lib/URI/_segment.pm | 25 + Master/tlpkg/tlperl/site/lib/URI/_server.pm | 167 + Master/tlpkg/tlperl/site/lib/URI/_userpass.pm | 56 + Master/tlpkg/tlperl/site/lib/URI/data.pm | 143 + Master/tlpkg/tlperl/site/lib/URI/file.pm | 327 + Master/tlpkg/tlperl/site/lib/URI/file/Base.pm | 85 + Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm | 28 + Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm | 122 + Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm | 33 + Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm | 21 + Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm | 59 + Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm | 88 + Master/tlpkg/tlperl/site/lib/URI/ftp.pm | 47 + Master/tlpkg/tlperl/site/lib/URI/gopher.pm | 98 + Master/tlpkg/tlperl/site/lib/URI/http.pm | 28 + Master/tlpkg/tlperl/site/lib/URI/https.pm | 15 + Master/tlpkg/tlperl/site/lib/URI/ldap.pm | 121 + Master/tlpkg/tlperl/site/lib/URI/ldapi.pm | 30 + Master/tlpkg/tlperl/site/lib/URI/ldaps.pm | 15 + Master/tlpkg/tlperl/site/lib/URI/mailto.pm | 74 + Master/tlpkg/tlperl/site/lib/URI/mms.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/news.pm | 72 + Master/tlpkg/tlperl/site/lib/URI/nntp.pm | 11 + Master/tlpkg/tlperl/site/lib/URI/pop.pm | 72 + Master/tlpkg/tlperl/site/lib/URI/rlogin.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/rsync.pm | 15 + Master/tlpkg/tlperl/site/lib/URI/rtsp.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/rtspu.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/sftp.pm | 11 + Master/tlpkg/tlperl/site/lib/URI/sip.pm | 86 + Master/tlpkg/tlperl/site/lib/URI/sips.pm | 15 + Master/tlpkg/tlperl/site/lib/URI/snews.pm | 15 + Master/tlpkg/tlperl/site/lib/URI/ssh.pm | 17 + Master/tlpkg/tlperl/site/lib/URI/telnet.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/tn3270.pm | 13 + Master/tlpkg/tlperl/site/lib/URI/urn.pm | 106 + Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm | 103 + Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm | 21 + Master/tlpkg/tlperl/site/lib/WWW/RobotRules.pm | 453 + .../tlperl/site/lib/WWW/RobotRules/AnyDBM_File.pm | 170 + Master/tlpkg/tlperl/site/lib/Win32/API.pm | 1474 + Master/tlpkg/tlperl/site/lib/Win32/API/Callback.pm | 575 + .../site/lib/Win32/API/Callback/IATPatch.pod | 181 + Master/tlpkg/tlperl/site/lib/Win32/API/Struct.pm | 755 + Master/tlpkg/tlperl/site/lib/Win32/API/Type.pm | 590 + Master/tlpkg/tlperl/site/lib/Win32/Console.pm | 1463 + Master/tlpkg/tlperl/site/lib/Win32/OLE.pm | 968 + Master/tlpkg/tlperl/site/lib/Win32/OLE/Const.pm | 201 + Master/tlpkg/tlperl/site/lib/Win32/OLE/Enum.pm | 95 + Master/tlpkg/tlperl/site/lib/Win32/OLE/Lite.pm | 224 + Master/tlpkg/tlperl/site/lib/Win32/OLE/NEWS.pod | 380 + Master/tlpkg/tlperl/site/lib/Win32/OLE/NLS.pm | 968 + Master/tlpkg/tlperl/site/lib/Win32/OLE/TPJ.pod | 798 + Master/tlpkg/tlperl/site/lib/Win32/OLE/TypeInfo.pm | 389 + Master/tlpkg/tlperl/site/lib/Win32/OLE/Variant.pm | 577 + Master/tlpkg/tlperl/site/lib/Win32/Process.pm | 224 + Master/tlpkg/tlperl/site/lib/Win32/Shortcut.pm | 752 + Master/tlpkg/tlperl/site/lib/Win32/TieRegistry.pm | 3803 + Master/tlpkg/tlperl/site/lib/Win32/WinError.pm | 1017 + Master/tlpkg/tlperl/site/lib/Win32API/Registry.pm | 1779 + .../tlperl/site/lib/Win32API/Registry/cRegistry.pc | 87 + .../tlperl/site/lib/auto/Date/Parse/.packlist | 37 + .../tlperl/site/lib/auto/Digest/SHA1/.packlist | 2 + .../tlperl/site/lib/auto/Digest/SHA1/SHA1.dll | Bin 0 -> 25088 bytes .../tlperl/site/lib/auto/Encode/Locale/.packlist | 1 + .../tlperl/site/lib/auto/Encode/compat/.packlist | 4 + .../tlperl/site/lib/auto/File/Listing/.packlist | 1 + .../tlperl/site/lib/auto/File/Which/.packlist | 1 + .../tlperl/site/lib/auto/HTML/Parser/.packlist | 8 + .../tlperl/site/lib/auto/HTML/Parser/Parser.dll | Bin 0 -> 55808 bytes .../tlperl/site/lib/auto/HTML/Tagset/.packlist | 1 + .../tlperl/site/lib/auto/HTTP/Cookies/.packlist | 3 + .../tlperl/site/lib/auto/HTTP/Daemon/.packlist | 1 + .../tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist | 1 + .../tlperl/site/lib/auto/HTTP/Message/.packlist | 10 + .../tlperl/site/lib/auto/HTTP/Negotiate/.packlist | 1 + .../tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist | 1 + .../tlpkg/tlperl/site/lib/auto/IO/String/.packlist | 1 + Master/tlpkg/tlperl/site/lib/auto/LWP/.packlist | 33 + .../tlperl/site/lib/auto/LWP/MediaTypes/.packlist | 2 + .../tlperl/site/lib/auto/Math/Int64/.packlist | 5 + .../tlperl/site/lib/auto/Math/Int64/Int64.dll | Bin 0 -> 80896 bytes .../tlperl/site/lib/auto/Mozilla/CA/.packlist | 3 + .../tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist | 4 + Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist | 2 + .../tlpkg/tlperl/site/lib/auto/Socket/Socket.dll | Bin 0 -> 35840 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist | 644 + .../tlpkg/tlperl/site/lib/auto/Tk/CancelRepeat.al | 15 + .../tlperl/site/lib/auto/Tk/Canvas/Canvas.dll | Bin 0 -> 211968 bytes .../tlperl/site/lib/auto/Tk/Clipboard/autosplit.ix | 6 + .../site/lib/auto/Tk/Clipboard/getSelected.al | 15 + .../tlperl/site/lib/auto/Tk/Compound/Compound.dll | Bin 0 -> 27136 bytes .../tlperl/site/lib/auto/Tk/DirSelect/.packlist | 1 + .../lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll | Bin 0 -> 16896 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/EnterFocus.al | 27 + .../tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll | Bin 0 -> 53248 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/Error.al | 20 + .../tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll | Bin 0 -> 64512 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/FirstMenu.al | 21 + .../tlpkg/tlperl/site/lib/auto/Tk/FocusChildren.al | 35 + Master/tlpkg/tlperl/site/lib/auto/Tk/FocusOK.al | 36 + .../tlperl/site/lib/auto/Tk/Frame/AddScrollbars.al | 52 + .../tlperl/site/lib/auto/Tk/Frame/FindMenu.al | 22 + .../tlperl/site/lib/auto/Tk/Frame/autosplit.ix | 24 + .../tlperl/site/lib/auto/Tk/Frame/freeze_on_map.al | 18 + .../tlpkg/tlperl/site/lib/auto/Tk/Frame/label.al | 24 + .../tlperl/site/lib/auto/Tk/Frame/labelPack.al | 50 + .../tlperl/site/lib/auto/Tk/Frame/labelVariable.al | 27 + .../site/lib/auto/Tk/Frame/packscrollbars.al | 86 + .../tlperl/site/lib/auto/Tk/Frame/queuePack.al | 18 + .../tlpkg/tlperl/site/lib/auto/Tk/Frame/sbset.al | 15 + .../tlperl/site/lib/auto/Tk/Frame/scrollbars.al | 24 + .../tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll | Bin 0 -> 67072 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll | Bin 0 -> 16896 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/ImageNames.al | 13 + Master/tlpkg/tlperl/site/lib/auto/Tk/ImageTypes.al | 13 + Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll | Bin 0 -> 129024 bytes .../tlperl/site/lib/auto/Tk/Listbox/AutoScan.al | 49 + .../tlperl/site/lib/auto/Tk/Listbox/BeginExtend.al | 34 + .../tlperl/site/lib/auto/Tk/Listbox/BeginSelect.al | 46 + .../tlperl/site/lib/auto/Tk/Listbox/BeginToggle.al | 40 + .../site/lib/auto/Tk/Listbox/ButtonRelease_1.al | 16 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/CLEAR.al | 16 + .../tlperl/site/lib/auto/Tk/Listbox/Cancel.al | 42 + .../tlperl/site/lib/auto/Tk/Listbox/Cntrl_End.al | 19 + .../tlperl/site/lib/auto/Tk/Listbox/Cntrl_Home.al | 19 + .../site/lib/auto/Tk/Listbox/Cntrl_backslash.al | 19 + .../tlperl/site/lib/auto/Tk/Listbox/DELETE.al | 19 + .../tlperl/site/lib/auto/Tk/Listbox/DataExtend.al | 39 + .../tlperl/site/lib/auto/Tk/Listbox/EXISTS.al | 16 + .../tlperl/site/lib/auto/Tk/Listbox/EXTEND.al | 16 + .../site/lib/auto/Tk/Listbox/ExtendUpDown.al | 36 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/FETCH.al | 56 + .../tlperl/site/lib/auto/Tk/Listbox/FETCHSIZE.al | 16 + .../tlperl/site/lib/auto/Tk/Listbox/Listbox.dll | Bin 0 -> 40448 bytes .../tlperl/site/lib/auto/Tk/Listbox/Motion.al | 77 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/POP.al | 19 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/PUSH.al | 13 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/SHIFT.al | 19 + .../tlperl/site/lib/auto/Tk/Listbox/SPLICE.al | 84 + .../tlpkg/tlperl/site/lib/auto/Tk/Listbox/STORE.al | 80 + .../tlperl/site/lib/auto/Tk/Listbox/SelectAll.al | 32 + .../tlperl/site/lib/auto/Tk/Listbox/SetList.al | 16 + .../tlperl/site/lib/auto/Tk/Listbox/TIEARRAY.al | 15 + .../tlperl/site/lib/auto/Tk/Listbox/TIESCALAR.al | 15 + .../tlperl/site/lib/auto/Tk/Listbox/UNSHIFT.al | 16 + .../tlperl/site/lib/auto/Tk/Listbox/UpDown.al | 41 + .../tlperl/site/lib/auto/Tk/Listbox/autosplit.ix | 56 + .../site/lib/auto/Tk/Listbox/clipboardPaste.al | 21 + .../site/lib/auto/Tk/Listbox/deleteSelected.al | 18 + .../tlperl/site/lib/auto/Tk/Listbox/getSelected.al | 24 + .../tlperl/site/lib/auto/Tk/Listbox/xyIndex.al | 29 + .../site/lib/auto/Tk/Menubutton/Menubutton.dll | Bin 0 -> 28160 bytes .../tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll | Bin 0 -> 30720 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll | Bin 0 -> 218112 bytes .../tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll | Bin 0 -> 34304 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/Receive.al | 23 + Master/tlpkg/tlperl/site/lib/auto/Tk/RepeatId.al | 16 + .../tlperl/site/lib/auto/Tk/Scale/Activate.al | 33 + .../tlperl/site/lib/auto/Tk/Scale/ButtonDown.al | 40 + .../tlperl/site/lib/auto/Tk/Scale/ButtonUp.al | 16 + .../tlperl/site/lib/auto/Tk/Scale/ControlPress.al | 31 + Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Drag.al | 29 + .../tlpkg/tlperl/site/lib/auto/Tk/Scale/EndDrag.al | 23 + .../tlpkg/tlperl/site/lib/auto/Tk/Scale/Enter.al | 19 + .../tlperl/site/lib/auto/Tk/Scale/Increment.al | 61 + .../tlpkg/tlperl/site/lib/auto/Tk/Scale/Leave.al | 15 + .../tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll | Bin 0 -> 31744 bytes .../tlperl/site/lib/auto/Tk/Scale/autosplit.ix | 22 + .../site/lib/auto/Tk/Scrollbar/ButtonDown.al | 55 + .../tlperl/site/lib/auto/Tk/Scrollbar/ButtonUp.al | 26 + .../tlperl/site/lib/auto/Tk/Scrollbar/Drag.al | 43 + .../tlperl/site/lib/auto/Tk/Scrollbar/EndDrag.al | 28 + .../tlperl/site/lib/auto/Tk/Scrollbar/Enter.al | 21 + .../tlperl/site/lib/auto/Tk/Scrollbar/Leave.al | 18 + .../tlperl/site/lib/auto/Tk/Scrollbar/Motion.al | 15 + .../site/lib/auto/Tk/Scrollbar/ScrlByPages.al | 38 + .../site/lib/auto/Tk/Scrollbar/ScrlByUnits.al | 37 + .../tlperl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al | 35 + .../site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al | 32 + .../site/lib/auto/Tk/Scrollbar/Scrollbar.dll | Bin 0 -> 28672 bytes .../tlperl/site/lib/auto/Tk/Scrollbar/Select.al | 59 + .../tlperl/site/lib/auto/Tk/Scrollbar/StartDrag.al | 38 + .../tlperl/site/lib/auto/Tk/Scrollbar/autosplit.ix | 30 + Master/tlpkg/tlperl/site/lib/auto/Tk/Selection.al | 18 + .../tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll | Bin 0 -> 37888 bytes .../tlpkg/tlperl/site/lib/auto/Tk/Table/Create.al | 17 + Master/tlpkg/tlperl/site/lib/auto/Tk/Table/Posn.al | 15 + .../tlperl/site/lib/auto/Tk/Table/autosplit.ix | 14 + Master/tlpkg/tlperl/site/lib/auto/Tk/Table/see.al | 46 + .../tlperl/site/lib/auto/Tk/Table/totalColumns.al | 13 + .../tlperl/site/lib/auto/Tk/Table/totalRows.al | 13 + Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll | Bin 0 -> 131072 bytes .../tlperl/site/lib/auto/Tk/Text/autosplit.ix | 3 + .../tlperl/site/lib/auto/Tk/TextEdit/autosplit.ix | 3 + .../tlperl/site/lib/auto/Tk/TextUndo/autosplit.ix | 3 + .../tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll | Bin 0 -> 84992 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll | Bin 0 -> 944640 bytes .../tlperl/site/lib/auto/Tk/Toplevel/FG_BindIn.al | 19 + .../tlperl/site/lib/auto/Tk/Toplevel/FG_BindOut.al | 20 + .../tlperl/site/lib/auto/Tk/Toplevel/FG_Create.al | 56 + .../tlperl/site/lib/auto/Tk/Toplevel/FG_Destroy.al | 29 + .../tlperl/site/lib/auto/Tk/Toplevel/FG_In.al | 24 + .../tlperl/site/lib/auto/Tk/Toplevel/FG_Out.al | 32 + .../tlperl/site/lib/auto/Tk/Toplevel/autosplit.ix | 10 + .../tlperl/site/lib/auto/Tk/TraverseToMenu.al | 27 + .../tlperl/site/lib/auto/Tk/Widget/ASkludge.al | 30 + .../site/lib/auto/Tk/Widget/AltKeyInDialog.al | 20 + .../tlperl/site/lib/auto/Tk/Widget/AmpWidget.al | 36 + .../site/lib/auto/Tk/Widget/FindAltKeyTarget.al | 38 + .../tlperl/site/lib/auto/Tk/Widget/MasterMenu.al | 14 + .../site/lib/auto/Tk/Widget/RestoreFocusGrab.al | 59 + .../tlperl/site/lib/auto/Tk/Widget/SetAmpText.al | 19 + .../tlperl/site/lib/auto/Tk/Widget/SetFocusGrab.al | 38 + .../site/lib/auto/Tk/Widget/UnderlineAmpersand.al | 29 + .../tlperl/site/lib/auto/Tk/Widget/autosplit.ix | 27 + .../tlperl/site/lib/auto/Tk/Widget/bindDump.al | 87 + .../site/lib/auto/Tk/Widget/clipboardKeysyms.al | 51 + .../tlperl/site/lib/auto/Tk/Widget/pathname.al | 15 + .../tlperl/site/lib/auto/Tk/Wm/AnchorAdjust.al | 17 + .../tlpkg/tlperl/site/lib/auto/Tk/Wm/FullScreen.al | 29 + Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/Popup.al | 50 + Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/Post.al | 20 + .../tlpkg/tlperl/site/lib/auto/Tk/Wm/autosplit.ix | 14 + .../tlperl/site/lib/auto/Tk/Wm/iconposition.al | 24 + Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll | Bin 0 -> 30720 bytes .../tlpkg/tlperl/site/lib/auto/Tk/X/autosplit.ix | 3 + Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll | Bin 0 -> 37376 bytes Master/tlpkg/tlperl/site/lib/auto/Tk/autosplit.ix | 49 + Master/tlpkg/tlperl/site/lib/auto/Tk/break.al | 13 + .../tlperl/site/lib/auto/Tk/focusFollowsMouse.al | 14 + Master/tlpkg/tlperl/site/lib/auto/Tk/focusNext.al | 18 + Master/tlpkg/tlperl/site/lib/auto/Tk/focusPrev.al | 28 + .../tlpkg/tlperl/site/lib/auto/Tk/getEncoding.al | 43 + .../tlpkg/tlperl/site/lib/auto/Tk/getNextFocus.al | 44 + .../tlpkg/tlperl/site/lib/auto/Tk/getPrevFocus.al | 54 + Master/tlpkg/tlperl/site/lib/auto/Tk/interps.al | 14 + Master/tlpkg/tlperl/site/lib/auto/Tk/lsearch.al | 19 + .../tlpkg/tlperl/site/lib/auto/Tk/pTk/extralibs.ld | 1 + Master/tlpkg/tlperl/site/lib/auto/Tk/tabFocus.al | 13 + .../tlpkg/tlperl/site/lib/auto/Tk/updateWidgets.al | 17 + Master/tlpkg/tlperl/site/lib/auto/URI/.packlist | 53 + .../tlperl/site/lib/auto/WWW/RobotRules/.packlist | 2 + .../tlpkg/tlperl/site/lib/auto/Win32/API/.packlist | 7 + .../tlpkg/tlperl/site/lib/auto/Win32/API/API.dll | Bin 0 -> 32768 bytes .../site/lib/auto/Win32/API/Callback/Callback.dll | Bin 0 -> 24576 bytes .../tlperl/site/lib/auto/Win32/Console/.packlist | 2 + .../tlperl/site/lib/auto/Win32/Console/Console.dll | Bin 0 -> 59392 bytes .../tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist | 11 + .../tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll | Bin 0 -> 149504 bytes .../tlperl/site/lib/auto/Win32/Process/.packlist | 2 + .../tlperl/site/lib/auto/Win32/Process/Process.dll | Bin 0 -> 31232 bytes .../tlperl/site/lib/auto/Win32/Shortcut/.packlist | 2 + .../site/lib/auto/Win32/Shortcut/Shortcut.dll | Bin 0 -> 55808 bytes .../site/lib/auto/Win32/TieRegistry/.packlist | 2 + .../site/lib/auto/Win32API/Registry/.packlist | 3 + .../site/lib/auto/Win32API/Registry/Registry.dll | Bin 0 -> 223744 bytes Master/tlpkg/tlperl/site/lib/lwpcook.pod | 311 + Master/tlpkg/tlperl/site/lib/lwptut.pod | 839 + 2828 files changed, 402576 insertions(+), 297683 deletions(-) delete mode 100755 Master/tlpkg/tlperl/bin/a2p.exe delete mode 100755 Master/tlpkg/tlperl/bin/perl5.20.2.exe create mode 100755 Master/tlpkg/tlperl/bin/perl5.22.1.exe delete mode 100755 Master/tlpkg/tlperl/bin/perl520.dll create mode 100755 Master/tlpkg/tlperl/bin/perl522.dll create mode 100644 Master/tlpkg/tlperl/lib/B/Op_private.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Apache.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Carp.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Cookie.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Fast.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Pretty.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Push.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Switch.pm delete mode 100644 Master/tlpkg/tlperl/lib/CGI/Util.pm create mode 100644 Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h delete mode 100644 Master/tlpkg/tlperl/lib/CORE/libperl520.a create mode 100644 Master/tlpkg/tlperl/lib/CORE/libperl522.a create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/History/Meta_1_0.pod create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/History/Meta_1_1.pod create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/History/Meta_1_2.pod create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/History/Meta_1_3.pod create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/History/Meta_1_4.pod create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/Merge.pm create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Plugin.pm create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Plugin/Specfile.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Format.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Afar.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Amharic.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Austrian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Brazilian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Bulgarian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Chinese.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Chinese_GB.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Czech.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Danish.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Dutch.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/English.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Finnish.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/French.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Gedeo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/German.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Greek.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Hungarian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Icelandic.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Italian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Norwegian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Oromo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Romanian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Russian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Russian_cp1251.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Russian_koi8r.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Sidama.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Somali.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Spanish.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Swedish.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Tigrinya.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/TigrinyaEritrean.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/TigrinyaEthiopian.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Language/Turkish.pm delete mode 100644 Master/tlpkg/tlperl/lib/Date/Parse.pm delete mode 100644 Master/tlpkg/tlperl/lib/Digest/SHA1.pm delete mode 100644 Master/tlpkg/tlperl/lib/Encode/Locale.pm delete mode 100644 Master/tlpkg/tlperl/lib/Encode/compat.pm delete mode 100644 Master/tlpkg/tlperl/lib/Encode/compat/5006001.pm delete mode 100644 Master/tlpkg/tlperl/lib/Encode/compat/Alias.pm delete mode 100644 Master/tlpkg/tlperl/lib/Encode/compat/common.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Locale.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/version.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/version/regex.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/version/vpp.pm delete mode 100644 Master/tlpkg/tlperl/lib/File/Listing.pm delete mode 100644 Master/tlpkg/tlperl/lib/File/Which.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/Entities.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/Filter.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/HeadParser.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/LinkExtor.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/Parser.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/PullParser.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/Tagset.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTML/TokeParser.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Config.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Cookies.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Cookies/Microsoft.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Cookies/Netscape.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Daemon.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Date.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Headers.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Headers/Auth.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Headers/ETag.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Headers/Util.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Message.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Negotiate.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Request.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Request/Common.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Response.pm delete mode 100644 Master/tlpkg/tlperl/lib/HTTP/Status.pm delete mode 100755 Master/tlpkg/tlperl/lib/IO/HTML.pm delete mode 100644 Master/tlpkg/tlperl/lib/IO/String.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Authen/Basic.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Authen/Digest.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Authen/Ntlm.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/ConnCache.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Debug.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/DebugFile.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/MediaTypes.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/MemberMixin.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/GHTTP.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/cpan.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/data.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/file.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/ftp.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/gopher.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/http.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/loopback.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/mailto.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/nntp.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Protocol/nogo.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/RobotUA.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/Simple.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/UserAgent.pm delete mode 100644 Master/tlpkg/tlperl/lib/LWP/media.types delete mode 100755 Master/tlpkg/tlperl/lib/Math/Int64.pm delete mode 100755 Master/tlpkg/tlperl/lib/Math/Int64/die_on_overflow.pm delete mode 100755 Master/tlpkg/tlperl/lib/Math/Int64/native_if_available.pm delete mode 100755 Master/tlpkg/tlperl/lib/Math/UInt64.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/API.pod delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Authoring.pod delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Base.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Bundling.pod delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Compat.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Config.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/ConfigData.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Notes.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/Default.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/MacOS.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/Windows.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/aix.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/cygwin.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/darwin.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Platform/os2.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/Version.pm delete mode 100644 Master/tlpkg/tlperl/lib/Module/Build/YAML.pm delete mode 100644 Master/tlpkg/tlperl/lib/Mozilla/CA.pm delete mode 100644 Master/tlpkg/tlperl/lib/Mozilla/CA/cacert.pem delete mode 100644 Master/tlpkg/tlperl/lib/Mozilla/mk-ca-bundle.pl delete mode 100644 Master/tlpkg/tlperl/lib/Net/HTTP.pm delete mode 100644 Master/tlpkg/tlperl/lib/Net/HTTP/Methods.pm delete mode 100644 Master/tlpkg/tlperl/lib/Net/HTTP/NB.pm delete mode 100644 Master/tlpkg/tlperl/lib/Net/HTTPS.pm delete mode 100755 Master/tlpkg/tlperl/lib/OLE.pm delete mode 100644 Master/tlpkg/tlperl/lib/Package/Constants.pm create mode 100644 Master/tlpkg/tlperl/lib/Sub/Util.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/Builder/IO/Scalar.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/Tester.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm create mode 100644 Master/tlpkg/tlperl/lib/Test/use/ok.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tie/Registry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tie/Watch.pm delete mode 100644 Master/tlpkg/tlperl/lib/Time/Zone.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/804delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Adjuster.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Adjuster.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/After.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Animation.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Animation.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Balloon.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Balloon.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Bitmap.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Bitmap.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Button.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Button.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Camel.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Canvas.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Canvas.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Checkbutton.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Clipboard.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Clipboard.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/CmdLine.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/CmdLine.pod delete mode 100755 Master/tlpkg/tlperl/lib/Tk/ColorDialog.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ColorEditor.pod delete mode 100755 Master/tlpkg/tlperl/lib/Tk/ColorSelect.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Compound.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Compound.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Config.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ConfigSpecs.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Configure.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Credits delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DItem.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Derived.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Derived.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Dialog.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Dialog.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DialogBox.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DialogBox.pod delete mode 100755 Master/tlpkg/tlperl/lib/Tk/DirSelect.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DirTree.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DirTree.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Dirlist.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DropSite.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DropSite.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/English.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Entry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Entry.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Error.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Event.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Event/IO.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Eventloop.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/FBox.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/FBox.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/FileSelect.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/FileSelect.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Font.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Font.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Frame.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Frame.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/HList.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/HList.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/IO.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/IO.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/IconList.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/IconList.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Image.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Image.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/InputO.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Internals.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/JPEG.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/LabEntry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/LabFrame.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/LabFrame.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/LabRadio.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Label.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Label.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Labelframe.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Labelframe.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Listbox.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Listbox.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MMtry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MMutil.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MainWindow.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MainWindow.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menu.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menu.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menu/Item.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menubar.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menubutton.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Menubutton.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Message.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Message.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MsgBox.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/MsgBox.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Mwm.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/NBFrame.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/NoteBook.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/NoteBook.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Optionmenu.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/PNG.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Pane.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Panedwindow.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Photo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Photo.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Pixmap.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Pixmap.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Popup.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Pretty.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/README.Adjust delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ROText.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ROText.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Radiobutton.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Region.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Reindex.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Scale.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Scale.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Scrollbar.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Scrolled.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Spinbox.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Spinbox.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Stats.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Submethods.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Submethods.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TList.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TList.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Table.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Table.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tcl-perl.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Text.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Text.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TextEdit.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TextList.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TextUndo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TextUndo.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tiler.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tiler.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TixGrid.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TixGrid.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tk.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tk.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/TkXSUB.def delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Toplevel.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Toplevel.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Trace.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tree.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Tree.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/UserGuide.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Widget.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Widget.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/WidgetDemo.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Wm.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Wm.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/X.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/keysym.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11/license.terms delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11Font.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/X11Font.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Xcamel.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Xlib.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Xrm.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/Xrm.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/act_folder.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/act_folder.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/after.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/anim.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/balArrow.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/bind.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/bindtags.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/callbacks.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/chooseColor.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/chooseDirectory.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/composite.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/LabEnLabRad.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/QuitPB.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/QuitPBa.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/c.icon delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/cursor.cur delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/cursor.mask delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/cursor.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/dir.icon delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/dir.mask delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/earth.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/earthris.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/face delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/flagdown delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/flagup delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/grey.25 delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/grey.5 delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/letters delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/mickey.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/ned.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/noletters delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/page.icon delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/page.mask delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/pattern delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/images/teapot.ppm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/Ball.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/HList.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/HList2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/Plot.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/WidgetDemo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/arrows.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/balloon.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/bind.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/bitmaps.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/bounce.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/browseentry.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/browseentry2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/button.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/check.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/choosedir.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/clrpick.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/colors.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/cscroll.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/ctext.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/dialog1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/dialog2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/dirtree.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/entry1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/entry2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/entry3.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/filebox.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/floor.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/form.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/form_mgr.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/hello.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/hscale.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/icon.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/image1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/image2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/items.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/keysyms.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/labelframe.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/labels.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/labframe.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/mega.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/menbut.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/menus.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/menus2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/msgBox.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/notebook.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/paned1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/paned2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/photo1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/photo2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/plot.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/progress.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/puzzle.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/radio.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/ruler.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/sayings.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/search.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/showVars.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/slide.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/spin.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/states.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/style.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/texts.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/trace1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/trace2.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/transtile.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/twind.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/unicodeout.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/virtevents1.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widget_lib/vscale.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/Gedi.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/TEMPLATE.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/Tiler.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/all.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/cursor.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/lib/npuz/Xcamel.npuz delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/npuz.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/demos/widtrib/plop.pl delete mode 100644 Master/tlpkg/tlperl/lib/Tk/event.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/exit.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/file.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/file.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/fileevent.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/focus.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/folder.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/folder.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/form.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/getOpenFile.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/grab.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/grid.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/icon.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/install.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/license.terms delete mode 100644 Master/tlpkg/tlperl/lib/Tk/mega.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/messageBox.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/openfile.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/openfolder.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/openfolder.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/option.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/options.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/overview.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Lang.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Lang.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Lang.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Lang_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Tcl-pTk delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Xlib.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/Xlib_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/compat/limits.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/compat/stdlib.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/compat/unistd.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/default.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/img.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/imgInt.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/imgInt_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/ks_names.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/mkVFunc delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/moredefs.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/port.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tcl.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclIntDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclIntPlatDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclMath.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclPlatDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tclWinInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tix.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tix.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tix.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixBitmaps.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixDef.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixForm.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixGrData.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixHList.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixImgXpm_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixInt.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixInt_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixPort.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixTList.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixWinInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tixWinPort.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tix_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tk.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tk.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tk.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tk3d.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkButton.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkCanvas.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkCanvases.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkColor.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkConfig.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkEvent_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkFileFilter.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkFont.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkImgPhoto_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkInitScript.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkInt.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntPlatDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkIntXlibDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkInt_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkMenu.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkMenubutton.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkOption.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkOption_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkPlatDecls_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkPort.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkScale.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkScrollbar.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkSelect.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkText.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkUndo.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkVMacro.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkWin.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkWinDefault.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkWinInt.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkWinPort.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tkXrm.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/tk_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pTk/xbytes.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/pack.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/palette.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/place.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/prolog.ps delete mode 100644 Master/tlpkg/tlperl/lib/Tk/selection.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/send.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/srcfile.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/textfile.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tixWm.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkGlue.def delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkGlue.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkGlue.m delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkGlue.t delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tkvars.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/tranicon.gif delete mode 100644 Master/tlpkg/tlperl/lib/Tk/typemap delete mode 100644 Master/tlpkg/tlperl/lib/Tk/vtab.def delete mode 100644 Master/tlpkg/tlperl/lib/Tk/widgets.pm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/widgets.pod delete mode 100644 Master/tlpkg/tlperl/lib/Tk/win.xbm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/winfolder.xpm delete mode 100644 Master/tlpkg/tlperl/lib/Tk/wintext.xpm delete mode 100644 Master/tlpkg/tlperl/lib/URI.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/Escape.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/Heuristic.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/IRI.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/QueryParam.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/Split.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/URL.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/WithBase.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_foreign.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_generic.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_idna.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_ldap.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_login.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_punycode.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_query.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_segment.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_server.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/_userpass.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/data.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/Base.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/FAT.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/Mac.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/OS2.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/QNX.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/Unix.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/file/Win32.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/ftp.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/gopher.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/http.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/https.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/ldap.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/ldapi.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/ldaps.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/mailto.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/mms.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/news.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/nntp.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/pop.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/rlogin.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/rsync.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/rtsp.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/rtspu.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/sip.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/sips.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/snews.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/ssh.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/telnet.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/tn3270.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/urn.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/urn/isbn.pm delete mode 100644 Master/tlpkg/tlperl/lib/URI/urn/oid.pm delete mode 100644 Master/tlpkg/tlperl/lib/WWW/RobotRules.pm delete mode 100644 Master/tlpkg/tlperl/lib/WWW/RobotRules/AnyDBM_File.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API/Callback.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API/Callback/IATPatch.pod delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API/Struct.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API/Test.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/API/Type.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/Console.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/Const.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/Enum.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/Lite.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/NEWS.pod delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/NLS.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/TPJ.pod delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/TypeInfo.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/OLE/Variant.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/Shortcut.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32/WinError.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32API/Registry.pm delete mode 100644 Master/tlpkg/tlperl/lib/Win32API/Registry/cRegistry.pc delete mode 100644 Master/tlpkg/tlperl/lib/auto/Date/Parse/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Digest/SHA1/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Digest/SHA1/SHA1.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/Locale/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/compat/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/File/Listing/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/File/Which/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTML/Parser/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/HTML/Parser/Parser.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTML/Tagset/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTTP/Cookies/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTTP/Daemon/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTTP/Date/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTTP/Message/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/HTTP/Negotiate/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/IO/HTML/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/IO/String/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/LWP/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/LWP/MediaTypes/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Math/Int64/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Math/Int64/Int64.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Mozilla/CA/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Net/HTTP/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Socket/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/getSelected.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/DirSelect/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Error.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/AddScrollbars.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/freeze_on_map.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelVariable.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/packscrollbars.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginExtend.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginSelect.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginToggle.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/clipboardPaste.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/deleteSelected.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/getSelected.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Receive.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/StartDrag.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Selection.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/AltKeyInDialog.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/AmpWidget.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/FindAltKeyTarget.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/MasterMenu.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/RestoreFocusGrab.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/SetAmpText.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/SetFocusGrab.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/UnderlineAmpersand.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix delete mode 100755 Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/break.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/getNextFocus.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/getPrevFocus.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/interps.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/URI/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Unicode/Normalize/Normalize.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/WWW/RobotRules/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/API/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32/API/API.dll delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32/API/Callback/Callback.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/Console/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/OLE/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/TieRegistry/.packlist delete mode 100644 Master/tlpkg/tlperl/lib/auto/Win32API/Registry/.packlist delete mode 100755 Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.dll delete mode 100644 Master/tlpkg/tlperl/lib/auto/sdbm/extralibs.ld create mode 100644 Master/tlpkg/tlperl/lib/autodie/Scope/Guard.pm create mode 100644 Master/tlpkg/tlperl/lib/autodie/Scope/GuardStack.pm create mode 100644 Master/tlpkg/tlperl/lib/autodie/ScopeUtil.pm delete mode 100644 Master/tlpkg/tlperl/lib/inc/latest.pm delete mode 100644 Master/tlpkg/tlperl/lib/inc/latest/private.pm delete mode 100644 Master/tlpkg/tlperl/lib/lwpcook.pod delete mode 100644 Master/tlpkg/tlperl/lib/lwptut.pod create mode 100644 Master/tlpkg/tlperl/lib/meta_notation.pm create mode 100644 Master/tlpkg/tlperl/lib/ok.pm create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V70.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/In/7_0.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Jg/Sad.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Nv/300.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Nv/900.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/SpacePer.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/Title.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_XExtend.pl delete mode 100755 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_XRegula.pl delete mode 100755 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_XSpecia.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Dupl.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Gran.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hmng.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Copt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Dupl.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Gran.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Knda.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Limb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mlym.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mymr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phlp.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sind.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sinh.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Taml.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Telu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tirh.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Space/Y.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Format.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Afar.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Amharic.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Austrian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Brazilian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Bulgarian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Chinese.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Chinese_GB.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Czech.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Danish.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Dutch.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/English.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Finnish.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/French.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Gedeo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/German.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Greek.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Hungarian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Icelandic.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Italian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Norwegian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Oromo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Romanian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Russian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Russian_cp1251.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Russian_koi8r.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Sidama.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Somali.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Spanish.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Swedish.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Tigrinya.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/TigrinyaEritrean.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/TigrinyaEthiopian.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Language/Turkish.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Date/Parse.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Digest/SHA1.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Encode/Locale.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Encode/compat.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Encode/compat/5006001.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Encode/compat/Alias.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Encode/compat/common.pm create mode 100644 Master/tlpkg/tlperl/site/lib/File/Listing.pm create mode 100644 Master/tlpkg/tlperl/site/lib/File/Which.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/Entities.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/Filter.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/HeadParser.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/LinkExtor.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/Parser.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/PullParser.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/Tagset.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTML/TokeParser.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Config.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Cookies.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Microsoft.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Cookies/Netscape.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Daemon.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Date.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Message.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Negotiate.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Request.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Response.pm create mode 100644 Master/tlpkg/tlperl/site/lib/HTTP/Status.pm create mode 100644 Master/tlpkg/tlperl/site/lib/IO/HTML.pm create mode 100644 Master/tlpkg/tlperl/site/lib/IO/String.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Debug.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/MediaTypes.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/GHTTP.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/Simple.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm create mode 100644 Master/tlpkg/tlperl/site/lib/LWP/media.types create mode 100644 Master/tlpkg/tlperl/site/lib/Math/Int64.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Math/Int64/die_on_overflow.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Math/Int64/native_if_available.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Math/UInt64.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Mozilla/CA.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Mozilla/CA/cacert.pem create mode 100644 Master/tlpkg/tlperl/site/lib/Mozilla/mk-ca-bundle.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Net/HTTP.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm create mode 100644 Master/tlpkg/tlperl/site/lib/OLE.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Socket.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tie/Registry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tie/Watch.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Time/Zone.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/804delta.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Adjuster.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Adjuster.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/After.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Animation.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Animation.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Balloon.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Balloon.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Bitmap.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Bitmap.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/BrowseEntry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/BrowseEntry.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Button.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Button.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Camel.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Canvas.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Canvas.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Checkbutton.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Checkbutton.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Clipboard.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Clipboard.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/CmdLine.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/CmdLine.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ColorDialog.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ColorEdit.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ColorEditor.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ColorEditor.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ColorSelect.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Compound.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Compound.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Config.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ConfigSpecs.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Configure.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Credits create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DItem.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Derived.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Derived.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Dialog.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Dialog.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DialogBox.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DialogBox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DirSelect.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DirTree.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DirTree.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Dirlist.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Common.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Common.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/LocalDrop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Rect.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/SunConst.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/SunConst.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/SunDrop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/SunSite.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Win32Drop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/Win32Site.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/XDNDDrop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DragDrop/XDNDSite.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DropSite.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DropSite.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/DummyEncode.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/English.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Entry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Entry.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Error.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ErrorDialog.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ErrorDialog.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Event.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Event/IO.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Eventloop.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/FBox.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/FBox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/FileSelect.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/FileSelect.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/FloatEntry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Font.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Font.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Frame.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Frame.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/HList.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/HList.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/IO.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/IO.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/IconList.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/IconList.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Image.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Image.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/InputO.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Internals.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ItemStyle.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/JPEG.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/LabEntry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/LabFrame.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/LabFrame.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/LabRadio.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Label.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Label.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Labelframe.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Labelframe.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Listbox.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Listbox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MMtry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MMutil.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MainWindow.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MainWindow.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MakeDepend.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menu.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menu.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menu/Item.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menu/Item.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menubar.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menubutton.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Menubutton.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Message.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Message.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MsgBox.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/MsgBox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Mwm.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/NBFrame.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/NoteBook.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Optionmenu.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Optionmenu.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/PNG.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Pane.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Panedwindow.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Panedwindow.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Photo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Photo.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Pixmap.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Pixmap.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Popup.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Pretty.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ProgressBar.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/README.Adjust create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ROText.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ROText.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Radiobutton.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Radiobutton.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Region.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Reindex.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ReindexedROText.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/ReindexedText.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Scale.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Scale.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Scrollbar.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Scrollbar.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Scrolled.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Spinbox.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Spinbox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Stats.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Submethods.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Submethods.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TList.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TList.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Table.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Table.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tcl-perl.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Text.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Text.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Text/Tag.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TextEdit.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TextList.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TextUndo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TextUndo.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tiler.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tiler.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TixGrid.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TixGrid.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tk.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tk.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/TkXSUB.def create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Toplevel.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Toplevel.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Trace.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tree.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Tree.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/UserGuide.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Widget.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Widget.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/WidgetDemo.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Wm.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Wm.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/X.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/Xatom.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/Xfuncproto.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/Xlib.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/Xutil.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/cursorfont.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/keysym.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/keysymdef.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11/license.terms create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11Font.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/X11Font.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Xcamel.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Xlib.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Xrm.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/Xrm.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/act_folder.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/act_folder.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/after.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/anim.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/arrowdownwin.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/balArrow.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/bind.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/bindtags.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/callbacks.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/cbxarrow.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/chooseColor.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/chooseDirectory.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/composite.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/LabEnLabRad.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/QuitPB.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/QuitPBa.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/c.icon create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/cursor.cur create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/cursor.mask create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/cursor.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/dir.icon create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/dir.mask create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/earth.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/earthris.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/face create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/flagdown create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/flagup create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/grey.25 create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/grey.5 create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/letters create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/mickey.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/ned.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/noletters create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/page.icon create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/page.mask create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/pattern create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/images/teapot.ppm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/Ball.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/HList.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/HList2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/Plot.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/WidgetDemo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/arrows.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/balloon.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/bind.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/bitmaps.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/bounce.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/browseentry.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/browseentry2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/button.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/check.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/choosedir.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/clrpick.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/colors.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/cscroll.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/ctext.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/dialog1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/dialog2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/dirtree.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/entry1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/entry2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/entry3.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/filebox.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/floor.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/form.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/form_mgr.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/hello.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/hscale.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/icon.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/image1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/image2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/items.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/keysyms.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/labelframe.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/labels.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/labframe.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/mega.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/menbut.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/menus.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/menus2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/msgBox.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/notebook.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/paned1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/paned2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/photo1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/photo2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/plot.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/progress.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/puzzle.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/radio.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/ruler.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/sayings.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/search.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/showVars.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/slide.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/spin.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/states.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/style.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/texts.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/trace1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/trace2.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/transtile.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/twind.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/unicodeout.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/virtevents1.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widget_lib/vscale.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/Gedi.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/TEMPLATE.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/Tiler.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/all.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/cursor.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/lib/npuz/Xcamel.npuz create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/npuz.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/demos/widtrib/plop.pl create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/event.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/exit.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/file.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/file.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/fileevent.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/focus.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/folder.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/folder.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/form.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/getOpenFile.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/grab.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/grid.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/icon.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/install.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/license.terms create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/mega.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/messageBox.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/openfile.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/openfolder.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/openfolder.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/option.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/options.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/overview.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Lang_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Tcl-pTk create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/Xlib_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/compat/limits.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/compat/stdlib.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/compat/unistd.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/default.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/img.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/imgInt_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/ks_names.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/mkVFunc create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/moredefs.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/port.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tcl.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclIntDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclIntPlatDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclMath.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclPlatDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tclWinInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tix.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixBitmaps.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixDef.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixForm.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixGrData.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixGrid.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixHList.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixImgXpm_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixInt_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixPort.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixTList.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixWinInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tixWinPort.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tix_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tk.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tk3d.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkButton.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkCanvas.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkCanvases.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkColor.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkConfig.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkEvent_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkFileFilter.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkFont.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkImgPhoto_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInitScript.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntPlatDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkIntXlibDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkInt_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkMenu.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkMenubutton.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkOption_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPlatDecls_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkPort.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkScale.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkScrollbar.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkSelect.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkText.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkUndo.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkVMacro.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWin.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinDefault.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinInt.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkWinPort.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tkXrm.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/tk_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pTk/xbytes.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/pack.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/palette.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/place.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/prolog.ps create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/selection.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/send.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/srcfile.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/textfile.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tixWm.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkGlue.def create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkGlue.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkGlue.m create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkGlue.t create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkGlue_f.h create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tkvars.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/tranicon.gif create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/typemap create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/vtab.def create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/widgets.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/widgets.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/win.xbm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/winfolder.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/Tk/wintext.xpm create mode 100644 Master/tlpkg/tlperl/site/lib/URI.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/Escape.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/Heuristic.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/IRI.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/Split.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/URL.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/WithBase.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_foreign.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_generic.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_idna.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_ldap.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_login.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_punycode.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_query.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_segment.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_server.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/_userpass.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/data.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/Base.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/ftp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/gopher.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/http.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/https.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/ldap.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/ldapi.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/ldaps.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/mailto.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/mms.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/news.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/nntp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/pop.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/rlogin.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/rsync.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/rtsp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/rtspu.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/sftp.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/sip.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/sips.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/snews.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/ssh.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/telnet.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/tn3270.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/urn.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm create mode 100644 Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm create mode 100644 Master/tlpkg/tlperl/site/lib/WWW/RobotRules.pm create mode 100644 Master/tlpkg/tlperl/site/lib/WWW/RobotRules/AnyDBM_File.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/API.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/API/Callback.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/API/Callback/IATPatch.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/API/Struct.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/API/Type.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/Console.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/Const.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/Enum.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/Lite.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/NEWS.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/NLS.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/TPJ.pod create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/TypeInfo.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/OLE/Variant.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/Process.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/Shortcut.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/TieRegistry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32/WinError.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32API/Registry.pm create mode 100644 Master/tlpkg/tlperl/site/lib/Win32API/Registry/cRegistry.pc create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Date/Parse/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Digest/SHA1/SHA1.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Encode/Locale/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Encode/compat/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/File/Listing/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/File/Which/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTML/Tagset/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTTP/Cookies/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTTP/Daemon/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTTP/Date/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTTP/Message/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/HTTP/Negotiate/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/IO/HTML/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/IO/String/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/LWP/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/LWP/MediaTypes/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Math/Int64/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Mozilla/CA/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Net/HTTP/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Socket/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/CancelRepeat.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Canvas/Canvas.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Clipboard/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Clipboard/getSelected.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Compound/Compound.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/DirSelect/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/EnterFocus.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Entry/Entry.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Error.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Event/Event.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/FirstMenu.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/FocusChildren.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/FocusOK.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/AddScrollbars.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/FindMenu.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/freeze_on_map.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/label.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/labelPack.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/labelVariable.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/packscrollbars.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/queuePack.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/sbset.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Frame/scrollbars.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/HList/HList.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/IO/IO.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/ImageNames.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/ImageTypes.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/JPEG/JPEG.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/AutoScan.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/BeginExtend.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/BeginSelect.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/BeginToggle.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/ButtonRelease_1.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/CLEAR.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Cancel.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Cntrl_End.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Cntrl_Home.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Cntrl_backslash.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/DELETE.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/DataExtend.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/EXISTS.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/EXTEND.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/ExtendUpDown.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/FETCH.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/FETCHSIZE.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Listbox.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/Motion.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/POP.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/PUSH.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/SHIFT.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/SPLICE.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/STORE.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/SelectAll.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/SetList.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/TIEARRAY.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/TIESCALAR.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/UNSHIFT.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/UpDown.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/clipboardPaste.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/deleteSelected.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/getSelected.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Listbox/xyIndex.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Menubutton/Menubutton.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/NBFrame/NBFrame.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/PNG/PNG.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Pixmap/Pixmap.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Receive.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/RepeatId.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Activate.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/ButtonDown.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/ButtonUp.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/ControlPress.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Drag.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/EndDrag.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Enter.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Increment.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Leave.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/Scale.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scale/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ButtonDown.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ButtonUp.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Drag.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/EndDrag.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Enter.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Leave.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Motion.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ScrlByPages.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ScrlByUnits.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/Select.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/StartDrag.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Scrollbar/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Selection.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/TList/TList.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/Create.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/Posn.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/see.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/totalColumns.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Table/totalRows.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Text/Text.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Text/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/TextEdit/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/TextUndo/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/TixGrid/TixGrid.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Tk.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_BindIn.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_BindOut.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_Create.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_Destroy.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_In.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/FG_Out.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Toplevel/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/TraverseToMenu.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/ASkludge.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/AltKeyInDialog.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/AmpWidget.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/FindAltKeyTarget.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/MasterMenu.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/RestoreFocusGrab.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/SetAmpText.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/SetFocusGrab.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/UnderlineAmpersand.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/bindDump.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/clipboardKeysyms.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Widget/pathname.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/AnchorAdjust.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/FullScreen.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/Popup.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/Post.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Wm/iconposition.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/X/X.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/X/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/Xlib/Xlib.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/autosplit.ix create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/break.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/focusFollowsMouse.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/focusNext.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/focusPrev.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/getEncoding.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/getNextFocus.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/getPrevFocus.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/interps.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/lsearch.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/pTk/extralibs.ld create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/tabFocus.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Tk/updateWidgets.al create mode 100644 Master/tlpkg/tlperl/site/lib/auto/URI/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/WWW/RobotRules/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/API/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Console/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/OLE/OLE.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Process/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Process/Process.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32/TieRegistry/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/.packlist create mode 100644 Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll create mode 100644 Master/tlpkg/tlperl/site/lib/lwpcook.pod create mode 100644 Master/tlpkg/tlperl/site/lib/lwptut.pod (limited to 'Master/tlpkg') diff --git a/Master/tlpkg/tlperl/README.TEXLIVE b/Master/tlpkg/tlperl/README.TEXLIVE index bf5af4b003f..ad0cf990892 100644 --- a/Master/tlpkg/tlperl/README.TEXLIVE +++ b/Master/tlpkg/tlperl/README.TEXLIVE @@ -1,4 +1,6 @@ -This directory contains Perl 5.20.2 compiled for Windows. +(This file public domain.) + +This directory contains Perl 5.22.1 compiled for Windows. The only purpose of this Perl is to provide support on Windows for Perl scripts shipped with TeX Live. It's not intended for general use. diff --git a/Master/tlpkg/tlperl/bin/a2p.exe b/Master/tlpkg/tlperl/bin/a2p.exe deleted file mode 100755 index fd318509a3f..00000000000 Binary files a/Master/tlpkg/tlperl/bin/a2p.exe and /dev/null differ diff --git a/Master/tlpkg/tlperl/bin/libgcc_s_sjlj-1.dll b/Master/tlpkg/tlperl/bin/libgcc_s_sjlj-1.dll index 638eeac960d..78b455d6629 100755 Binary files a/Master/tlpkg/tlperl/bin/libgcc_s_sjlj-1.dll and b/Master/tlpkg/tlperl/bin/libgcc_s_sjlj-1.dll differ diff --git a/Master/tlpkg/tlperl/bin/libstdc++-6.dll b/Master/tlpkg/tlperl/bin/libstdc++-6.dll index 2ab11bae8b1..ef86d810ed8 100755 Binary files a/Master/tlpkg/tlperl/bin/libstdc++-6.dll and b/Master/tlpkg/tlperl/bin/libstdc++-6.dll differ diff --git a/Master/tlpkg/tlperl/bin/libwinpthread-1.dll b/Master/tlpkg/tlperl/bin/libwinpthread-1.dll index 434802becf9..8c970289b87 100755 Binary files a/Master/tlpkg/tlperl/bin/libwinpthread-1.dll and b/Master/tlpkg/tlperl/bin/libwinpthread-1.dll differ diff --git a/Master/tlpkg/tlperl/bin/perl.exe b/Master/tlpkg/tlperl/bin/perl.exe index 98045d95c77..351d4449fed 100755 Binary files a/Master/tlpkg/tlperl/bin/perl.exe and b/Master/tlpkg/tlperl/bin/perl.exe differ diff --git a/Master/tlpkg/tlperl/bin/perl5.20.2.exe b/Master/tlpkg/tlperl/bin/perl5.20.2.exe deleted file mode 100755 index 98045d95c77..00000000000 Binary files a/Master/tlpkg/tlperl/bin/perl5.20.2.exe and /dev/null differ diff --git a/Master/tlpkg/tlperl/bin/perl5.22.1.exe b/Master/tlpkg/tlperl/bin/perl5.22.1.exe new file mode 100755 index 00000000000..351d4449fed Binary files /dev/null and b/Master/tlpkg/tlperl/bin/perl5.22.1.exe differ diff --git a/Master/tlpkg/tlperl/bin/perl520.dll b/Master/tlpkg/tlperl/bin/perl520.dll deleted file mode 100755 index e2b3b596921..00000000000 Binary files a/Master/tlpkg/tlperl/bin/perl520.dll and /dev/null differ diff --git a/Master/tlpkg/tlperl/bin/perl522.dll b/Master/tlpkg/tlperl/bin/perl522.dll new file mode 100755 index 00000000000..1b28845bb49 Binary files /dev/null and b/Master/tlpkg/tlperl/bin/perl522.dll differ diff --git a/Master/tlpkg/tlperl/bin/perlglob.exe b/Master/tlpkg/tlperl/bin/perlglob.exe index 0202921e0e8..db0d20767d3 100755 Binary files a/Master/tlpkg/tlperl/bin/perlglob.exe and b/Master/tlpkg/tlperl/bin/perlglob.exe differ diff --git a/Master/tlpkg/tlperl/bin/wperl.exe b/Master/tlpkg/tlperl/bin/wperl.exe index fa60b5817b0..f17d839b32e 100755 Binary files a/Master/tlpkg/tlperl/bin/wperl.exe and b/Master/tlpkg/tlperl/bin/wperl.exe differ diff --git a/Master/tlpkg/tlperl/lib/.packlist b/Master/tlpkg/tlperl/lib/.packlist index 56a724340bb..9fef71a9853 100644 --- a/Master/tlpkg/tlperl/lib/.packlist +++ b/Master/tlpkg/tlperl/lib/.packlist @@ -1,18 +1,16 @@ -c:\tlperl\bin/a2p.exe type=file c:\tlperl\bin/c2ph.bat type=file -c:\tlperl\bin/config_data.bat type=file c:\tlperl\bin/corelist.bat type=file c:\tlperl\bin/cpan.bat type=file c:\tlperl\bin/enc2xs.bat type=file -c:\tlperl\bin/find2perl.bat type=file +c:\tlperl\bin/encguess.bat type=file c:\tlperl\bin/h2ph.bat type=file c:\tlperl\bin/h2xs.bat type=file c:\tlperl\bin/instmodsh.bat type=file c:\tlperl\bin/json_pp.bat type=file c:\tlperl\bin/libnetcfg.bat type=file -c:\tlperl\bin/perl.exe from=c:\tlperl\bin/perl5.20.2.exe type=link -c:\tlperl\bin/perl5.20.2.exe type=file -c:\tlperl\bin/perl520.dll type=file +c:\tlperl\bin/perl.exe from=c:\tlperl\bin/perl5.22.1.exe type=link +c:\tlperl\bin/perl5.22.1.exe type=file +c:\tlperl\bin/perl522.dll type=file c:\tlperl\bin/perlbug.bat type=file c:\tlperl\bin/perldoc.bat type=file c:\tlperl\bin/perlivp.bat type=file @@ -26,12 +24,10 @@ c:\tlperl\bin/pod2usage.bat type=file c:\tlperl\bin/podchecker.bat type=file c:\tlperl\bin/podselect.bat type=file c:\tlperl\bin/prove.bat type=file -c:\tlperl\bin/psed.bat from=c:\tlperl\bin/s2p.bat type=link c:\tlperl\bin/pstruct.bat from=c:\tlperl\bin/c2ph.bat type=link c:\tlperl\bin/ptar.bat type=file c:\tlperl\bin/ptardiff.bat type=file c:\tlperl\bin/ptargrep.bat type=file -c:\tlperl\bin/s2p.bat type=file c:\tlperl\bin/shasum.bat type=file c:\tlperl\bin/splain.bat type=file c:\tlperl\bin/xsubpp.bat type=file @@ -52,19 +48,11 @@ c:\tlperl\lib/B.pm type=file c:\tlperl\lib/B/Concise.pm type=file c:\tlperl\lib/B/Debug.pm type=file c:\tlperl\lib/B/Deparse.pm type=file +c:\tlperl\lib/B/Op_private.pm type=file c:\tlperl\lib/B/Showlex.pm type=file c:\tlperl\lib/B/Terse.pm type=file c:\tlperl\lib/B/Xref.pm type=file c:\tlperl\lib/Benchmark.pm type=file -c:\tlperl\lib/CGI.pm type=file -c:\tlperl\lib/CGI/Apache.pm type=file -c:\tlperl\lib/CGI/Carp.pm type=file -c:\tlperl\lib/CGI/Cookie.pm type=file -c:\tlperl\lib/CGI/Fast.pm type=file -c:\tlperl\lib/CGI/Pretty.pm type=file -c:\tlperl\lib/CGI/Push.pm type=file -c:\tlperl\lib/CGI/Switch.pm type=file -c:\tlperl\lib/CGI/Util.pm type=file c:\tlperl\lib/CORE.pod type=file c:\tlperl\lib/CORE/EXTERN.h type=file c:\tlperl\lib/CORE/INTERN.h type=file @@ -78,6 +66,7 @@ c:\tlperl\lib/CORE/cop.h type=file c:\tlperl\lib/CORE/cv.h type=file c:\tlperl\lib/CORE/dirent.h type=file c:\tlperl\lib/CORE/dosish.h type=file +c:\tlperl\lib/CORE/ebcdic_tables.h type=file c:\tlperl\lib/CORE/embed.h type=file c:\tlperl\lib/CORE/embedvar.h type=file c:\tlperl\lib/CORE/fakesdio.h type=file @@ -93,7 +82,7 @@ c:\tlperl\lib/CORE/intrpvar.h type=file c:\tlperl\lib/CORE/iperlsys.h type=file c:\tlperl\lib/CORE/keywords.h type=file c:\tlperl\lib/CORE/l1_char_class_tab.h type=file -c:\tlperl\lib/CORE/libperl520.a type=file +c:\tlperl\lib/CORE/libperl522.a type=file c:\tlperl\lib/CORE/malloc_ctl.h type=file c:\tlperl\lib/CORE/metaconfig.h type=file c:\tlperl\lib/CORE/mg.h type=file @@ -181,6 +170,12 @@ c:\tlperl\lib/CPAN/Meta.pm type=file c:\tlperl\lib/CPAN/Meta/Converter.pm type=file c:\tlperl\lib/CPAN/Meta/Feature.pm type=file c:\tlperl\lib/CPAN/Meta/History.pm type=file +c:\tlperl\lib/CPAN/Meta/History/Meta_1_0.pod type=file +c:\tlperl\lib/CPAN/Meta/History/Meta_1_1.pod type=file +c:\tlperl\lib/CPAN/Meta/History/Meta_1_2.pod type=file +c:\tlperl\lib/CPAN/Meta/History/Meta_1_3.pod type=file +c:\tlperl\lib/CPAN/Meta/History/Meta_1_4.pod type=file +c:\tlperl\lib/CPAN/Meta/Merge.pm type=file c:\tlperl\lib/CPAN/Meta/Prereqs.pm type=file c:\tlperl\lib/CPAN/Meta/Requirements.pm type=file c:\tlperl\lib/CPAN/Meta/Spec.pm type=file @@ -189,6 +184,8 @@ c:\tlperl\lib/CPAN/Meta/YAML.pm type=file c:\tlperl\lib/CPAN/Mirrors.pm type=file c:\tlperl\lib/CPAN/Module.pm type=file c:\tlperl\lib/CPAN/Nox.pm type=file +c:\tlperl\lib/CPAN/Plugin.pm type=file +c:\tlperl\lib/CPAN/Plugin/Specfile.pm type=file c:\tlperl\lib/CPAN/Prompt.pm type=file c:\tlperl\lib/CPAN/Queue.pm type=file c:\tlperl\lib/CPAN/Shell.pm type=file @@ -313,7 +310,11 @@ c:\tlperl\lib/ExtUtils/MY.pm type=file c:\tlperl\lib/ExtUtils/MakeMaker.pm type=file c:\tlperl\lib/ExtUtils/MakeMaker/Config.pm type=file c:\tlperl\lib/ExtUtils/MakeMaker/FAQ.pod type=file +c:\tlperl\lib/ExtUtils/MakeMaker/Locale.pm type=file c:\tlperl\lib/ExtUtils/MakeMaker/Tutorial.pod type=file +c:\tlperl\lib/ExtUtils/MakeMaker/version.pm type=file +c:\tlperl\lib/ExtUtils/MakeMaker/version/regex.pm type=file +c:\tlperl\lib/ExtUtils/MakeMaker/version/vpp.pm type=file c:\tlperl\lib/ExtUtils/Manifest.pm type=file c:\tlperl\lib/ExtUtils/Miniperl.pm type=file c:\tlperl\lib/ExtUtils/Mkbootstrap.pm type=file @@ -484,32 +485,6 @@ c:\tlperl\lib/Memoize/ExpireTest.pm type=file c:\tlperl\lib/Memoize/NDBM_File.pm type=file c:\tlperl\lib/Memoize/SDBM_File.pm type=file c:\tlperl\lib/Memoize/Storable.pm type=file -c:\tlperl\lib/Module/Build.pm type=file -c:\tlperl\lib/Module/Build/API.pod type=file -c:\tlperl\lib/Module/Build/Authoring.pod type=file -c:\tlperl\lib/Module/Build/Base.pm type=file -c:\tlperl\lib/Module/Build/Bundling.pod type=file -c:\tlperl\lib/Module/Build/Compat.pm type=file -c:\tlperl\lib/Module/Build/Config.pm type=file -c:\tlperl\lib/Module/Build/ConfigData.pm type=file -c:\tlperl\lib/Module/Build/Cookbook.pm type=file -c:\tlperl\lib/Module/Build/Dumper.pm type=file -c:\tlperl\lib/Module/Build/ModuleInfo.pm type=file -c:\tlperl\lib/Module/Build/Notes.pm type=file -c:\tlperl\lib/Module/Build/PPMMaker.pm type=file -c:\tlperl\lib/Module/Build/Platform/Default.pm type=file -c:\tlperl\lib/Module/Build/Platform/MacOS.pm type=file -c:\tlperl\lib/Module/Build/Platform/Unix.pm type=file -c:\tlperl\lib/Module/Build/Platform/VMS.pm type=file -c:\tlperl\lib/Module/Build/Platform/VOS.pm type=file -c:\tlperl\lib/Module/Build/Platform/Windows.pm type=file -c:\tlperl\lib/Module/Build/Platform/aix.pm type=file -c:\tlperl\lib/Module/Build/Platform/cygwin.pm type=file -c:\tlperl\lib/Module/Build/Platform/darwin.pm type=file -c:\tlperl\lib/Module/Build/Platform/os2.pm type=file -c:\tlperl\lib/Module/Build/PodParser.pm type=file -c:\tlperl\lib/Module/Build/Version.pm type=file -c:\tlperl\lib/Module/Build/YAML.pm type=file c:\tlperl\lib/Module/CoreList.pm type=file c:\tlperl\lib/Module/CoreList.pod type=file c:\tlperl\lib/Module/CoreList/TieHashDelta.pm type=file @@ -543,7 +518,6 @@ c:\tlperl\lib/O.pm type=file c:\tlperl\lib/Opcode.pm type=file c:\tlperl\lib/POSIX.pm type=file c:\tlperl\lib/POSIX.pod type=file -c:\tlperl\lib/Package/Constants.pm type=file c:\tlperl\lib/Params/Check.pm type=file c:\tlperl\lib/Parse/CPAN/Meta.pm type=file c:\tlperl\lib/Perl/OSType.pm type=file @@ -621,6 +595,7 @@ c:\tlperl\lib/SelectSaver.pm type=file c:\tlperl\lib/SelfLoader.pm type=file c:\tlperl\lib/Socket.pm type=file c:\tlperl\lib/Storable.pm type=file +c:\tlperl\lib/Sub/Util.pm type=file c:\tlperl\lib/Symbol.pm type=file c:\tlperl\lib/Sys/Hostname.pm type=file c:\tlperl\lib/TAP/Base.pm type=file @@ -673,13 +648,19 @@ c:\tlperl\lib/Term/Complete.pm type=file c:\tlperl\lib/Term/ReadLine.pm type=file c:\tlperl\lib/Test.pm type=file c:\tlperl\lib/Test/Builder.pm type=file +c:\tlperl\lib/Test/Builder/IO/Scalar.pm type=file c:\tlperl\lib/Test/Builder/Module.pm type=file c:\tlperl\lib/Test/Builder/Tester.pm type=file c:\tlperl\lib/Test/Builder/Tester/Color.pm type=file c:\tlperl\lib/Test/Harness.pm type=file c:\tlperl\lib/Test/More.pm type=file c:\tlperl\lib/Test/Simple.pm type=file +c:\tlperl\lib/Test/Tester.pm type=file +c:\tlperl\lib/Test/Tester/Capture.pm type=file +c:\tlperl\lib/Test/Tester/CaptureRunner.pm type=file +c:\tlperl\lib/Test/Tester/Delegate.pm type=file c:\tlperl\lib/Test/Tutorial.pod type=file +c:\tlperl\lib/Test/use/ok.pm type=file c:\tlperl\lib/Text/Abbrev.pm type=file c:\tlperl\lib/Text/Balanced.pm type=file c:\tlperl\lib/Text/ParseWords.pm type=file @@ -853,7 +834,6 @@ c:\tlperl\lib/auto/Tie/Hash/NamedCapture/NamedCapture.dll type=file c:\tlperl\lib/auto/Time/HiRes/HiRes.dll type=file c:\tlperl\lib/auto/Time/Piece/Piece.dll type=file c:\tlperl\lib/auto/Unicode/Collate/Collate.dll type=file -c:\tlperl\lib/auto/Unicode/Normalize/Normalize.dll type=file c:\tlperl\lib/auto/Win32/Win32.dll type=file c:\tlperl\lib/auto/Win32API/File/File.dll type=file c:\tlperl\lib/auto/Win32CORE/extralibs.ld type=file @@ -861,10 +841,12 @@ c:\tlperl\lib/auto/arybase/arybase.dll type=file c:\tlperl\lib/auto/attributes/attributes.dll type=file c:\tlperl\lib/auto/mro/mro.dll type=file c:\tlperl\lib/auto/re/re.dll type=file -c:\tlperl\lib/auto/sdbm/extralibs.ld type=file c:\tlperl\lib/auto/threads/shared/shared.dll type=file c:\tlperl\lib/auto/threads/threads.dll type=file c:\tlperl\lib/autodie.pm type=file +c:\tlperl\lib/autodie/Scope/Guard.pm type=file +c:\tlperl\lib/autodie/Scope/GuardStack.pm type=file +c:\tlperl\lib/autodie/ScopeUtil.pm type=file c:\tlperl\lib/autodie/exception.pm type=file c:\tlperl\lib/autodie/exception/system.pm type=file c:\tlperl\lib/autodie/hints.pm type=file @@ -889,13 +871,13 @@ c:\tlperl\lib/feature.pm type=file c:\tlperl\lib/fields.pm type=file c:\tlperl\lib/filetest.pm type=file c:\tlperl\lib/if.pm type=file -c:\tlperl\lib/inc/latest.pm type=file -c:\tlperl\lib/inc/latest/private.pm type=file c:\tlperl\lib/integer.pm type=file c:\tlperl\lib/less.pm type=file c:\tlperl\lib/lib.pm type=file c:\tlperl\lib/locale.pm type=file +c:\tlperl\lib/meta_notation.pm type=file c:\tlperl\lib/mro.pm type=file +c:\tlperl\lib/ok.pm type=file c:\tlperl\lib/open.pm type=file c:\tlperl\lib/ops.pm type=file c:\tlperl\lib/overload.pm type=file @@ -904,7 +886,6 @@ c:\tlperl\lib/overloading.pm type=file c:\tlperl\lib/parent.pm type=file c:\tlperl\lib/perl5db.pl type=file c:\tlperl\lib/perlfaq.pm type=file -c:\tlperl\lib/pods/a2p.pod type=file c:\tlperl\lib/pods/perl.pod type=file c:\tlperl\lib/pods/perl5004delta.pod type=file c:\tlperl\lib/pods/perl5005delta.pod type=file @@ -932,6 +913,9 @@ c:\tlperl\lib/pods/perl5184delta.pod type=file c:\tlperl\lib/pods/perl5200delta.pod type=file c:\tlperl\lib/pods/perl5201delta.pod type=file c:\tlperl\lib/pods/perl5202delta.pod type=file +c:\tlperl\lib/pods/perl5203delta.pod type=file +c:\tlperl\lib/pods/perl5220delta.pod type=file +c:\tlperl\lib/pods/perl5221delta.pod type=file c:\tlperl\lib/pods/perl561delta.pod type=file c:\tlperl\lib/pods/perl56delta.pod type=file c:\tlperl\lib/pods/perl581delta.pod type=file @@ -1150,6 +1134,7 @@ c:\tlperl\lib/unicore/lib/Age/V51.pl type=file c:\tlperl\lib/unicore/lib/Age/V52.pl type=file c:\tlperl\lib/unicore/lib/Age/V60.pl type=file c:\tlperl\lib/unicore/lib/Age/V61.pl type=file +c:\tlperl\lib/unicore/lib/Age/V70.pl type=file c:\tlperl\lib/unicore/lib/Alpha/Y.pl type=file c:\tlperl\lib/unicore/lib/Bc/AL.pl type=file c:\tlperl\lib/unicore/lib/Bc/AN.pl type=file @@ -1228,7 +1213,6 @@ c:\tlperl\lib/unicore/lib/Gc/LC.pl type=file c:\tlperl\lib/unicore/lib/Gc/Ll.pl type=file c:\tlperl\lib/unicore/lib/Gc/Lm.pl type=file c:\tlperl\lib/unicore/lib/Gc/Lo.pl type=file -c:\tlperl\lib/unicore/lib/Gc/Lt.pl type=file c:\tlperl\lib/unicore/lib/Gc/Lu.pl type=file c:\tlperl\lib/unicore/lib/Gc/M.pl type=file c:\tlperl\lib/unicore/lib/Gc/Mc.pl type=file @@ -1273,6 +1257,7 @@ c:\tlperl\lib/unicore/lib/In/6_0.pl type=file c:\tlperl\lib/unicore/lib/In/6_1.pl type=file c:\tlperl\lib/unicore/lib/In/6_2.pl type=file c:\tlperl\lib/unicore/lib/In/6_3.pl type=file +c:\tlperl\lib/unicore/lib/In/7_0.pl type=file c:\tlperl\lib/unicore/lib/Jg/Ain.pl type=file c:\tlperl\lib/unicore/lib/Jg/Alef.pl type=file c:\tlperl\lib/unicore/lib/Jg/Beh.pl type=file @@ -1285,6 +1270,7 @@ c:\tlperl\lib/unicore/lib/Jg/Lam.pl type=file c:\tlperl\lib/unicore/lib/Jg/NoJoinin.pl type=file c:\tlperl\lib/unicore/lib/Jg/Qaf.pl type=file c:\tlperl\lib/unicore/lib/Jg/Reh.pl type=file +c:\tlperl\lib/unicore/lib/Jg/Sad.pl type=file c:\tlperl\lib/unicore/lib/Jg/Seen.pl type=file c:\tlperl\lib/unicore/lib/Jg/Waw.pl type=file c:\tlperl\lib/unicore/lib/Jg/Yeh.pl type=file @@ -1350,6 +1336,7 @@ c:\tlperl\lib/unicore/lib/Nv/20.pl type=file c:\tlperl\lib/unicore/lib/Nv/2_3.pl type=file c:\tlperl\lib/unicore/lib/Nv/3.pl type=file c:\tlperl\lib/unicore/lib/Nv/30.pl type=file +c:\tlperl\lib/unicore/lib/Nv/300.pl type=file c:\tlperl\lib/unicore/lib/Nv/3_4.pl type=file c:\tlperl\lib/unicore/lib/Nv/4.pl type=file c:\tlperl\lib/unicore/lib/Nv/40.pl type=file @@ -1366,6 +1353,7 @@ c:\tlperl\lib/unicore/lib/Nv/8.pl type=file c:\tlperl\lib/unicore/lib/Nv/80.pl type=file c:\tlperl\lib/unicore/lib/Nv/9.pl type=file c:\tlperl\lib/unicore/lib/Nv/90.pl type=file +c:\tlperl\lib/unicore/lib/Nv/900.pl type=file c:\tlperl\lib/unicore/lib/PatSyn/Y.pl type=file c:\tlperl\lib/unicore/lib/PatWS/Y.pl type=file c:\tlperl\lib/unicore/lib/Perl/Alnum.pl type=file @@ -1375,6 +1363,8 @@ c:\tlperl\lib/unicore/lib/Perl/Graph.pl type=file c:\tlperl\lib/unicore/lib/Perl/PerlWord.pl type=file c:\tlperl\lib/unicore/lib/Perl/PosixPun.pl type=file c:\tlperl\lib/unicore/lib/Perl/Print.pl type=file +c:\tlperl\lib/unicore/lib/Perl/SpacePer.pl type=file +c:\tlperl\lib/unicore/lib/Perl/Title.pl type=file c:\tlperl\lib/unicore/lib/Perl/Word.pl type=file c:\tlperl\lib/unicore/lib/Perl/XPosixPu.pl type=file c:\tlperl\lib/unicore/lib/Perl/_PerlAny.pl type=file @@ -1386,9 +1376,6 @@ c:\tlperl\lib/unicore/lib/Perl/_PerlIDS.pl type=file c:\tlperl\lib/unicore/lib/Perl/_PerlPr2.pl type=file c:\tlperl\lib/unicore/lib/Perl/_PerlPro.pl type=file c:\tlperl\lib/unicore/lib/Perl/_PerlQuo.pl type=file -c:\tlperl\lib/unicore/lib/Perl/_XExtend.pl type=file -c:\tlperl\lib/unicore/lib/Perl/_XRegula.pl type=file -c:\tlperl\lib/unicore/lib/Perl/_XSpecia.pl type=file c:\tlperl\lib/unicore/lib/QMark/Y.pl type=file c:\tlperl\lib/unicore/lib/SB/AT.pl type=file c:\tlperl\lib/unicore/lib/SB/CL.pl type=file @@ -1411,8 +1398,10 @@ c:\tlperl\lib/unicore/lib/Sc/Cham.pl type=file c:\tlperl\lib/unicore/lib/Sc/Cprt.pl type=file c:\tlperl\lib/unicore/lib/Sc/Cyrl.pl type=file c:\tlperl\lib/unicore/lib/Sc/Deva.pl type=file +c:\tlperl\lib/unicore/lib/Sc/Dupl.pl type=file c:\tlperl\lib/unicore/lib/Sc/Ethi.pl type=file c:\tlperl\lib/unicore/lib/Sc/Geor.pl type=file +c:\tlperl\lib/unicore/lib/Sc/Gran.pl type=file c:\tlperl\lib/unicore/lib/Sc/Grek.pl type=file c:\tlperl\lib/unicore/lib/Sc/Gujr.pl type=file c:\tlperl\lib/unicore/lib/Sc/Guru.pl type=file @@ -1420,6 +1409,7 @@ c:\tlperl\lib/unicore/lib/Sc/Han.pl type=file c:\tlperl\lib/unicore/lib/Sc/Hang.pl type=file c:\tlperl\lib/unicore/lib/Sc/Hebr.pl type=file c:\tlperl\lib/unicore/lib/Sc/Hira.pl type=file +c:\tlperl\lib/unicore/lib/Sc/Hmng.pl type=file c:\tlperl\lib/unicore/lib/Sc/Kana.pl type=file c:\tlperl\lib/unicore/lib/Sc/Khar.pl type=file c:\tlperl\lib/unicore/lib/Sc/Khmr.pl type=file @@ -1445,10 +1435,13 @@ c:\tlperl\lib/unicore/lib/Scx/Armn.pl type=file c:\tlperl\lib/unicore/lib/Scx/Beng.pl type=file c:\tlperl\lib/unicore/lib/Scx/Bopo.pl type=file c:\tlperl\lib/unicore/lib/Scx/Cakm.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Copt.pl type=file c:\tlperl\lib/unicore/lib/Scx/Cprt.pl type=file c:\tlperl\lib/unicore/lib/Scx/Cyrl.pl type=file c:\tlperl\lib/unicore/lib/Scx/Deva.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Dupl.pl type=file c:\tlperl\lib/unicore/lib/Scx/Geor.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Gran.pl type=file c:\tlperl\lib/unicore/lib/Scx/Grek.pl type=file c:\tlperl\lib/unicore/lib/Scx/Gujr.pl type=file c:\tlperl\lib/unicore/lib/Scx/Guru.pl type=file @@ -1456,18 +1449,27 @@ c:\tlperl\lib/unicore/lib/Scx/Han.pl type=file c:\tlperl\lib/unicore/lib/Scx/Hang.pl type=file c:\tlperl\lib/unicore/lib/Scx/Hira.pl type=file c:\tlperl\lib/unicore/lib/Scx/Kana.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Knda.pl type=file c:\tlperl\lib/unicore/lib/Scx/Latn.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Limb.pl type=file c:\tlperl\lib/unicore/lib/Scx/Linb.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Mlym.pl type=file c:\tlperl\lib/unicore/lib/Scx/Mong.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Mymr.pl type=file c:\tlperl\lib/unicore/lib/Scx/Orya.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Phlp.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Sind.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Sinh.pl type=file c:\tlperl\lib/unicore/lib/Scx/Syrc.pl type=file c:\tlperl\lib/unicore/lib/Scx/Tagb.pl type=file c:\tlperl\lib/unicore/lib/Scx/Takr.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Taml.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Telu.pl type=file c:\tlperl\lib/unicore/lib/Scx/Thaa.pl type=file +c:\tlperl\lib/unicore/lib/Scx/Tirh.pl type=file c:\tlperl\lib/unicore/lib/Scx/Yi.pl type=file c:\tlperl\lib/unicore/lib/Scx/Zinh.pl type=file c:\tlperl\lib/unicore/lib/Scx/Zyyy.pl type=file -c:\tlperl\lib/unicore/lib/Space/Y.pl type=file c:\tlperl\lib/unicore/lib/Term/Y.pl type=file c:\tlperl\lib/unicore/lib/UIdeo/Y.pl type=file c:\tlperl\lib/unicore/lib/Upper/Y.pl type=file diff --git a/Master/tlpkg/tlperl/lib/App/Cpan.pm b/Master/tlpkg/tlperl/lib/App/Cpan.pm index b548bcc0ae6..e8c9bb78eea 100644 --- a/Master/tlpkg/tlperl/lib/App/Cpan.pm +++ b/Master/tlpkg/tlperl/lib/App/Cpan.pm @@ -4,9 +4,9 @@ use strict; use warnings; use vars qw($VERSION); -use if $] < 5.008 => "IO::Scalar"; +use if $] < 5.008 => 'IO::Scalar'; -$VERSION = '1.62'; +$VERSION = '1.63'; =head1 NAME @@ -23,6 +23,9 @@ App::Cpan - easily interact with CPAN from the command line # use local::lib cpan -I module_name [ module_name ... ] + # one time mirror override for faster mirrors + cpan -p ... + # with just the dot, install from the distribution in the # current directory cpan . @@ -135,6 +138,11 @@ List the modules by the specified authors. Make the specified modules. +=item -M mirror1,mirror2,... + +A comma-separated list of mirrors to use for just this run. The C<-P> +option can find them for you automatically. + =item -n Do a dry run, but don't actually install anything. (unimplemented) @@ -145,11 +153,12 @@ Show the out-of-date modules. =item -p -Ping the configured mirrors +Ping the configured mirrors and print a report =item -P -Find the best mirrors you could be using (but doesn't configure them just yet) +Find the best mirrors you could be using and use them for the current +session. =item -r @@ -208,6 +217,51 @@ and tells you about problems you might have. # force install modules ( must use -i ) cpan -fi CGI::Minimal URI + # install modules but without testing them + cpan -Ti CGI::Minimal URI + +=head2 Environment variables + +There are several components in CPAN.pm that use environment variables. +The build tools, L and L use some, +while others matter to the levels above them. Some of these are specified +by the Perl Toolchain Gang: + +Lancaster Concensus: L + +Oslo Concensus: L + +=over 4 + +=item NONINTERACTIVE_TESTING + +Assume no one is paying attention and skips prompts for distributions +that do that correctly. C sets this to C<1> unless it already +has a value (even if that value is false). + +=item PERL_MM_USE_DEFAULT + +Use the default answer for a prompted questions. C sets this +to C<1> unless it already has a value (even if that value is false). + +=item CPAN_OPTS + +As with C, a string of additional C options to +add to those you specify on the command line. + +=item CPANSCRIPT_LOGLEVEL + +The log level to use, with either the embedded, minimal logger or +L if it is installed. Possible values are the same as +the C levels: C, C, C, C, +C, and C. The default is C. + +=item GIT_COMMAND + +The path to the C binary to use for the Git features. The default +is C. + +=back =head2 Methods @@ -216,7 +270,7 @@ and tells you about problems you might have. =cut use autouse Carp => qw(carp croak cluck); -use CPAN (); +use CPAN 1.80 (); # needs no test use Config; use autouse Cwd => qw(cwd); use autouse 'Data::Dumper' => qw(Dumper); @@ -245,7 +299,7 @@ BEGIN { # most of this should be in methods use vars qw( @META_OPTIONS $Default %CPAN_METHODS @CPAN_OPTIONS @option_order %Method_table %Method_table_index ); -@META_OPTIONS = qw( h v V I g G C A D O l L a r p P j: J w T); +@META_OPTIONS = qw( h v V I g G M: C A D O l L a r p P j: J w T); $Default = 'default'; @@ -257,6 +311,7 @@ $Default = 'default'; 'm' => 'make', 't' => 'test', 'u' => 'upgrade', + 'T' => 'notest', ); @CPAN_OPTIONS = grep { $_ ne $Default } sort keys %CPAN_METHODS; @@ -283,8 +338,9 @@ sub GOOD_EXIT () { 0 } J => [ \&_dump_config, NO_ARGS, GOOD_EXIT, 'Dump configuration to stdout' ], F => [ \&_lock_lobotomy, NO_ARGS, GOOD_EXIT, 'Turn off CPAN.pm lock files' ], I => [ \&_load_local_lib, NO_ARGS, GOOD_EXIT, 'Loading local::lib' ], + M => [ \&_use_these_mirrors, ARGS, GOOD_EXIT, 'Setting per session mirrors' ], + P => [ \&_find_good_mirrors, NO_ARGS, GOOD_EXIT, 'Finding good mirrors' ], w => [ \&_turn_on_warnings, NO_ARGS, GOOD_EXIT, 'Turning on warnings' ], - T => [ \&_turn_off_testing, NO_ARGS, GOOD_EXIT, 'Turning off testing' ], # options that do their one thing g => [ \&_download, NO_ARGS, GOOD_EXIT, 'Download the latest distro' ], @@ -299,7 +355,6 @@ sub GOOD_EXIT () { 0 } L => [ \&_show_author_mods, ARGS, GOOD_EXIT, 'Showing author mods' ], a => [ \&_create_autobundle, NO_ARGS, GOOD_EXIT, 'Creating autobundle' ], p => [ \&_ping_mirrors, NO_ARGS, GOOD_EXIT, 'Pinging mirrors' ], - P => [ \&_find_good_mirrors, NO_ARGS, GOOD_EXIT, 'Finding good mirrors' ], r => [ \&_recompile, NO_ARGS, GOOD_EXIT, 'Recompiling' ], u => [ \&_upgrade, NO_ARGS, GOOD_EXIT, 'Running `make test`' ], @@ -309,6 +364,7 @@ sub GOOD_EXIT () { 0 } i => [ \&_default, ARGS, GOOD_EXIT, 'Running `make install`' ], 'm' => [ \&_default, ARGS, GOOD_EXIT, 'Running `make`' ], t => [ \&_default, ARGS, GOOD_EXIT, 'Running `make test`' ], + T => [ \&_default, ARGS, GOOD_EXIT, 'Installing with notest' ], ); %Method_table_index = ( @@ -364,7 +420,9 @@ sub _process_setup_options ); } - foreach my $o ( qw(F I w T) ) + $class->_turn_off_testing if $options->{T}; + + foreach my $o ( qw(F I w P M) ) { next unless exists $options->{$o}; $Method_table{$o}[ $Method_table_index{code} ]->( $options->{$o} ); @@ -385,13 +443,25 @@ sub _process_setup_options my $option_count = grep { $options->{$_} } @option_order; no warnings 'uninitialized'; - $option_count -= $options->{'f'}; # don't count force + + # don't count options that imply installation + foreach my $opt ( qw(f T) ) { # don't count force or notest + $option_count -= $options->{$opt}; + } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # if there are no options, set -i (this line fixes RT ticket 16915) $options->{i}++ unless $option_count; } +sub _setup_environment { +# should we override or set defaults? If this were a true interactive +# session, we'd be in the CPAN shell. + +# https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md + $ENV{NONINTERACTIVE_TESTING} = 1 unless defined $ENV{NONINTERACTIVE_TESTING}; + $ENV{PERL_MM_USE_DEFAULT} = 1 unless defined $ENV{PERL_MM_USE_DEFAULT}; + } =item run() @@ -424,13 +494,15 @@ sub run $class->_process_setup_options( $options ); + $class->_setup_environment( $options ); + OPTION: foreach my $option ( @option_order ) { next unless $options->{$option}; my( $sub, $takes_args, $description ) = map { $Method_table{$option}[ $Method_table_index{$_} ] } - qw( code takes_args ); + qw( code takes_args description ); unless( ref $sub eq ref sub {} ) { @@ -464,6 +536,7 @@ sub _init_logger unless( $log4perl_loaded ) { + print "Loading internal null logger. Install Log::Log4perl for logging messages\n"; $logger = Local::Null::Logger->new; return $logger; } @@ -494,7 +567,7 @@ sub _default # we'll deal with 'f' (force) later, so skip it foreach my $option ( @CPAN_OPTIONS ) { - next if $option eq 'f'; + next if ( $option eq 'f' or $option eq 'T' ); next unless $options->{$option}; $switch = $option; last; @@ -512,24 +585,30 @@ sub _default my $method = $CPAN_METHODS{$switch}; die "CPAN.pm cannot $method!\n" unless CPAN::Shell->can( $method ); - # call the CPAN::Shell method, with force if specified + # call the CPAN::Shell method, with force or notest if specified my $action = do { - if( $options->{f} ) { sub { CPAN::Shell->force( $method, @_ ) } } - else { sub { CPAN::Shell->$method( @_ ) } } + if( $options->{f} ) { sub { CPAN::Shell->force( $method, @_ ) } } + elsif( $options->{T} ) { sub { CPAN::Shell->notest( $method, @_ ) } } + else { sub { CPAN::Shell->$method( @_ ) } } }; # How do I handle exit codes for multiple arguments? - my $errors = 0; + my @errors = (); foreach my $arg ( @$args ) { _clear_cpanpm_output(); $action->( $arg ); - $errors += defined _cpanpm_output_indicates_failure(); + my $error = _cpanpm_output_indicates_failure(); + push @errors, $error if $error; } - $errors ? I_DONT_KNOW_WHAT_HAPPENED : HEY_IT_WORKED; + return do { + if( @errors ) { $errors[0] } + else { HEY_IT_WORKED } + }; + } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @@ -571,21 +650,32 @@ sub _clear_cpanpm_output { $scalar = '' } sub _get_cpanpm_output { $scalar } +# These are lines I don't care about in CPAN.pm output. If I can +# filter out the informational noise, I have a better chance to +# catch the error signal my @skip_lines = ( qr/^\QWarning \(usually harmless\)/, qr/\bwill not store persistent state\b/, qr(//hint//), qr/^\s+reports\s+/, + qr/^Try the command/, + qr/^\s+$/, + qr/^to find objects/, + qr/^\s*Database was generated on/, + qr/^Going to read/, + qr|^\s+i\s+/|, # the i /Foo::Whatever/ line when it doesn't know ); sub _get_cpanpm_last_line { my $fh; - if ($] < 5.008) { - $fh = IO::Scalar->new(\ $scalar); - } else { - eval q{open $fh, "<", \\ $scalar;}; - } + + if( $] < 5.008 ) { + $fh = IO::Scalar->new( \ $scalar ); + } + else { + eval q{ open $fh, '<', \\ $scalar; }; + } my @lines = <$fh>; @@ -611,13 +701,16 @@ sub _get_cpanpm_last_line BEGIN { my $epic_fail_words = join '|', - qw( Error stop(?:ping)? problems force not unsupported fail(?:ed)? ); + qw( Error stop(?:ping)? problems force not unsupported + fail(?:ed)? Cannot\s+install ); sub _cpanpm_output_indicates_failure { my $last_line = _get_cpanpm_last_line(); my $result = $last_line =~ /\b(?:$epic_fail_words)\b/i; + return A_MODULE_FAILED_TO_INSTALL if $last_line =~ /\b(?:Cannot\s+install)\b/i; + $result || (); } } @@ -817,7 +910,6 @@ sub _is_pingable_scheme { sub _find_good_mirrors { require CPAN::Mirrors; - my $mirrors = CPAN::Mirrors->new; my $file = do { my $file = 'MIRRORED.BY'; my $local_path = File::Spec->catfile( @@ -830,11 +922,10 @@ sub _find_good_mirrors { $local_path; } }; - - $mirrors->parse_mirrored_by( $file ); + my $mirrors = CPAN::Mirrors->new( $file ); my @mirrors = $mirrors->best_mirrors( - how_many => 3, + how_many => 5, verbose => 1, ); @@ -843,6 +934,9 @@ sub _find_good_mirrors { _print_ping_report( $mirror->http ); } + $CPAN::Config->{urllist} = [ + map { $_->http } @mirrors + ]; } sub _print_inc_dir_report @@ -859,9 +953,10 @@ sub _print_ping_report my( $mirror ) = @_; my $rtt = eval { _get_ping_report( $mirror ) }; + my $result = $rtt ? sprintf "+ (%4d ms)", $rtt * 1000 : '!'; $logger->info( - sprintf "\t%s (%4d ms) %s", $rtt ? '+' : '!', $rtt * 1000, $mirror + sprintf "\t%s %s", $result, $mirror ); } @@ -908,6 +1003,19 @@ sub _load_local_lib # -I return HEY_IT_WORKED; } +sub _use_these_mirrors # -M + { + $logger->debug( "Setting per session mirrors" ); + unless( $_[0] ) { + $logger->die( "The -M switch requires a comma-separated list of mirrors" ); + } + + $CPAN::Config->{urllist} = [ split /,/, $_[0] ]; + + $logger->debug( "Mirrors are @{$CPAN::Config->{urllist}}" ); + + } + sub _create_autobundle { $logger->info( @@ -1157,9 +1265,9 @@ sub _show_Details print "$arg\n", "-" x 73, "\n\t"; print join "\n\t", $module->description ? $module->description : "(no description)", - $module->cpan_file, - $module->inst_file, - 'Installed: ' . $module->inst_version, + $module->cpan_file ? $module->cpan_file : "(no cpanfile)", + $module->inst_file ? $module->inst_file :"(no installation file)" , + 'Installed: ' . ($module->inst_version ? $module->inst_version : "not installed"), 'CPAN: ' . $module->cpan_version . ' ' . ($module->uptodate ? "" : "Not ") . "up to date", $author->fullname . " (" . $module->userid . ")", @@ -1306,7 +1414,7 @@ sub _eval_version sub _path_to_module { my( $inc, $path ) = @_; - return if length $path< length $inc; + return if length $path < length $inc; my $module_path = substr( $path, length $inc ); $module_path =~ s/\.pm\z//; @@ -1348,14 +1456,10 @@ correctly if Log4perl is not installed. * When I capture CPAN.pm output, I need to check for errors and report them to the user. -* Support local::lib - * Warnings switch * Check then exit -* ping mirrors support - * no test option =head1 BUGS @@ -1364,14 +1468,16 @@ report them to the user. =head1 SEE ALSO -Most behaviour, including environment variables and configuration, -comes directly from CPAN.pm. +L, L =head1 SOURCE AVAILABILITY -This code is in Github: +This code is in Github in the CPAN.pm repository: + + https://github.com/andk/cpanpm - git://github.com/briandfoy/cpan_script.git +The source used to be tracked separately in another GitHub repo, +but the canonical source is now in the above repo. =head1 CREDITS @@ -1391,7 +1497,7 @@ brian d foy, C<< >> =head1 COPYRIGHT -Copyright (c) 2001-2013, brian d foy, All Rights Reserved. +Copyright (c) 2001-2014, brian d foy, All Rights Reserved. You may redistribute this under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/App/Prove.pm b/Master/tlpkg/tlperl/lib/App/Prove.pm index 44aaf6dda30..46089782869 100644 --- a/Master/tlpkg/tlperl/lib/App/Prove.pm +++ b/Master/tlpkg/tlperl/lib/App/Prove.pm @@ -3,7 +3,7 @@ package App::Prove; use strict; use warnings; -use TAP::Harness; +use TAP::Harness::Env; use Text::ParseWords qw(shellwords); use File::Spec; use Getopt::Long; @@ -18,11 +18,11 @@ App::Prove - Implements the C command. =head1 VERSION -Version 3.30 +Version 3.35 =cut -our $VERSION = '3.30'; +our $VERSION = '3.35'; =head1 DESCRIPTION @@ -88,7 +88,6 @@ sub _initialize { for my $key (@is_array) { $self->{$key} = []; } - $self->{harness_class} = 'TAP::Harness'; for my $attr (@ATTR) { if ( exists $args->{$attr} ) { @@ -98,13 +97,6 @@ sub _initialize { } } - my %env_provides_default = ( - HARNESS_TIMER => 'timer', - ); - - while ( my ( $env, $attr ) = each %env_provides_default ) { - $self->{$attr} = 1 if $ENV{$env}; - } $self->state_class('App::Prove::State'); return $self; } @@ -386,8 +378,9 @@ sub _get_args { } $args{rules} = { par => [@rules] }; } + $args{harness_class} = $self->{harness_class} if $self->{harness_class}; - return ( \%args, $self->{harness_class} ); + return \%args; } sub _find_module { @@ -533,8 +526,8 @@ sub _get_tests { } sub _runtests { - my ( $self, $args, $harness_class, @tests ) = @_; - my $harness = $harness_class->new($args); + my ( $self, $args, @tests ) = @_; + my $harness = TAP::Harness::Env->create($args); my $state = $self->state_manager; @@ -573,8 +566,6 @@ sub _get_switches { push @switches, '-w'; } - push @switches, shellwords( $ENV{HARNESS_PERL_SWITCHES} ) if defined $ENV{HARNESS_PERL_SWITCHES}; - return @switches ? \@switches : (); } @@ -643,6 +634,7 @@ current Perl. sub print_version { my $self = shift; + require TAP::Harness; printf( "TAP::Harness v%s and Perl v%vd\n", $TAP::Harness::VERSION, $^V diff --git a/Master/tlpkg/tlperl/lib/App/Prove/State.pm b/Master/tlpkg/tlperl/lib/App/Prove/State.pm index 519ba01d6c7..0e237d5fa4d 100644 --- a/Master/tlpkg/tlperl/lib/App/Prove/State.pm +++ b/Master/tlpkg/tlperl/lib/App/Prove/State.pm @@ -25,11 +25,11 @@ App::Prove::State - State storage for the C command. =head1 VERSION -Version 3.30 +Version 3.35 =cut -our $VERSION = '3.30'; +our $VERSION = '3.35'; =head1 DESCRIPTION diff --git a/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm b/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm index 8e44ea3a4b1..6725c5a38a5 100644 --- a/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm +++ b/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm @@ -14,11 +14,11 @@ App::Prove::State::Result - Individual test suite results. =head1 VERSION -Version 3.30 +Version 3.35 =cut -our $VERSION = '3.30'; +our $VERSION = '3.35'; =head1 DESCRIPTION diff --git a/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm b/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm index 21f20a12e61..a776f8ffef0 100644 --- a/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm +++ b/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm @@ -9,11 +9,11 @@ App::Prove::State::Result::Test - Individual test results. =head1 VERSION -Version 3.30 +Version 3.35 =cut -our $VERSION = '3.30'; +our $VERSION = '3.35'; =head1 DESCRIPTION diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar.pm b/Master/tlpkg/tlperl/lib/Archive/Tar.pm index 50afbb334b9..1b792df8024 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar.pm @@ -31,7 +31,7 @@ use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD $DEBUG = 0; $WARN = 1; $FOLLOW_SYMLINK = 0; -$VERSION = "1.96"; +$VERSION = "2.04"; $CHOWN = 1; $CHMOD = 1; $SAME_PERMISSIONS = $> == 0 ? 1 : 0; @@ -429,12 +429,13 @@ sub _read_tar { } elsif ($filter && $entry->name !~ $filter) { $skip = 1; + } elsif ($filter_cb && ! $filter_cb->($entry)) { + $skip = 2; + ### skip this entry if it's a pax header. This is a special file added ### by, among others, git-generated tarballs. It holds comments and is ### not meant for extracting. See #38932: pax_global_header extracted } elsif ( $entry->name eq PAX_HEADER or $entry->type =~ /^(x|g)$/ ) { - $skip = 2; - } elsif ($filter_cb && ! $filter_cb->($entry)) { $skip = 3; } @@ -519,13 +520,14 @@ sub _read_tar { if ($filter && $entry->name !~ $filter) { next LOOP; + } elsif ($filter_cb && ! $filter_cb->($entry)) { + next LOOP; + ### skip this entry if it's a pax header. This is a special file added ### by, among others, git-generated tarballs. It holds comments and is ### not meant for extracting. See #38932: pax_global_header extracted } elsif ( $entry->name eq PAX_HEADER or $entry->type =~ /^(x|g)$/ ) { next LOOP; - } elsif ($filter_cb && ! $filter_cb->($entry)) { - next LOOP; } if ( $extract && !$entry->is_longlink diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm b/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm index 957ac278adc..399aaf69707 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm @@ -3,7 +3,7 @@ package Archive::Tar::Constant; BEGIN { require Exporter; - $VERSION = '1.96'; + $VERSION = '2.04'; @ISA = qw[Exporter]; require Time::Local if $^O eq "MacOS"; diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm b/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm index 39fca623fab..3aa1b3cd9ae 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm @@ -13,7 +13,7 @@ use Archive::Tar::Constant; use vars qw[@ISA $VERSION]; #@ISA = qw[Archive::Tar]; -$VERSION = '1.96'; +$VERSION = '2.04'; ### set value to 1 to oct() it during the unpack ### diff --git a/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm b/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm index 4ae65d9edb0..17c4bb78fc2 100644 --- a/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm +++ b/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm @@ -4,7 +4,7 @@ use Carp; use warnings; use strict; use vars qw($VERSION $AUTOLOAD); -$VERSION = '0.96'; # remember to update version in POD! +$VERSION = '0.97'; # remember to update version in POD! # $DB::single=1; my %symcache; @@ -13,12 +13,16 @@ sub findsym { return $symcache{$pkg,$ref} if $symcache{$pkg,$ref}; $type ||= ref($ref); no strict 'refs'; - foreach my $sym ( values %{$pkg."::"} ) { + my $symtab = \%{$pkg."::"}; + for ( keys %$symtab ) { for my $sym ( $$symtab{$_} ) { + if (ref $sym && $sym == $ref) { + return $symcache{$pkg,$ref} = \*{"$pkg:\:$_"}; + } use strict; next unless ref ( \$sym ) eq 'GLOB'; return $symcache{$pkg,$ref} = \$sym if *{$sym}{$type} && *{$sym}{$type} == $ref; - } + }} } my %validtype = ( @@ -266,7 +270,7 @@ Attribute::Handlers - Simpler definition of attribute handlers =head1 VERSION -This document describes version 0.96 of Attribute::Handlers. +This document describes version 0.97 of Attribute::Handlers. =head1 SYNOPSIS diff --git a/Master/tlpkg/tlperl/lib/B.pm b/Master/tlpkg/tlperl/lib/B.pm index 952475db2c2..0a7727cec0f 100644 --- a/Master/tlpkg/tlperl/lib/B.pm +++ b/Master/tlpkg/tlperl/lib/B.pm @@ -15,7 +15,7 @@ require Exporter; # walkoptree comes from B.xs BEGIN { - $B::VERSION = '1.48'; + $B::VERSION = '1.58'; @B::EXPORT_OK = (); # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK. @@ -35,7 +35,7 @@ push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs parents comppadlist sv_undef compile_stats timing_info begin_av init_av check_av end_av regex_padav dowarn defstash curstash warnhook diehook inc_gv @optype - @specialsv_name unitcheck_av)); + @specialsv_name unitcheck_av safename)); @B::SV::ISA = 'B::OBJECT'; @B::NULL::ISA = 'B::SV'; @@ -60,6 +60,7 @@ push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs @B::OP::ISA = 'B::OBJECT'; @B::UNOP::ISA = 'B::OP'; +@B::UNOP_AUX::ISA = 'B::UNOP'; @B::BINOP::ISA = 'B::UNOP'; @B::LOGOP::ISA = 'B::UNOP'; @B::LISTOP::ISA = 'B::BINOP'; @@ -69,10 +70,12 @@ push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs @B::LOOP::ISA = 'B::LISTOP'; @B::PMOP::ISA = 'B::LISTOP'; @B::COP::ISA = 'B::OP'; +@B::METHOP::ISA = 'B::OP'; @B::SPECIAL::ISA = 'B::OBJECT'; -@B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP); +@B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP + METHOP UNOP_AUX); # bytecode.pl contained the following comment: # Nullsv *must* come first in the following so that the condition # ($$sv == 0) can continue to be used to test (sv == Nullsv). @@ -85,7 +88,11 @@ push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs } sub B::GV::SAFENAME { - my $name = (shift())->NAME; + safename(shift()->NAME); +} + +sub safename { + my $name = shift; # The regex below corresponds to the isCONTROLVAR macro # from toke.c @@ -537,6 +544,13 @@ be used as a string in C source code. Returns a double-quote-surrounded escaped version of STR which can be used as a string in Perl source code. +=item safename(STR) + +This function returns the string with the first character modified if it +is a control character. It converts it to ^X format first, so that "\cG" +becomes "^G". This is used internally by L, but +you can call it directly. + =item class(OBJ) Returns the class of an object without the part of the classname @@ -545,8 +559,8 @@ C<"UNOP"> for example. =item threadsv_names -In a perl compiled for threads, this returns a list of the special -per-thread threadsv variables. +This used to provide support for the old 5.005 threading module. It now +does nothing. =back @@ -725,6 +739,14 @@ unsigned. =item NVX +=item COP_SEQ_RANGE_LOW + +=item COP_SEQ_RANGE_HIGH + +These last two are only valid for pad name SVs. They only existed in the +B::NV class before Perl 5.22. In 5.22 they were moved to the B::PADNAME +class. + =back =head2 B::RV Methods @@ -841,6 +863,22 @@ in the MAGIC. =back +=head2 B::REGEXP Methods + +=over 4 + +=item REGEX + +=item precomp + +=item qr_anoncv + +=item compflags + +The last two were added in Perl 5.22. + +=back + =head2 B::GV Methods =over 4 @@ -894,6 +932,10 @@ If you're working with globs at runtime, and need to disambiguate =item FLAGS +=item GPFLAGS + +This last one is present only in perl 5.22.0 and higher. + =back =head2 B::IO Methods @@ -1053,8 +1095,9 @@ information is no longer stored directly in the hash. =head2 OP-RELATED CLASSES -C, C, C, C, C, C, -C, C, C, C, C. +C, C, C, C, C, +C, C, C, C, C, C, +C, C. These classes correspond in the obvious way to the underlying C structures of similar names. The inheritance hierarchy mimics the @@ -1062,18 +1105,20 @@ underlying C "inheritance": B::OP | - +---------------+--------+--------+-------+ - | | | | | - B::UNOP B::SVOP B::PADOP B::COP B::PVOP - ,' `-. - / `--. - B::BINOP B::LOGOP + +----------+---------+--------+-------+---------+ + | | | | | | + B::UNOP B::SVOP B::PADOP B::COP B::PVOP B::METHOP + | + +---+---+---------+ + | | | + B::BINOP B::LOGOP B::UNOP_AUX | | B::LISTOP - ,' `. - / \ - B::LOOP B::PMOP + | + +---+---+ + | | + B::LOOP B::PMOP Access methods correspond to the underlying C structure field names, with the leading "class indication" prefix (C<"op_">) removed. @@ -1089,6 +1134,16 @@ data structure. See top of C for more info. =item sibling +=item parent + +Returns the OP's parent. If it has no parent, or if your perl wasn't built +with C<-DPERL_OP_PARENT>, returns NULL. + +Note that the global variable C<$B::OP::does_parent> is undefined on older +perls that don't support the C method, is defined but false on +perls that support the method but were built without C<-DPERL_OP_PARENT>, +and is true otherwise. + =item name This returns the op name as a string (e.g. "add", "rv2av"). @@ -1117,7 +1172,7 @@ This returns the op description from the global C PL_op_desc array =back -=head2 B::UNOP METHOD +=head2 B::UNOP Method =over 4 @@ -1125,7 +1180,28 @@ This returns the op description from the global C PL_op_desc array =back -=head2 B::BINOP METHOD +=head2 B::UNOP_AUX Methods (since 5.22) + +=over 4 + +=item aux_list(cv) + +This returns a list of the elements of the op's aux data structure, +or a null list if there is no aux. What will be returned depends on the +object's type, but will typically be a collection of C, C, +etc. objects. C is the C object representing the sub that the +op is contained within. + +=item string(cv) + +This returns a textual representation of the object (likely to b useful +for deparsing and debugging), or an empty string if the op type doesn't +support this. C is the C object representing the sub that the +op is contained within. + +=back + +=head2 B::BINOP Method =over 4 @@ -1133,7 +1209,7 @@ This returns the op description from the global C PL_op_desc array =back -=head2 B::LOGOP METHOD +=head2 B::LOGOP Method =over 4 @@ -1141,7 +1217,7 @@ This returns the op description from the global C PL_op_desc array =back -=head2 B::LISTOP METHOD +=head2 B::LISTOP Method =over 4 @@ -1177,9 +1253,16 @@ Only when perl was compiled with ithreads. Since perl 5.17.1 +=item pmregexp + +Added in perl 5.22, this method returns the B::REGEXP associated with the +op. While PMOPs do not actually have C fields under threaded +builds, this method returns the regexp under threads nonetheless, for +convenience. + =back -=head2 B::SVOP METHOD +=head2 B::SVOP Methods =over 4 @@ -1189,7 +1272,7 @@ Since perl 5.17.1 =back -=head2 B::PADOP METHOD +=head2 B::PADOP Method =over 4 @@ -1197,7 +1280,7 @@ Since perl 5.17.1 =back -=head2 B::PVOP METHOD +=head2 B::PVOP Method =over 4 @@ -1219,6 +1302,9 @@ Since perl 5.17.1 =head2 B::COP Methods +The C class is used for "nextstate" and "dbstate" ops. As of Perl +5.22, it is also used for "null" ops that started out as COPs. + =over 4 =item label @@ -1247,11 +1333,23 @@ Since perl 5.17.1 =back -=head2 OTHER CLASSES +=head2 B::METHOP Methods (Since Perl 5.22) -Perl 5.18 introduces a new class, B::PADLIST, returned by B::CV's +=over 4 + +=item first + +=item meth_sv + +=back + +=head2 PAD-RELATED CLASSES + +Perl 5.18 introduced a new class, B::PADLIST, returned by B::CV's C method. +Perl 5.22 introduced the B::PADNAMELIST and B::PADNAME classes. + =head2 B::PADLIST Methods =over 4 @@ -1260,16 +1358,100 @@ C method. =item ARRAY -A list of pads. The first one contains the names. These are currently -B::AV objects, but that is likely to change in future versions. +A list of pads. The first one contains the names. + +The first one is a B::PADNAMELIST under Perl 5.22, and a B::AV under +earlier versions. The rest are currently B::AV objects, but that could +change in future versions. =item ARRAYelt Like C, but takes an index as an argument to get only one element, rather than a list of all of them. +=item NAMES + +This method, introduced in 5.22, returns the B::PADNAMELIST. It is +equivalent to C with a 0 argument. + +=item REFCNT + +=item id + +This method, introduced in 5.22, returns an ID shared by clones of the same +padlist. + +=item outid + +This method, also added in 5.22, returns the ID of the outer padlist. + +=back + +=head2 B::PADNAMELIST Methods + +=over 4 + +=item MAX + +=item ARRAY + +=item ARRAYelt + +These two methods return the pad names, using B::SPECIAL objects for null +pointers and B::PADNAME objects otherwise. + +=item REFCNT + +=back + +=head2 B::PADNAME Methods + +=over 4 + +=item PV + +=item PVX + +=item LEN + =item REFCNT +=item FLAGS + +For backward-compatibility, if the PADNAMEt_OUTER flag is set, the FLAGS +method adds the SVf_FAKE flag, too. + +=item TYPE + +A B::HV object representing the stash for a typed lexical. + +=item SvSTASH + +A backward-compatibility alias for TYPE. + +=item OURSTASH + +A B::HV object representing the stash for 'our' variables. + +=item PROTOCV + +The prototype CV for a 'my' sub. + +=item COP_SEQ_RANGE_LOW + +=item COP_SEQ_RANGE_HIGH + +Sequence numbers representing the scope within which a lexical is visible. +Meaningless if PADNAMEt_OUTER is set. + +=item PARENT_PAD_INDEX + +Only meaningful if PADNAMEt_OUTER is set. + +=item PARENT_FAKELEX_FLAGS + +Only meaningful if PADNAMEt_OUTER is set. + =back =head2 $B::overlay diff --git a/Master/tlpkg/tlperl/lib/B/Concise.pm b/Master/tlpkg/tlperl/lib/B/Concise.pm index 6c818a4e463..311e0e738a9 100644 --- a/Master/tlpkg/tlperl/lib/B/Concise.pm +++ b/Master/tlpkg/tlperl/lib/B/Concise.pm @@ -14,7 +14,7 @@ use warnings; # uses #3 and #4, since warnings uses Carp use Exporter (); # use #5 -our $VERSION = "0.992"; +our $VERSION = "0.996"; our @ISA = qw(Exporter); our @EXPORT_OK = qw( set_style set_style_standard add_callback concise_subref concise_cv concise_main @@ -400,7 +400,8 @@ my $lastnext; # remembers op-chain, used to insert gotos my %opclass = ('OP' => "0", 'UNOP' => "1", 'BINOP' => "2", 'LOGOP' => "|", 'LISTOP' => "@", 'PMOP' => "/", 'SVOP' => "\$", 'GVOP' => "*", - 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";", 'PADOP' => "#"); + 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";", 'PADOP' => "#", + 'METHOP' => '.', UNOP_AUX => '+'); no warnings 'qw'; # "Possible attempt to put comments..."; use #7 my @linenoise = @@ -471,7 +472,12 @@ sub walk_topdown { } } if (class($op) eq "PMOP") { - my $maybe_root = $op->pmreplroot; + my $maybe_root = $op->code_list; + if ( ref($maybe_root) and $maybe_root->isa("B::OP") + and not $op->flags & OPf_KIDS) { + walk_topdown($maybe_root, $sub, $level + 1); + } + $maybe_root = $op->pmreplroot; if (ref($maybe_root) and $maybe_root->isa("B::OP")) { # It really is the root of the replacement, not something # else stored here for lack of space elsewhere @@ -527,29 +533,15 @@ sub sequence { for (; $$op; $op = $op->next) { last if exists $sequence_num{$$op}; my $name = $op->name; - if ($name =~ /^(null|scalar|lineseq|scope)$/) { - next if $oldop and $ {$op->next}; - } else { - $sequence_num{$$op} = $seq_max++; - if (class($op) eq "LOGOP") { - my $other = $op->other; - $other = $other->next while $other->name eq "null"; - sequence($other); - } elsif (class($op) eq "LOOP") { - my $redoop = $op->redoop; - $redoop = $redoop->next while $redoop->name eq "null"; - sequence($redoop); - my $nextop = $op->nextop; - $nextop = $nextop->next while $nextop->name eq "null"; - sequence($nextop); - my $lastop = $op->lastop; - $lastop = $lastop->next while $lastop->name eq "null"; - sequence($lastop); - } elsif ($name eq "subst" and $ {$op->pmreplstart}) { - my $replstart = $op->pmreplstart; - $replstart = $replstart->next while $replstart->name eq "null"; - sequence($replstart); - } + $sequence_num{$$op} = $seq_max++; + if (class($op) eq "LOGOP") { + sequence($op->other); + } elsif (class($op) eq "LOOP") { + sequence($op->redoop); + sequence( $op->nextop); + sequence($op->lastop); + } elsif ($name eq "subst" and $ {$op->pmreplstart}) { + sequence($op->pmreplstart); } $oldop = $op; } @@ -592,73 +584,13 @@ sub fmt_line { # generate text-line for op. return $text; # suppress empty lines } -our %priv; # used to display each opcode's BASEOP.op_private values - -$priv{$_}{128} = "LVINTRO" - for qw(pos substr vec threadsv gvsv rv2sv rv2hv rv2gv rv2av rv2arylen - aelem helem aslice hslice padsv padav padhv enteriter entersub - padrange pushmark); -$priv{$_}{64} = "REFC" for qw(leave leavesub leavesublv leavewrite); -$priv{$_}{128} = "LV" for qw(leave leaveloop); -@{$priv{aassign}}{32,64} = qw(STATE COMMON); -@{$priv{sassign}}{32,64,128} = qw(STATE BKWARD CV2GV); -$priv{$_}{64} = "RTIME" for qw(match subst substcont qr); -@{$priv{$_}}{1,2,4,8,16,64} = qw(UTF IDENT SQUASH DEL COMPL GROWS) - for qw(trans transr); -$priv{repeat}{64} = "DOLIST"; -$priv{leaveloop}{64} = "CONT"; -@{$priv{$_}}{32,64,96} = qw(DREFAV DREFHV DREFSV) - for qw(rv2gv rv2sv padsv aelem helem); -$priv{$_}{16} = "STATE" for qw(padav padhv padsv); -@{$priv{rv2gv}}{4,16} = qw(NOINIT FAKE); -@{$priv{entersub}}{1,4,16,32,64} = qw(INARGS TARG DBG DEREF); -@{$priv{rv2cv}}{1,8,128} = qw(CONST AMPER NO()); -$priv{gv}{32} = "EARLYCV"; -$priv{$_}{16} = "LVDEFER" for qw(aelem helem); -$priv{$_}{16} = "OURINTR" for qw(gvsv rv2sv rv2av rv2hv r2gv enteriter); -$priv{$_}{8} = "LVSUB" - for qw(rv2av rv2gv rv2hv padav padhv aelem helem aslice hslice - av2arylen keys rkeys substr pos vec); -$priv{$_}{4} = "SLICEWARN" - for qw(rv2hv rv2av padav padhv hslice aslice); -@{$priv{$_}}{32,64} = qw(BOOL BOOL?) for qw(rv2hv padhv); -$priv{substr}{16} = "REPL1ST"; -$priv{$_}{16} = "TARGMY" - for map(($_,"s$_"), qw(chop chomp)), - map(($_,"i_$_"), qw(postinc postdec multiply divide modulo add - subtract negate)), - qw(pow concat stringify left_shift right_shift bit_and bit_xor - bit_or complement atan2 sin cos rand exp log sqrt int hex oct - abs length index rindex sprintf ord chr crypt quotemeta join - push unshift flock chdir chown chroot unlink chmod utime rename - link symlink mkdir rmdir wait waitpid system exec kill getppid - getpgrp setpgrp getpriority setpriority time sleep); -$priv{$_}{4} = "REVERSED" for qw(enteriter iter); -@{$priv{const}}{2,4,8,16,64} = qw(NOVER SHORT STRICT ENTERED BARE); -$priv{$_}{64} = "LINENUM" for qw(flip flop); -$priv{list}{64} = "GUESSED"; -$priv{delete}{64} = "SLICE"; -$priv{exists}{64} = "SUB"; -@{$priv{sort}}{1,2,4,8,16,32,64} = qw(NUM INT REV INPLACE DESC QSORT STABLE); -$priv{reverse}{8} = "INPLACE"; -$priv{threadsv}{64} = "SVREFd"; -@{$priv{$_}}{16,32,64,128} = qw(INBIN INCR OUTBIN OUTCR) - for qw(open backtick); -$priv{$_}{32} = "HUSH" for qw(nextstate dbstate); -$priv{$_}{2} = "FTACCESS" - for qw(ftrread ftrwrite ftrexec fteread ftewrite fteexec); -@{$priv{entereval}}{2,4,8,16} = qw(HAS_HH UNI BYTES COPHH); -@{$priv{$_}}{4,8,16} = qw(FTSTACKED FTSTACKING FTAFTERt) - for qw(ftrread ftrwrite ftrexec fteread ftewrite fteexec ftis fteowned - ftrowned ftzero ftsize ftmtime ftatime ftctime ftsock ftchr - ftblk ftfile ftdir ftpipe ftlink ftsuid ftsgid ftsvtx fttty - fttext ftbinary); -$priv{$_}{2} = "GREPLEX" - for qw(mapwhile mapstart grepwhile grepstart); -$priv{$_}{128} = "+1" for qw(caller wantarray runcv); -@{$priv{coreargs}}{1,2,64,128} = qw(DREF1 DREF2 $MOD MARK); -$priv{$_}{128} = "UTF" for qw(last redo next goto dump); -$priv{split}{128} = "IMPLIM"; + + +# use require rather than use here to avoid disturbing tests that dump +# BEGIN blocks +require B::Op_private; + + our %hints; # used to display each COP's op_hints values @@ -688,9 +620,61 @@ sub _flags { return join(",", @s); } +# return a string like 'LVINTRO,1' for the op $name with op_private +# value $x + sub private_flags { my($name, $x) = @_; - _flags($priv{$name}, $x); + my $entry = $B::Op_private::bits{$name}; + return $x ? "$x" : '' unless $entry; + + my @flags; + my $bit; + for ($bit = 7; $bit >= 0; $bit--) { + next unless exists $entry->{$bit}; + my $e = $entry->{$bit}; + if (ref($e) eq 'HASH') { + # bit field + + my ($bitmin, $bitmax, $bitmask, $enum, $label) = + @{$e}{qw(bitmin bitmax bitmask enum label)}; + $bit = $bitmin; + next if defined $label && $label eq '-'; # display as raw number + + my $val = $x & $bitmask; + $x &= ~$bitmask; + $val >>= $bitmin; + + if (defined $enum) { + # try to convert numeric $val into symbolic + my @enum = @$enum; + while (@enum) { + my $ix = shift @enum; + my $name = shift @enum; + my $label = shift @enum; + if ($val == $ix) { + $val = $label; + last; + } + } + } + next if $val eq '0'; # don't display anonymous zero values + push @flags, defined $label ? "$label=$val" : $val; + + } + else { + # flag bit + my $label = $B::Op_private::labels{$e}; + next if defined $label && $label eq '-'; # display as raw number + if ($x & (1<<$bit)) { + $x -= (1<<$bit); + push @flags, $label; + } + } + } + + push @flags, $x if $x; # display unknown bits numerically + return join ",", @flags; } sub hints_flags { @@ -779,23 +763,35 @@ sub concise_op { $h{class} = class($op); $h{extarg} = $h{targ} = $op->targ; $h{extarg} = "" unless $h{extarg}; - if ($h{name} eq "null" and $h{targ}) { - # targ holds the old type - $h{exname} = "ex-" . substr(ppname($h{targ}), 3); + $h{privval} = $op->private; + # for null ops, targ holds the old type + my $origname = $h{name} eq "null" && $h{targ} + ? substr(ppname($h{targ}), 3) + : $h{name}; + $h{private} = private_flags($origname, $op->private); + if ($op->folded) { + $h{private} &&= "$h{private},"; + $h{private} .= "FOLD"; + } + + if ($h{name} ne $origname) { # a null op + $h{exname} = "ex-$origname"; $h{extarg} = ""; - } elsif ($op->name =~ /^leave(sub(lv)?|write)?$/) { - # targ potentially holds a reference count - if ($op->private & 64) { - my $refs = "ref" . ($h{targ} != 1 ? "s" : ""); - $h{targarglife} = $h{targarg} = "$h{targ} $refs"; - } + } elsif ($h{private} =~ /\bREFC\b/) { + # targ holds a reference count + my $refs = "ref" . ($h{targ} != 1 ? "s" : ""); + $h{targarglife} = $h{targarg} = "$h{targ} $refs"; } elsif ($h{targ}) { - my $count = $h{name} eq 'padrange' ? ($op->private & 127) : 1; + my $count = $h{name} eq 'padrange' + ? ($op->private & $B::Op_private::defines{'OPpPADRANGE_COUNTMASK'}) + : 1; my (@targarg, @targarglife); for my $i (0..$count-1) { my ($targarg, $targarglife); my $padname = (($curcv->PADLIST->ARRAY)[0]->ARRAY)[$h{targ}+$i]; - if (defined $padname and class($padname) ne "SPECIAL") { + if (defined $padname and class($padname) ne "SPECIAL" and + $padname->LEN) + { $targarg = $padname->PVX; if ($padname->FLAGS & SVf_FAKE) { # These changes relate to the jumbo closure fix. @@ -892,16 +888,37 @@ sub concise_op { elsif ($h{class} eq "SVOP" or $h{class} eq "PADOP") { unless ($h{name} eq 'aelemfast' and $op->flags & OPf_SPECIAL) { my $idx = ($h{class} eq "SVOP") ? $op->targ : $op->padix; - my $preferpv = $h{name} eq "method_named"; if ($h{class} eq "PADOP" or !${$op->sv}) { my $sv = (($curcv->PADLIST->ARRAY)[1]->ARRAY)[$idx]; - $h{arg} = "[" . concise_sv($sv, \%h, $preferpv) . "]"; + $h{arg} = "[" . concise_sv($sv, \%h, 0) . "]"; $h{targarglife} = $h{targarg} = ""; } else { - $h{arg} = "(" . concise_sv($op->sv, \%h, $preferpv) . ")"; + $h{arg} = "(" . concise_sv($op->sv, \%h, 0) . ")"; } } } + elsif ($h{class} eq "METHOP") { + my $prefix = ''; + if ($h{name} eq 'method_redir' or $h{name} eq 'method_redir_super') { + my $rclass_sv = $op->rclass; + $rclass_sv = (($curcv->PADLIST->ARRAY)[1]->ARRAY)[$rclass_sv] + unless ref $rclass_sv; + $prefix .= 'PACKAGE "'.$rclass_sv->PV.'", '; + } + if ($h{name} ne "method") { + if (${$op->meth_sv}) { + $h{arg} = "($prefix" . concise_sv($op->meth_sv, \%h, 1) . ")"; + } else { + my $sv = (($curcv->PADLIST->ARRAY)[1]->ARRAY)[$op->targ]; + $h{arg} = "[$prefix" . concise_sv($sv, \%h, 1) . "]"; + $h{targarglife} = $h{targarg} = ""; + } + } + } + elsif ($h{class} eq "UNOP_AUX") { + $h{arg} = "(" . $op->string($curcv) . ")"; + } + $h{seq} = $h{hyphseq} = seq($op); $h{seq} = "" if $h{seq} eq "-"; $h{opt} = $op->opt; @@ -916,12 +933,6 @@ sub concise_op { $h{classsym} = $opclass{$h{class}}; $h{flagval} = $op->flags; $h{flags} = op_flags($op->flags); - $h{privval} = $op->private; - $h{private} = private_flags($h{name}, $op->private); - if ($op->folded) { - $h{private} &&= "$h{private},"; - $h{private} .= "FOLD"; - } if ($op->can("hints")) { $h{hintsval} = $op->hints; $h{hints} = hints_flags($h{hintsval}); @@ -1046,8 +1057,7 @@ sub tree { # to update the corresponding magic number in the next line. # Remember, this needs to stay the last things in the module. -# Why is this different for MacOS? Does it matter? -my $cop_seq_mnum = $^O eq 'MacOS' ? 12 : 11; +my $cop_seq_mnum = 16; $cop_seq_base = svref_2object(eval 'sub{0;}')->START->cop_seq + $cop_seq_mnum; 1; @@ -1377,6 +1387,7 @@ B:: namespace that represents the ops in your Perl code. 0 OP (aka BASEOP) An OP with no children 1 UNOP An OP with one child + + UNOP_AUX A UNOP with auxillary fields 2 BINOP An OP with two children | LOGOP A control branch OP @ LISTOP An OP that could have lots of children @@ -1386,6 +1397,7 @@ B:: namespace that represents the ops in your Perl code. { LOOP An OP that holds pointers for a loop ; COP An OP that marks the start of a statement # PADOP An OP with a GV on the pad + . METHOP An OP with method call info =head2 OP flags abbreviations @@ -1413,10 +1425,7 @@ Private flags, if any are set for an opcode, are displayed after a '/' They're opcode specific, and occur less often than the public ones, so they're represented by short mnemonics instead of single-chars; see -F for gory details, or try this quick 2-liner: - - $> perl -MB::Concise -de 1 - DB<1> |x \%B::Concise::priv +B::Op_private and F for more details. =head1 FORMATTING SPECIFICATIONS diff --git a/Master/tlpkg/tlperl/lib/B/Debug.pm b/Master/tlpkg/tlperl/lib/B/Debug.pm index c4a1a33afa6..fd66405bac3 100644 --- a/Master/tlpkg/tlperl/lib/B/Debug.pm +++ b/Master/tlpkg/tlperl/lib/B/Debug.pm @@ -1,6 +1,6 @@ package B::Debug; -our $VERSION = '1.19'; +our $VERSION = '1.23'; use strict; require 5.006; @@ -36,7 +36,11 @@ sub _printop { my $op = shift; my $addr = ${$op} ? $op->ppaddr : ''; $addr =~ s/^PL_ppaddr// if $addr; - return sprintf "0x%08x %6s %s", ${$op}, ${$op} ? class($op) : '', $addr; + if (${$op}) { + return sprintf "0x%08x %6s %s", ${$op}, class($op), $addr; + } else { + return sprintf "0x%x %6s %s", ${$op}, '', $addr; + } } sub B::OP::debug { @@ -151,6 +155,18 @@ sub B::SVOP::debug { $op->sv->debug; } +sub B::METHOP::debug { + my ($op) = @_; + $op->B::OP::debug(); + if (${$op->first}) { + printf "\top_first\t0x%x\n", ${$op->first}; + $op->first->debug; + } else { + printf "\top_meth_sv\t0x%x\n", ${$op->meth_sv}; + $op->meth_sv->debug; + } +} + sub B::PVOP::debug { my ($op) = @_; $op->B::OP::debug(); @@ -361,7 +377,7 @@ EOT sub B::SPECIAL::debug { my $sv = shift; my $i = ref $sv ? $$sv : 0; - print exists $specialsv_name[$i] ? $specialsv_name[$i] : "", "\n"; + print defined $specialsv_name[$i] ? $specialsv_name[$i] : "", "\n"; } sub B::PADLIST::debug { @@ -376,6 +392,7 @@ EOT sub compile { my $order = shift; B::clearsym(); + $DB::single = 1 if defined &DB::DB; if ($order && $order eq "exec") { return sub { walkoptree_exec(main_start, "debug") } } else { @@ -413,7 +430,7 @@ Reini Urban C =head1 LICENSE Copyright (c) 1996, 1997 Malcolm Beattie -Copyright (c) 2008, 2010, 2013 Reini Urban +Copyright (c) 2008, 2010, 2013, 2014 Reini Urban This program is free software; you can redistribute it and/or modify it under the terms of either: diff --git a/Master/tlpkg/tlperl/lib/B/Deparse.pm b/Master/tlpkg/tlperl/lib/B/Deparse.pm index e7eb8cf90d3..d4c6f6061ac 100644 --- a/Master/tlpkg/tlperl/lib/B/Deparse.pm +++ b/Master/tlpkg/tlperl/lib/B/Deparse.pm @@ -11,16 +11,42 @@ package B::Deparse; use Carp; use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST - OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD + OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD OPf_PARENS OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY - OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER - OPpSORT_REVERSE + OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER OPpREPEAT_DOLIST + OPpSORT_REVERSE OPpMULTIDEREF_EXISTS OPpMULTIDEREF_DELETE SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG + SVs_PADTMP SVpad_TYPED CVf_METHOD CVf_LVALUE PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE - PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED); -$VERSION = '1.26'; + PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED PMf_EXTENDED_MORE + PADNAMEt_OUTER + MDEREF_reload + MDEREF_AV_pop_rv2av_aelem + MDEREF_AV_gvsv_vivify_rv2av_aelem + MDEREF_AV_padsv_vivify_rv2av_aelem + MDEREF_AV_vivify_rv2av_aelem + MDEREF_AV_padav_aelem + MDEREF_AV_gvav_aelem + MDEREF_HV_pop_rv2hv_helem + MDEREF_HV_gvsv_vivify_rv2hv_helem + MDEREF_HV_padsv_vivify_rv2hv_helem + MDEREF_HV_vivify_rv2hv_helem + MDEREF_HV_padhv_helem + MDEREF_HV_gvhv_helem + MDEREF_ACTION_MASK + MDEREF_INDEX_none + MDEREF_INDEX_const + MDEREF_INDEX_padsv + MDEREF_INDEX_gvsv + MDEREF_INDEX_MASK + MDEREF_FLAG_last + MDEREF_MASK + MDEREF_SHIFT + ); + +$VERSION = '1.35'; use strict; use vars qw/$AUTOLOAD/; use warnings (); @@ -32,9 +58,11 @@ BEGIN { # be to fake up a dummy constant that will never actually be true. foreach (qw(OPpSORT_INPLACE OPpSORT_DESCEND OPpITER_REVERSED OPpCONST_NOVER OPpPAD_STATE PMf_SKIPWHITE RXf_SKIPWHITE - RXf_PMf_CHARSET RXf_PMf_KEEPCOPY + RXf_PMf_CHARSET RXf_PMf_KEEPCOPY CVf_ANONCONST CVf_LOCKED OPpREVERSE_INPLACE OPpSUBSTR_REPL_FIRST - PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES)) { + PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES + OPpLVREF_TYPE OPpLVREF_SV OPpLVREF_AV OPpLVREF_HV + OPpLVREF_CV OPpLVREF_ELEM SVpad_STATE)) { eval { import B $_ }; no strict 'refs'; *{$_} = sub () {0} unless *{$_}{CODE}; @@ -205,7 +233,11 @@ BEGIN { # lib/Tie/File/t/29_downcopy 5 # lib/vars 22 -# Object fields (were globals): +# Object fields: +# +# in_coderef2text: +# True when deparsing via $deparse->coderef2text; false when deparsing the +# main program. # # avoid_local: # (local($a), local($b)) and local($a, $b) have the same internal @@ -221,8 +253,9 @@ BEGIN { # curcvlex: # Cached hash of lexical variables for curcv: keys are # names prefixed with "m" or "o" (representing my/our), and -# each value is an array of pairs, indicating the cop_seq of scopes -# in which a var of that name is valid. +# each value is an array with two elements indicating the cop_seq +# of scopes in which a var of that name is valid and a third ele- +# ment referencing the pad name. # # curcop: # COP for statement being deparsed @@ -231,8 +264,10 @@ BEGIN { # name of the current package for deparsed code # # subs_todo: -# array of [cop_seq, CV, is_format?] for subs and formats we still -# want to deparse +# array of [cop_seq, CV, is_format?, name] for subs and formats we still +# want to deparse. The fourth element is a pad name thingy for lexical +# subs or a string for special blocks. For other subs, it is undef. For +# lexical subs, CV may be undef, indicating a stub declaration. # # protos_todo: # as above, but [name, prototype] for subs that never got a GV @@ -246,12 +281,12 @@ BEGIN { # That means we can omit parentheses from the arguments. It also means we # need to put CORE:: on core functions of the same name. # -# subs_deparsed -# Keeps track of fully qualified names of all deparsed subs. -# # in_subst_repl # True when deparsing the replacement part of a substitution. # +# in_refgen +# True when deparsing the argument to \. +# # parens: -p # linenums: -l # unquote: -q @@ -314,9 +349,19 @@ BEGIN { # \f - flush left (no indent) # \cK - kill following semicolon, if any +# Semicolon handling: +# - Individual statements are not deparsed with trailing semicolons. +# (If necessary, \cK is tacked on to the end.) +# - Whatever code joins statements together or emits them (lineseq, +# scopeop, deparse_root) is responsible for adding semicolons where +# necessary. +# - use statements are deparsed with trailing semicolons because they are +# immediately concatenated with the following statement. +# - indent() removes semicolons wherever it sees \cK. -BEGIN { for (qw[ const stringify rv2sv list glob pushmark null]) { +BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem + nextstate dbstate rv2av rv2hv helem custom ]) { eval "sub OP_\U$_ () { " . opnumber($_) . "}" }} @@ -351,9 +396,6 @@ sub _pessimise_walk { type => OP_PUSHMARK, name => 'pushmark', private => ($op->private & OPpLVAL_INTRO), - next => ($op->flags & OPf_SPECIAL) - ? $op->sibling->first - : $op->sibling, }; } @@ -434,8 +476,9 @@ sub null { sub todo { my $self = shift; - my($cv, $is_form) = @_; - return unless ($cv->FILE eq $0 || exists $self->{files}{$cv->FILE}); + my($cv, $is_form, $name) = @_; + my $cvfile = $cv->FILE//''; + return unless ($cvfile eq $0 || exists $self->{files}{$cvfile}); my $seq; if ($cv->OUTSIDE_SEQ) { $seq = $cv->OUTSIDE_SEQ; @@ -444,28 +487,91 @@ sub todo { } else { $seq = 0; } - push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form]; - unless ($is_form || class($cv->STASH) eq 'SPECIAL') { - $self->{'subs_deparsed'}{$cv->STASH->NAME."::".$cv->GV->NAME} = 1; - } + push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form, $name]; } sub next_todo { my $self = shift; my $ent = shift @{$self->{'subs_todo'}}; my $cv = $ent->[1]; + if (ref $ent->[3]) { # lexical sub + my @text; + + # At this point, we may not yet have deparsed the hints that allow + # lexical subroutines to be recognized. So adjust the current + # hints and deparse them. + # When lex subs cease being experimental, we should be able to + # remove this code. + { + local $^H = $self->{'hints'}; + local %^H = %{ $self->{'hinthash'} || {} }; + local ${^WARNING_BITS} = $self->{'warnings'}; + feature->import("lexical_subs"); + warnings->unimport("experimental::lexical_subs"); + # Here we depend on the fact that individual features + # will always set the feature bundle to ‘custom’ + # (== $feature::hint_mask). If we had another specific bundle + # enabled previously, normalise it. + if (($self->{'hints'} & $feature::hint_mask) + != $feature::hint_mask) + { + if ($self->{'hinthash'}) { + delete $self->{'hinthash'}{$_} + for grep /^feature_/, keys %{$self->{'hinthash'}}; + } + else { $self->{'hinthash'} = {} } + $self->{'hinthash'} + = _features_from_bundle(@$self{'hints','hinthash'}); + } + push @text, $self->declare_hinthash($self->{'hinthash'}, \%^H, + $self->{indent_size}, $^H); + push @text, $self->declare_warnings($self->{'warnings'}, + ${^WARNING_BITS}) + unless ($self->{'warnings'} // 'u') + eq (${^WARNING_BITS } // 'u'); + $self->{'warnings'} = ${^WARNING_BITS}; + $self->{'hints'} = $^H; + $self->{'hinthash'} = {%^H}; + } + + # Now emit the sub itself. + my $padname = $ent->[3]; + my $flags = $padname->FLAGS; + push @text, + !$cv || $ent->[0] <= $padname->COP_SEQ_RANGE_LOW + ? $self->keyword($flags & SVpad_OUR + ? "our" + : $flags & SVpad_STATE + ? "state" + : "my") . " " + : ""; + # XXX We would do $self->keyword("sub"), but ‘my CORE::sub’ + # doesn’t work and ‘my sub’ ignores a &sub in scope. I.e., + # we have a core bug here. + push @text, "sub " . substr $padname->PVX, 1; + if ($cv) { + # my sub foo { } + push @text, " " . $self->deparse_sub($cv); + $text[-1] =~ s/ ;$/;/; + } + else { + # my sub foo; + push @text, ";\n"; + } + return join "", @text; + } my $gv = $cv->GV; - my $name = $self->gv_name($gv); + my $name = $ent->[3] // $self->gv_name($gv); if ($ent->[2]) { - return "format $name =\n" + return $self->keyword("format") . " $name =\n" . $self->deparse_format($ent->[1]). "\n"; } else { - $self->{'subs_declared'}{$name} = 1; + my $use_dec; if ($name eq "BEGIN") { - my $use_dec = $self->begin_is_use($cv); + $use_dec = $self->begin_is_use($cv); if (defined ($use_dec) and $self->{'expand'} < 5) { return () if 0 == length($use_dec); - return $use_dec; + $use_dec =~ s/^(use|no)\b/$self->keyword($1)/e; } } my $l = ''; @@ -475,16 +581,29 @@ sub next_todo { $l = "\n\f#line $line \"$file\"\n"; } my $p = ''; + my $stash; if (class($cv->STASH) ne "SPECIAL") { - my $stash = $cv->STASH->NAME; + $stash = $cv->STASH->NAME; if ($stash ne $self->{'curstash'}) { - $p = "package $stash;\n"; + $p = $self->keyword("package") . " $stash;\n"; $name = "$self->{'curstash'}::$name" unless $name =~ /::/; $self->{'curstash'} = $stash; } - $name =~ s/^\Q$stash\E::(?!\z|.*::)//; } - return "${p}${l}sub $name " . $self->deparse_sub($cv); + if ($use_dec) { + return "$p$l$use_dec"; + } + if ( $name !~ /::/ and $self->lex_in_scope("&$name") + || $self->lex_in_scope("&$name", 1) ) + { + $name = "$self->{'curstash'}::$name"; + } elsif (defined $stash) { + $name =~ s/^\Q$stash\E::(?!\z|.*::)//; + } + my $ret = "${p}${l}" . $self->keyword("sub") . " $name " + . $self->deparse_sub($cv); + $self->{'subs_declared'}{$name} = 1; + return $ret; } } @@ -537,7 +656,7 @@ sub begin_is_use { } $constop = $constop->sibling; return if $constop->name ne "method_named"; - return if $self->const_sv($constop)->PV ne "VERSION"; + return if $self->meth_sv($constop)->PV ne "VERSION"; } $lineseq = $version_op->sibling; @@ -556,7 +675,7 @@ sub begin_is_use { return unless $self->const_sv($svop)->PV eq $module; # Pull out the arguments - for ($svop=$svop->sibling; $svop->name ne "method_named"; + for ($svop=$svop->sibling; index($svop->name, "method_") != 0; $svop = $svop->sibling) { $args .= ", " if length($args); $args .= $self->deparse($svop, 6); @@ -565,7 +684,7 @@ sub begin_is_use { my $use = 'use'; my $method_named = $svop; return if $method_named->name ne "method_named"; - my $method_name = $self->const_sv($method_named)->PV; + my $method_name = $self->meth_sv($method_named)->PV; if ($method_name eq "unimport") { $use = 'no'; @@ -608,8 +727,31 @@ sub stash_subs { }++; my %stash = svref_2object($stash)->ARRAY; while (my ($key, $val) = each %stash) { - my $class = class($val); - if ($class eq "PV") { + my $flags = $val->FLAGS; + if ($flags & SVf_ROK) { + # A reference. Dump this if it is a reference to a CV. If it + # is a constant acting as a proxy for a full subroutine, then + # we may or may not have to dump it. If some form of perl- + # space visible code must have created it, be it a use + # statement, or some direct symbol-table manipulation code that + # we will deparse, then we don’t want to dump it. If it is the + # result of a declaration like sub f () { 42 } then we *do* + # want to dump it. The only way to distinguish these seems + # to be the SVs_PADTMP flag on the constant, which is admit- + # tedly a hack. + my $class = class(my $referent = $val->RV); + if ($class eq "CV") { + $self->todo($referent, 0); + } elsif ( + $class !~ /^(AV|HV|CV|FM|IO|SPECIAL)\z/ + # A more robust way to write that would be this, but B does + # not provide the SVt_ constants: + # ($referent->FLAGS & B::SVTYPEMASK) < B::SVt_PVAV + and $referent->FLAGS & SVs_PADTMP + ) { + push @{$self->{'protos_todo'}}, [$pack . $key, $val]; + } + } elsif ($flags & (SVf_POK|SVf_IOK)) { # Just a prototype. As an ugly but fairly effective way # to find out if it belongs here is to see if the AUTOLOAD # (if any) for the stash was defined in one of our files. @@ -619,20 +761,9 @@ sub stash_subs { my $AF = $A->FILE; next unless $AF eq $0 || exists $self->{'files'}{$AF}; } - push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV]; - } elsif ($class eq "IV" && !($val->FLAGS & SVf_ROK)) { - # Just a name. As above. - # But skip proxy constant subroutines, as some form of perl-space - # visible code must have created them, be it a use statement, or - # some direct symbol-table manipulation code that we will Deparse - my $A = $stash{"AUTOLOAD"}; - if (defined ($A) && class($A) eq "GV" && defined($A->CV) - && class($A->CV) eq "CV") { - my $AF = $A->FILE; - next unless $AF eq $0 || exists $self->{'files'}{$AF}; - } - push @{$self->{'protos_todo'}}, [$pack . $key, undef]; - } elsif ($class eq "GV") { + push @{$self->{'protos_todo'}}, + [$pack . $key, $flags & SVf_POK ? $val->PV: undef]; + } elsif (class($val) eq "GV") { if (class(my $cv = $val->CV) ne "SPECIAL") { next if $self->{'subs_done'}{$$val}++; next if $$val != ${$cv->GV}; # Ignore imposters @@ -655,8 +786,12 @@ sub print_protos { my $ar; my @ret; foreach $ar (@{$self->{'protos_todo'}}) { - my $proto = (defined $ar->[1] ? " (". $ar->[1] . ")" : ""); - push @ret, "sub " . $ar->[0] . "$proto;\n"; + my $body = defined $ar->[1] + ? ref $ar->[1] + ? " () {\n " . $self->const($ar->[1]->RV,0) . ";\n}" + : " (". $ar->[1] . ");" + : ";"; + push @ret, "sub " . $ar->[0] . "$body\n"; } delete $self->{'protos_todo'}; return @ret; @@ -781,8 +916,13 @@ sub compile { my @CHECKs = B::check_av->isa("B::AV") ? B::check_av->ARRAY : (); my @INITs = B::init_av->isa("B::AV") ? B::init_av->ARRAY : (); my @ENDs = B::end_av->isa("B::AV") ? B::end_av->ARRAY : (); - for my $block (@BEGINs, @UNITCHECKs, @CHECKs, @INITs, @ENDs) { - $self->todo($block, 0); + my @names = qw(BEGIN UNITCHECK CHECK INIT END); + my @blocks = \(@BEGINs, @UNITCHECKs, @CHECKs, @INITs, @ENDs); + while (@names) { + my ($name, $blocks) = (shift @names, shift @blocks); + for my $block (@$blocks) { + $self->todo($block, 0, $name); + } } $self->stash_subs(); local($SIG{"__DIE__"}) = @@ -801,8 +941,26 @@ sub compile { my $root = main_root; local $B::overlay = {}; unless (null $root) { - $self->pessimise($root, main_start); - print $self->indent($self->deparse_root($root)), "\n"; + $self->pad_subs($self->{'curcv'}); + # Check for a stub-followed-by-ex-cop, resulting from a program + # consisting solely of sub declarations. For backward-compati- + # bility (and sane output) we don’t want to emit the stub. + # leave + # enter + # stub + # ex-nextstate (or ex-dbstate) + my $kid; + if ( $root->name eq 'leave' + and ($kid = $root->first)->name eq 'enter' + and !null($kid = $kid->sibling) and $kid->name eq 'stub' + and !null($kid = $kid->sibling) and $kid->name eq 'null' + and class($kid) eq 'COP' and null $kid->sibling ) + { + # ignore + } else { + $self->pessimise($root, main_start); + print $self->indent($self->deparse_root($root)), "\n"; + } } my @text; while (scalar(@{$self->{'subs_todo'}})) { @@ -815,9 +973,9 @@ sub compile { my $laststash = defined $self->{'curcop'} ? $self->{'curcop'}->stash->NAME : $self->{'curstash'}; if (defined *{$laststash."::DATA"}{IO}) { - print "package $laststash;\n" + print $self->keyword("package") . " $laststash;\n" unless $laststash eq $self->{'curstash'}; - print "__DATA__\n"; + print $self->keyword("__DATA__") . "\n"; print readline(*{$laststash."::DATA"}); } } @@ -829,6 +987,7 @@ sub coderef2text { croak "Usage: ->coderef2text(CODEREF)" unless UNIVERSAL::isa($sub, "CODE"); $self->init(); + local $self->{in_coderef2text} = 1; return $self->indent($self->deparse_sub(svref_2object($sub))); } @@ -964,6 +1123,9 @@ sub deparse { sub indent { my $self = shift; my $txt = shift; + # \cK also swallows a preceding line break when followed by a + # semicolon. + $txt =~ s/\n\cK;//g; my @lines = split(/\n/, $txt); my $leader = ""; my $level = 0; @@ -992,6 +1154,73 @@ sub indent { return join("\n", @lines); } +sub pad_subs { + my ($self, $cv) = @_; + my $padlist = $cv->PADLIST; + my @names = $padlist->ARRAYelt(0)->ARRAY; + my @values = $padlist->ARRAYelt(1)->ARRAY; + my @todo; + PADENTRY: + for my $ix (0.. $#names) { for $_ ($names[$ix]) { + next if class($_) eq "SPECIAL"; + my $name = $_->PVX; + if (defined $name && $name =~ /^&./) { + my $low = $_->COP_SEQ_RANGE_LOW; + my $flags = $_->FLAGS; + my $outer = $flags & PADNAMEt_OUTER; + if ($flags & SVpad_OUR) { + push @todo, [$low, undef, 0, $_] + # [seq, no cv, not format, padname] + unless $outer; + next; + } + my $protocv = $flags & SVpad_STATE + ? $values[$ix] + : $_->PROTOCV; + if (class ($protocv) ne 'CV') { + my $flags = $flags; + my $cv = $cv; + my $name = $_; + while ($flags & PADNAMEt_OUTER && class ($protocv) ne 'CV') + { + $cv = $cv->OUTSIDE; + next PADENTRY if class($cv) eq 'SPECIAL'; # XXX freed? + my $padlist = $cv->PADLIST; + my $ix = $name->PARENT_PAD_INDEX; + $name = $padlist->NAMES->ARRAYelt($ix); + $flags = $name->FLAGS; + $protocv = $flags & SVpad_STATE + ? $padlist->ARRAYelt(1)->ARRAYelt($ix) + : $name->PROTOCV; + } + } + my $defined_in_this_sub = ${$protocv->OUTSIDE} == $$cv || do { + my $other = $protocv->PADLIST; + $$other && $other->outid == $padlist->id; + }; + if ($flags & PADNAMEt_OUTER) { + next unless $defined_in_this_sub; + push @todo, [$protocv->OUTSIDE_SEQ, $protocv, 0, $_]; + next; + } + my $outseq = $protocv->OUTSIDE_SEQ; + if ($outseq <= $low) { + # defined before its name is visible, so it’s gotta be + # declared and defined at once: my sub foo { ... } + push @todo, [$low, $protocv, 0, $_]; + } + else { + # declared and defined separately: my sub f; sub f { ... } + push @todo, [$low, undef, 0, $_]; + push @todo, [$outseq, $protocv, 0, $_] + if $defined_in_this_sub; + } + } + }} + @{$self->{'subs_todo'}} = + sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}, @todo +} + sub deparse_sub { my $self = shift; my $cv = shift; @@ -1002,11 +1231,12 @@ Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL"); if ($cv->FLAGS & SVf_POK) { $proto = "(". $cv->PV . ") "; } - if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE)) { + if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE|CVf_ANONCONST)) { $proto .= ": "; $proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE; $proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED; $proto .= "method " if $cv->CvFLAGS & CVf_METHOD; + $proto .= "const " if $cv->CvFLAGS & CVf_ANONCONST; } local($self->{'curcv'}) = $cv; @@ -1017,6 +1247,7 @@ Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL"); my $root = $cv->ROOT; local $B::overlay = {}; if (not null $root) { + $self->pad_subs($cv); $self->pessimise($root, $cv->START); my $lineseq = $root->first; if ($lineseq->name eq "lineseq") { @@ -1191,28 +1422,60 @@ sub maybe_parens_func { } } +sub find_our_type { + my ($self, $name) = @_; + $self->populate_curcvlex() if !defined $self->{'curcvlex'}; + my $seq = $self->{'curcop'} ? $self->{'curcop'}->cop_seq : 0; + for my $a (@{$self->{'curcvlex'}{"o$name"}}) { + my ($st, undef, $padname) = @$a; + if ($st >= $seq && $padname->FLAGS & SVpad_TYPED) { + return $padname->SvSTASH->NAME; + } + } + return ''; +} + sub maybe_local { my $self = shift; my($op, $cx, $text) = @_; - my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0; - if ($op->private & (OPpLVAL_INTRO|$our_intro) - and not $self->{'avoid_local'}{$$op}) { - my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our"; - if( $our_local eq 'our' ) { + my $name = $op->name; + my $our_intro = ($name =~ /^(?:(?:gv|rv2)[ash]v|split|refassign + |lv(?:av)?ref)$/x) + ? OPpOUR_INTRO + : 0; + my $lval_intro = $name eq 'split' ? 0 : OPpLVAL_INTRO; + # The @a in \(@a) isn't in ref context, but only when the + # parens are there. + my $need_parens = $self->{'in_refgen'} && $name =~ /[ah]v\z/ + && ($op->flags & (OPf_PARENS|OPf_REF)) == OPf_PARENS; + if ((my $priv = $op->private) & ($lval_intro|$our_intro)) { + my @our_local; + push @our_local, "local" if $priv & $lval_intro; + push @our_local, "our" if $priv & $our_intro; + my $our_local = join " ", map $self->keyword($_), @our_local; + if( $our_local[-1] eq 'our' ) { if ( $text !~ /^\W(\w+::)*\w+\z/ and !utf8::decode($text) || $text !~ /^\W(\w+::)*\w+\z/ ) { die "Unexpected our($text)\n"; } $text =~ s/(\w+::)+//; + + if (my $type = $self->find_our_type($text)) { + $our_local .= ' ' . $type; + } } - if (want_scalar($op)) { + return $need_parens ? "($text)" : $text + if $self->{'avoid_local'}{$$op}; + if ($need_parens) { + return "$our_local($text)"; + } elsif (want_scalar($op)) { return "$our_local $text"; } else { return $self->maybe_parens_func("$our_local", $text, $cx, 16); } } else { - return $text; + return $need_parens ? "($text)" : $text; } } @@ -1236,18 +1499,33 @@ sub padname_sv { sub maybe_my { my $self = shift; - my($op, $cx, $text, $forbid_parens) = @_; + my($op, $cx, $text, $padname, $forbid_parens) = @_; + # The @a in \(@a) isn't in ref context, but only when the + # parens are there. + my $need_parens = !$forbid_parens && $self->{'in_refgen'} + && $op->name =~ /[ah]v\z/ + && ($op->flags & (OPf_PARENS|OPf_REF)) == OPf_PARENS; + # The @a in \my @a must not have parens. + if (!$need_parens && $self->{'in_refgen'}) { + $forbid_parens = 1; + } if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) { - my $my = $op->private & OPpPAD_STATE - ? $self->keyword("state") - : "my"; - if ($forbid_parens || want_scalar($op)) { + # Check $padname->FLAGS for statehood, rather than $op->private, + # because enteriter ops do not carry the flag. + my $my = + $self->keyword($padname->FLAGS & SVpad_STATE ? "state" : "my"); + if ($padname->FLAGS & SVpad_TYPED) { + $my .= ' ' . $padname->SvSTASH->NAME; + } + if ($need_parens) { + return "$my($text)"; + } elsif ($forbid_parens || want_scalar($op)) { return "$my $text"; } else { return $self->maybe_parens_func($my, $text, $cx, 16); } } else { - return $text; + return $need_parens ? "($text)" : $text; } } @@ -1257,7 +1535,8 @@ sub maybe_my { sub AUTOLOAD { if ($AUTOLOAD =~ s/^.*::pp_//) { - warn "unexpected OP_".uc $AUTOLOAD; + warn "unexpected OP_". + ($_[1]->type == OP_CUSTOM ? "CUSTOM ($AUTOLOAD)" : uc $AUTOLOAD); return "XXX"; } else { die "Undefined subroutine $AUTOLOAD called"; @@ -1314,11 +1593,12 @@ sub scopeop { my $top = $kid->first; my $name = $top->name; if ($name eq "and") { - $name = "while"; + $name = $self->keyword("while"); } elsif ($name eq "or") { - $name = "until"; + $name = $self->keyword("until"); } else { # no conditional -> while 1 or until 0 - return $self->deparse($top->first, 1) . " while 1"; + return $self->deparse($top->first, 1) . " " + . $self->keyword("while") . " 1"; } my $cond = $top->first; my $body = $cond->sibling->first; # skip lineseq @@ -1334,7 +1614,10 @@ sub scopeop { } if ($cx > 0) { # inside an expression, (a do {} while for lineseq) my $body = $self->lineseq($op, 0, @kids); - return is_lexical_subs(@kids) ? $body : "do {\n\t$body\n\b}"; + return is_lexical_subs(@kids) + ? $body + : ($self->lex_in_scope("&do") ? "CORE::do" : "do") + . " {\n\t$body\n\b}"; } else { my $lineseq = $self->lineseq($op, $cx, @kids); return (length ($lineseq) ? "$lineseq;" : ""); @@ -1359,8 +1642,10 @@ sub deparse_root { push @kids, $kid; } $self->walk_lineseq($op, \@kids, - sub { print $self->indent($_[0].';'); - print "\n" unless $_[1] == $#kids; + sub { return unless length $_[0]; + print $self->indent($_[0].';'); + print "\n" + unless $_[1] == $#kids; }); } @@ -1381,8 +1666,9 @@ sub walk_lineseq { $i += $kids[$i]->sibling->name eq "unstack" ? 2 : 1); next; } - $expr .= $self->deparse($kids[$i], (@kids != 1)/2); - $expr =~ s/;\n?\z//; + my $expr2 = $self->deparse($kids[$i], (@kids != 1)/2); + $expr2 =~ s/^sub :(?!:)/+sub :/; # statement label otherwise + $expr .= $expr2; $callback->($expr, $i); } } @@ -1397,9 +1683,14 @@ sub gv_name { my $self = shift; my $gv = shift; my $raw = shift; -Carp::confess() unless ref($gv) eq "B::GV"; - my $stash = $gv->STASH->NAME; - my $name = $raw ? $gv->NAME : $gv->SAFENAME; +#Carp::confess() unless ref($gv) eq "B::GV"; + my $cv = $gv->FLAGS & SVf_ROK ? $gv->RV : 0; + my $stash = ($cv || $gv)->STASH->NAME; + my $name = $raw + ? $cv ? $cv->NAME_HEK || $cv->GV->NAME : $gv->NAME + : $cv + ? B::safename($cv->NAME_HEK || $cv->GV->NAME) + : $gv->SAFENAME; if ($stash eq 'main' && $name =~ /^::/) { $stash = '::'; } @@ -1428,12 +1719,12 @@ sub stash_variable { return "$prefix$name" if $name =~ /::/; - unless ($prefix eq '$' || $prefix eq '@' || #' + unless ($prefix eq '$' || $prefix eq '@' || $prefix eq '&' || #' $prefix eq '%' || $prefix eq '$#') { return "$prefix$name"; } - if ($name =~ /^[^\w+-]$/) { + if ($name =~ /^[^[:alpha:]_+-]$/) { if (defined $cx && $cx == 26) { if ($prefix eq '@') { return "$prefix\{$name}"; @@ -1448,6 +1739,41 @@ sub stash_variable { return $prefix . $self->maybe_qualify($prefix, $name); } +my %unctrl = # portable to EBCDIC + ( + "\c@" => '@', # unused + "\cA" => 'A', + "\cB" => 'B', + "\cC" => 'C', + "\cD" => 'D', + "\cE" => 'E', + "\cF" => 'F', + "\cG" => 'G', + "\cH" => 'H', + "\cI" => 'I', + "\cJ" => 'J', + "\cK" => 'K', + "\cL" => 'L', + "\cM" => 'M', + "\cN" => 'N', + "\cO" => 'O', + "\cP" => 'P', + "\cQ" => 'Q', + "\cR" => 'R', + "\cS" => 'S', + "\cT" => 'T', + "\cU" => 'U', + "\cV" => 'V', + "\cW" => 'W', + "\cX" => 'X', + "\cY" => 'Y', + "\cZ" => 'Z', + "\c[" => '[', # unused + "\c\\" => '\\', # unused + "\c]" => ']', # unused + "\c_" => '_', # unused + ); + # Return just the name, without the prefix. It may be returned as a quoted # string. The second return value is a boolean indicating that. sub stash_variable_name { @@ -1455,12 +1781,12 @@ sub stash_variable_name { my $name = $self->gv_name($gv, 1); $name = $self->maybe_qualify($prefix,$name); if ($name =~ /^(?:\S|(?!\d)[\ca-\cz]?(?:\w|::)*|\d+)\z/) { - $name =~ s/^([\ca-\cz])/'^'.($1|'@')/e; + $name =~ s/^([\ca-\cz])/'^' . $unctrl{$1}/e; $name =~ /^(\^..|{)/ and $name = "{$name}"; return $name, 0; # not quoted } else { - single_delim("q", "'", $name), 1; + single_delim("q", "'", $name, $self), 1; } } @@ -1510,6 +1836,7 @@ sub populate_curcvlex { next; } my $name = $ns[$i]->PVX; + next unless defined $name; my ($seq_st, $seq_en) = ($ns[$i]->FLAGS & SVf_FAKE) ? (0, 999999) @@ -1517,7 +1844,7 @@ sub populate_curcvlex { push @{$self->{'curcvlex'}{ ($ns[$i]->FLAGS & SVpad_OUR ? 'o' : 'm') . $name - }}, [$seq_st, $seq_en]; + }}, [$seq_st, $seq_en, $ns[$i]]; } } } @@ -1560,11 +1887,13 @@ sub find_scope { sub cop_subs { my ($self, $op, $out_seq) = @_; my $seq = $op->cop_seq; - # If we have nephews, then our sequence number indicates - # the cop_seq of the end of some sort of scope. - if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS + if ($] < 5.021006) { + # If we have nephews, then our sequence number indicates + # the cop_seq of the end of some sort of scope. + if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS and my $nseq = $self->find_scope_st($op->sibling) ) { $seq = $nseq; + } } $seq = $out_seq if defined($out_seq) && $out_seq < $seq; return $self->seq_subs($seq); @@ -1576,10 +1905,24 @@ sub seq_subs { #push @text, "# ($seq)\n"; return "" if !defined $seq; + my @pending; while (scalar(@{$self->{'subs_todo'}}) and $seq > $self->{'subs_todo'}[0][0]) { + my $cv = $self->{'subs_todo'}[0][1]; + # Skip the OUTSIDE check for lexical subs. We may be deparsing a + # cloned anon sub with lexical subs declared in it, in which case + # the OUTSIDE pointer points to the anon protosub. + my $lexical = ref $self->{'subs_todo'}[0][3]; + my $outside = !$lexical && $cv && $cv->OUTSIDE; + if (!$lexical and $cv + and ${$cv->OUTSIDE || \0} != ${$self->{'curcv'}}) + { + push @pending, shift @{$self->{'subs_todo'}}; + next; + } push @text, $self->next_todo; } + unshift @{$self->{'subs_todo'}}, @pending; return @text; } @@ -1599,9 +1942,13 @@ sub pp_nextstate { $self->{'curcop'} = $op; my @text; push @text, $self->cop_subs($op); + if (@text) { + # Special marker to swallow up the semicolon + push @text, "\cK"; + } my $stash = $op->stashpv; if ($stash ne $self->{'curstash'}) { - push @text, "package $stash;\n"; + push @text, $self->keyword("package") . " $stash;\n"; $self->{'curstash'} = $stash; } @@ -1627,14 +1974,15 @@ sub pp_nextstate { if (defined ($warning_bits) and !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) { - push @text, declare_warnings($self->{'warnings'}, $warning_bits); + push @text, + $self->declare_warnings($self->{'warnings'}, $warning_bits); $self->{'warnings'} = $warning_bits; } my $hints = $] < 5.008009 ? $op->private : $op->hints; my $old_hints = $self->{'hints'}; if ($self->{'hints'} != $hints) { - push @text, declare_hints($self->{'hints'}, $hints); + push @text, $self->declare_hints($self->{'hints'}, $hints); $self->{'hints'} = $hints; } @@ -1661,14 +2009,15 @@ sub pp_nextstate { my $bundle = $feature::hint_bundles[$to >> $feature::hint_shift]; $bundle =~ s/(\d[13579])\z/$1+1/e; # 5.11 => 5.12 - push @text, "no feature;\n", - "use feature ':$bundle';\n"; + push @text, + $self->keyword("no") . " feature ':all';\n", + $self->keyword("use") . " feature ':$bundle';\n"; } } } if ($] > 5.009) { - push @text, declare_hinthash( + push @text, $self->declare_hinthash( $self->{'hinthash'}, $newhh, $self->{indent_size}, $self->{hints}, ); @@ -1678,7 +2027,7 @@ sub pp_nextstate { # This should go after of any branches that add statements, to # increase the chances that it refers to the same line it did in # the original program. - if ($self->{'linenums'}) { + if ($self->{'linenums'} && $cx != .5) { # $cx == .5 means in a format push @text, "\f#line " . $op->line . ' "' . $op->file, qq'"\n'; } @@ -1689,26 +2038,28 @@ sub pp_nextstate { } sub declare_warnings { - my ($from, $to) = @_; + my ($self, $from, $to) = @_; if (($to & WARN_MASK) eq (warnings::bits("all") & WARN_MASK)) { - return "use warnings;\n"; + return $self->keyword("use") . " warnings;\n"; } elsif (($to & WARN_MASK) eq ("\0"x length($to) & WARN_MASK)) { - return "no warnings;\n"; + return $self->keyword("no") . " warnings;\n"; } - return "BEGIN {\${^WARNING_BITS} = ".perlstring($to)."}\n"; + return "BEGIN {\${^WARNING_BITS} = \"" + . join("", map { sprintf("\\x%02x", ord $_) } split "", $to) + . "\"}\n\cK"; } sub declare_hints { - my ($from, $to) = @_; + my ($self, $from, $to) = @_; my $use = $to & ~$from; my $no = $from & ~$to; my $decls = ""; for my $pragma (hint_pragmas($use)) { - $decls .= "use $pragma;\n"; + $decls .= $self->keyword("use") . " $pragma;\n"; } for my $pragma (hint_pragmas($no)) { - $decls .= "no $pragma;\n"; + $decls .= $self->keyword("no") . " $pragma;\n"; } return $decls; } @@ -1727,7 +2078,7 @@ my %ignored_hints = ( my %rev_feature; sub declare_hinthash { - my ($from, $to, $indent, $hints) = @_; + my ($self, $from, $to, $indent, $hints) = @_; my $doing_features = ($hints & $feature::hint_mask) == $feature::hint_mask; my @decls; @@ -1740,10 +2091,10 @@ sub declare_hinthash { if (!exists $from->{$key} or $from->{$key} ne $to->{$key}) { push(@features, $key), next if $is_feature; push @decls, - qq(\$^H{) . single_delim("q", "'", $key) . qq(} = ) + qq(\$^H{) . single_delim("q", "'", $key, $self) . qq(} = ) . ( defined $to->{$key} - ? single_delim("q", "'", $to->{$key}) + ? single_delim("q", "'", $to->{$key}, $self) : 'undef' ) . qq(;); @@ -1763,17 +2114,17 @@ sub declare_hinthash { if (!%rev_feature) { %rev_feature = reverse %feature::feature } } if (@features) { - push @ret, "use feature " + push @ret, $self->keyword("use") . " feature " . join(", ", map "'$rev_feature{$_}'", @features) . ";\n"; } if (@unfeatures) { - push @ret, "no feature " + push @ret, $self->keyword("no") . " feature " . join(", ", map "'$rev_feature{$_}'", @unfeatures) . ";\n"; } @decls and push @ret, - join("\n" . (" " x $indent), "BEGIN {", @decls) . "\n}\n"; + join("\n" . (" " x $indent), "BEGIN {", @decls) . "\n}\n\cK"; return @ret; } @@ -1822,20 +2173,36 @@ my %strong_proto_keywords = map { $_ => 1 } qw( undef ); -sub keyword { - my $self = shift; - my $name = shift; - return $name if $name =~ /^CORE::/; # just in case - if (exists $feature_keywords{$name}) { +sub feature_enabled { + my($self,$name) = @_; my $hh; my $hints = $self->{hints} & $feature::hint_mask; if ($hints && $hints != $feature::hint_mask) { $hh = _features_from_bundle($hints); } elsif ($hints) { $hh = $self->{'hinthash'} } - return "CORE::$name" - if !$hh - || !$hh->{"feature_$feature_keywords{$name}"} + return $hh && $hh->{"feature_$feature_keywords{$name}"} +} + +sub keyword { + my $self = shift; + my $name = shift; + return $name if $name =~ /^CORE::/; # just in case + if (exists $feature_keywords{$name}) { + return "CORE::$name" if not $self->feature_enabled($name); + } + # This sub may be called for a program that has no nextstate ops. In + # that case we may have a lexical sub named no/use/sub in scope but + # but $self->lex_in_scope will return false because it depends on the + # current nextstate op. So we need this alternate method if there is + # no current cop. + if (!$self->{'curcop'}) { + $self->populate_curcvlex() if !defined $self->{'curcvlex'}; + return "CORE::$name" if exists $self->{'curcvlex'}{"m&$name"} + || exists $self->{'curcvlex'}{"o&$name"}; + } elsif ($self->lex_in_scope("&$name") + || $self->lex_in_scope("&$name", 1)) { + return "CORE::$name"; } if ($strong_proto_keywords{$name} || ($name !~ /^(?:chom?p|do|exec|glob|s(?:elect|ystem))\z/ @@ -1857,16 +2224,7 @@ sub baseop { return $self->keyword($name); } -sub pp_stub { - my $self = shift; - my($op, $cx, $name) = @_; - if ($cx >= 1) { - return "()"; - } - else { - return "();"; - } -} +sub pp_stub { "()" } sub pp_wantarray { baseop(@_, "wantarray") } sub pp_fork { baseop(@_, "fork") } sub pp_wait { maybe_targmy(@_, \&baseop, "wait") } @@ -1918,6 +2276,8 @@ sub pp_i_predec { pfixop(@_, "--", 23) } sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) } sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) } sub pp_complement { maybe_targmy(@_, \&pfixop, "~", 21) } +*pp_ncomplement = *pp_complement; +sub pp_scomplement { maybe_targmy(@_, \&pfixop, "~.", 21) } sub pp_negate { maybe_targmy(@_, \&real_negate) } sub real_negate { @@ -1955,13 +2315,17 @@ sub unop { my $builtinname = $name; $builtinname =~ /^CORE::/ or $builtinname = "CORE::$name"; if (defined prototype($builtinname) + && $builtinname ne 'CORE::readline' && prototype($builtinname) =~ /^;?\*/ && $kid->name eq "rv2gv") { $kid = $kid->first; } if ($nollafr) { - ($kid = $self->deparse($kid, 16)) =~ s/^\cS//; + if (($kid = $self->deparse($kid, 16)) !~ s/^\cS//) { + # require foo() is a syntax error. + $kid =~ /^(?!\d)\w/ and $kid = "($kid)"; + } return $self->maybe_parens( $self->keyword($name) . " $kid", $cx, 16 ); @@ -2032,7 +2396,19 @@ sub pp_tell { unop(@_, "tell") } sub pp_getsockname { unop(@_, "getsockname") } sub pp_getpeername { unop(@_, "getpeername") } -sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") } +sub pp_chdir { + my ($self, $op, $cx) = @_; + if (($op->flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS)) { + my $kw = $self->keyword("chdir"); + my $kid = $self->const_sv($op->first)->PV; + my $code = $kw + . ($cx >= 16 || $self->{'parens'} ? "($kid)" : " $kid"); + maybe_targmy(@_, sub { $_[3] }, $code); + } else { + maybe_targmy(@_, \&unop, "chdir") + } +} + sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") } sub pp_readlink { unop(@_, "readlink") } sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") } @@ -2054,7 +2430,7 @@ sub pp_dofile { sub pp_entereval { unop( @_, - $_[1]->private & OPpEVAL_BYTES ? $_[0]->keyword('evalbytes') : "eval" + $_[1]->private & OPpEVAL_BYTES ? 'evalbytes' : "eval" ) } @@ -2104,17 +2480,18 @@ sub pp_exists { my $self = shift; my($op, $cx) = @_; my $arg; + my $name = $self->keyword("exists"); if ($op->private & OPpEXISTS_SUB) { # Checking for the existence of a subroutine - return $self->maybe_parens_func("exists", + return $self->maybe_parens_func($name, $self->pp_rv2cv($op->first, 16), $cx, 16); } if ($op->flags & OPf_SPECIAL) { # Array element, not hash element - return $self->maybe_parens_func("exists", + return $self->maybe_parens_func($name, $self->pp_aelem($op->first, 16), $cx, 16); } - return $self->maybe_parens_func("exists", $self->pp_helem($op->first, 16), + return $self->maybe_parens_func($name, $self->pp_helem($op->first, 16), $cx, 16); } @@ -2122,24 +2499,25 @@ sub pp_delete { my $self = shift; my($op, $cx) = @_; my $arg; + my $name = $self->keyword("delete"); if ($op->private & OPpSLICE) { if ($op->flags & OPf_SPECIAL) { # Deleting from an array, not a hash - return $self->maybe_parens_func("delete", + return $self->maybe_parens_func($name, $self->pp_aslice($op->first, 16), $cx, 16); } - return $self->maybe_parens_func("delete", + return $self->maybe_parens_func($name, $self->pp_hslice($op->first, 16), $cx, 16); } else { if ($op->flags & OPf_SPECIAL) { # Deleting from an array, not a hash - return $self->maybe_parens_func("delete", + return $self->maybe_parens_func($name, $self->pp_aelem($op->first, 16), $cx, 16); } - return $self->maybe_parens_func("delete", + return $self->maybe_parens_func($name, $self->pp_helem($op->first, 16), $cx, 16); } @@ -2149,23 +2527,30 @@ sub pp_require { my $self = shift; my($op, $cx) = @_; my $opname = $op->flags & OPf_SPECIAL ? 'CORE::require' : 'require'; - if (class($op) eq "UNOP" and $op->first->name eq "const" - and $op->first->private & OPpCONST_BARE) - { - my $name = $self->const_sv($op->first)->PV; - $name =~ s[/][::]g; - $name =~ s/\.pm//g; - return $self->maybe_parens("$opname $name", $cx, 16); - } else { - $self->unop( + my $kid = $op->first; + if ($kid->name eq 'const') { + my $priv = $kid->private; + my $sv = $self->const_sv($kid); + my $arg; + if ($priv & OPpCONST_BARE) { + $arg = $sv->PV; + $arg =~ s[/][::]g; + $arg =~ s/\.pm//g; + } elsif ($priv & OPpCONST_NOVER) { + $opname = $self->keyword('no'); + $arg = $self->const($sv, 16); + } elsif ((my $tmp = $self->const($sv, 16)) =~ /^v/) { + $arg = $tmp; + } + if ($arg) { + return $self->maybe_parens("$opname $arg", $cx, 16); + } + } + $self->unop( $op, $cx, - $op->first->name eq 'const' - && $op->first->private & OPpCONST_NOVER - ? "no" - : $opname, + $opname, 1, # llafr does not apply - ); - } + ); } sub pp_scalar { @@ -2222,19 +2607,17 @@ sub pp_refgen { my($op, $cx) = @_; my $kid = $op->first; if ($kid->name eq "null") { - $kid = $kid->first; - if (!null($kid->sibling) and - $kid->sibling->name eq "anoncode") { - return $self->e_anoncode({ code => $self->padval($kid->sibling->targ) }); + my $anoncode = $kid = $kid->first; + if ($anoncode->name eq "anonconst") { + $anoncode = $anoncode->first->first->sibling; + } + if ($anoncode->name eq "anoncode" + or !null($anoncode = $kid->sibling) and + $anoncode->name eq "anoncode") { + return $self->e_anoncode({ code => $self->padval($anoncode->targ) }); } elsif ($kid->name eq "pushmark") { my $sib_name = $kid->sibling->name; - if ($sib_name =~ /^(pad|rv2)[ah]v$/ - and not $kid->sibling->flags & OPf_REF) - { - # The @a in \(@a) isn't in ref context, but only when the - # parens are there. - return "\\(" . $self->pp_list($op->first) . ")"; - } elsif ($sib_name eq 'entersub') { + if ($sib_name eq 'entersub') { my $text = $self->deparse($kid->sibling, 1); # Always show parens for \(&func()), but only with -p otherwise $text = "($text)" if $self->{'parens'} @@ -2243,13 +2626,14 @@ sub pp_refgen { } } } + local $self->{'in_refgen'} = 1; $self->pfixop($op, $cx, "\\", 20); } sub e_anoncode { my ($self, $info) = @_; my $text = $self->deparse_sub($info->{code}); - return "sub " . $text; + return $self->keyword("sub") . " $text"; } sub pp_srefgen { pp_refgen(@_) } @@ -2258,8 +2642,11 @@ sub pp_readline { my $self = shift; my($op, $cx) = @_; my $kid = $op->first; - $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh> - return "<" . $self->deparse($kid, 1) . ">" if is_scalar($kid); + if (is_scalar($kid)) { + my $kid_deparsed = $self->deparse($kid, 1); + return '<<>>' if $op->flags & OPf_SPECIAL and $kid_deparsed eq 'ARGV'; + return "<$kid_deparsed>"; + } return $self->unop($op, $cx, "readline"); } @@ -2300,6 +2687,8 @@ sub loopex { # no-op } elsif (class($op) eq "UNOP") { (my $kid = $self->deparse($op->first, 7)) =~ s/^\cS//; + # last foo() is a syntax error. + $kid =~ /^(?!\d)\w/ and $kid = "($kid)"; $name .= " $kid"; } return $self->maybe_parens($name, $cx, 7); @@ -2398,8 +2787,10 @@ BEGIN { 'subtract' => 18, 'i_subtract' => 18, 'concat' => 18, 'left_shift' => 17, 'right_shift' => 17, - 'bit_and' => 13, + 'bit_and' => 13, 'nbit_and' => 13, 'sbit_and' => 13, 'bit_or' => 12, 'bit_xor' => 12, + 'sbit_or' => 12, 'sbit_xor' => 12, + 'nbit_or' => 12, 'nbit_xor' => 12, 'and' => 3, 'or' => 2, 'xor' => 2, ); @@ -2426,13 +2817,14 @@ BEGIN { 'multiply=' => 7, 'i_multiply=' => 7, 'divide=' => 7, 'i_divide=' => 7, 'modulo=' => 7, 'i_modulo=' => 7, - 'repeat=' => 7, + 'repeat=' => 7, 'refassign' => 7, 'refassign=' => 7, 'add=' => 7, 'i_add=' => 7, 'subtract=' => 7, 'i_subtract=' => 7, 'concat=' => 7, 'left_shift=' => 7, 'right_shift=' => 7, - 'bit_and=' => 7, - 'bit_or=' => 7, 'bit_xor=' => 7, + 'bit_and=' => 7, 'sbit_and=' => 7, 'nbit_and=' => 7, + 'nbit_or=' => 7, 'nbit_xor=' => 7, + 'sbit_or=' => 7, 'sbit_xor=' => 7, 'andassign' => 7, 'orassign' => 7, ); @@ -2463,9 +2855,17 @@ sub binop { if ($flags & SWAP_CHILDREN) { ($left, $right) = ($right, $left); } + my $leftop = $left; $left = $self->deparse_binop_left($op, $left, $prec); $left = "($left)" if $flags & LIST_CONTEXT - && $left !~ /^(my|our|local|)[\@\(]/; + and $left !~ /^(my|our|local|)[\@\(]/ + || do { + # Parenthesize if the left argument is a + # lone repeat op. + my $left = $leftop->first->sibling; + $left->name eq 'repeat' + && null($left->sibling); + }; $right = $self->deparse_binop_right($op, $right, $prec); return $self->maybe_parens("$left $opname$eq $right", $cx, $prec); } @@ -2487,6 +2887,12 @@ sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) } sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) } sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) } sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) } +*pp_nbit_and = *pp_bit_and; +*pp_nbit_or = *pp_bit_or; +*pp_nbit_xor = *pp_bit_xor; +sub pp_sbit_and { maybe_targmy(@_, \&binop, "&.", 13, ASSIGN) } +sub pp_sbit_or { maybe_targmy(@_, \&binop, "|.", 12, ASSIGN) } +sub pp_sbit_xor { maybe_targmy(@_, \&binop, "^.", 12, ASSIGN) } sub pp_eq { binop(@_, "==", 14) } sub pp_ne { binop(@_, "!=", 14) } @@ -2501,7 +2907,7 @@ sub pp_i_lt { binop(@_, "<", 15) } sub pp_i_gt { binop(@_, ">", 15) } sub pp_i_ge { binop(@_, ">=", 15) } sub pp_i_le { binop(@_, "<=", 15) } -sub pp_i_ncmp { binop(@_, "<=>", 14) } +sub pp_i_ncmp { maybe_targmy(@_, \&binop, "<=>", 14) } sub pp_seq { binop(@_, "eq", 14) } sub pp_sne { binop(@_, "ne", 14) } @@ -2509,7 +2915,7 @@ sub pp_slt { binop(@_, "lt", 15) } sub pp_sgt { binop(@_, "gt", 15) } sub pp_sge { binop(@_, "ge", 15) } sub pp_sle { binop(@_, "le", 15) } -sub pp_scmp { binop(@_, "cmp", 14) } +sub pp_scmp { maybe_targmy(@_, \&binop, "cmp", 14) } sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) } sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) } @@ -2544,8 +2950,10 @@ sub real_concat { return $self->maybe_parens("$left .$eq $right", $cx, $prec); } +sub pp_repeat { maybe_targmy(@_, \&repeat) } + # 'x' is weird when the left arg is a list -sub pp_repeat { +sub repeat { my $self = shift; my($op, $cx) = @_; my $left = $op->first; @@ -2557,6 +2965,7 @@ sub pp_repeat { $prec = 7; } if (null($right)) { # list repeat; count is inside left-side ex-list + # in 5.21.5 and earlier my $kid = $left->first->sibling; # skip pushmark my @exprs; for (; !null($kid->sibling); $kid = $kid->sibling) { @@ -2565,7 +2974,11 @@ sub pp_repeat { $right = $kid; $left = "(" . join(", ", @exprs). ")"; } else { - $left = $self->deparse_binop_left($op, $left, $prec); + my $dolist = $op->private & OPpREPEAT_DOLIST; + $left = $self->deparse_binop_left($op, $left, $dolist ? 1 : $prec); + if ($dolist) { + $left = "($left)"; + } } $right = $self->deparse_binop_right($op, $right, $prec); return $self->maybe_parens("$left x$eq $right", $cx, $prec); @@ -2596,6 +3009,7 @@ sub logop { my ($op, $cx, $lowop, $lowprec, $highop, $highprec, $blockname) = @_; my $left = $op->first; my $right = $op->first->sibling; + $blockname &&= $self->keyword($blockname); if ($cx < 1 and is_scope($right) and $blockname and $self->{'expand'} < 7) { # if ($a) {$b} @@ -2701,14 +3115,6 @@ sub listop { return "$exprs[0] = $fullname" . ($parens ? "($exprs[0])" : " $exprs[0]"); } - if ($name =~ /^(system|exec)$/ - && ($op->flags & OPf_STACKED) - && @exprs > 1) - { - # handle the "system prog a1,a2,.." form - my $prog = shift @exprs; - $exprs[0] = "$prog $exprs[0]"; - } if ($parens && $nollafr) { return "($fullname " . join(", ", @exprs) . ")"; @@ -2731,7 +3137,7 @@ sub pp_substr { } maybe_local(@_, listop(@_, "substr")) } -sub pp_vec { maybe_local(@_, listop(@_, "vec")) } +sub pp_vec { maybe_targmy(@_, \&maybe_local, listop(@_, "vec")) } sub pp_index { maybe_targmy(@_, \&listop, "index") } sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") } sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") } @@ -2785,8 +3191,8 @@ sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") } sub pp_open_dir { listop(@_, "opendir") } sub pp_seekdir { listop(@_, "seekdir") } sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") } -sub pp_system { maybe_targmy(@_, \&listop, "system") } -sub pp_exec { maybe_targmy(@_, \&listop, "exec") } +sub pp_system { maybe_targmy(@_, \&indirop, "system") } +sub pp_exec { maybe_targmy(@_, \&indirop, "exec") } sub pp_kill { maybe_targmy(@_, \&listop, "kill") } sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") } sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") } @@ -2919,7 +3325,9 @@ sub indirop { # comparison routine. We have to say sort(...) in that case. return "$name2($args)"; } else { - return $self->maybe_parens_func($name2, $args, $cx, 5); + return length $args + ? $self->maybe_parens_func($name2, $args, $cx, 5) + : $name2 . '()' x (7 < $cx); } } @@ -2947,7 +3355,8 @@ sub mapop { $expr = $self->deparse($kid, 6); push @exprs, $expr if defined $expr; } - return $self->maybe_parens_func($name, $code . join(", ", @exprs), $cx, 5); + return $self->maybe_parens_func($self->keyword($name), + $code . join(", ", @exprs), $cx, 5); } sub pp_mapwhile { mapop(@_, "map") } @@ -2955,6 +3364,18 @@ sub pp_grepwhile { mapop(@_, "grep") } sub pp_mapstart { baseop(@_, "map") } sub pp_grepstart { baseop(@_, "grep") } +my %uses_intro; +BEGIN { + @uses_intro{ + eval { require B::Op_private } + ? @{$B::Op_private::ops_using{OPpLVAL_INTRO}} + : qw(gvsv rv2sv rv2hv rv2gv rv2av aelem helem aslice + hslice delete padsv padav padhv enteriter entersub padrange + pushmark cond_expr refassign list) + } = (); + delete @uses_intro{qw( lvref lvrefslice lvavref entersub )}; +} + sub pp_list { my $self = shift; my($op, $cx) = @_; @@ -2963,48 +3384,61 @@ sub pp_list { return '' if class($kid) eq 'NULL'; my $lop; my $local = "either"; # could be local(...), my(...), state(...) or our(...) + my $type; for ($lop = $kid; !null($lop); $lop = $lop->sibling) { - # This assumes that no other private flags equal 128, and that - # OPs that store things other than flags in their op_private, - # like OP_AELEMFAST, won't be immediate children of a list. - # - # OP_ENTERSUB and OP_SPLIT can break this logic, so check for them. - # I suspect that open and exit can too. - # XXX This really needs to be rewritten to accept only those ops - # known to take the OPpLVAL_INTRO flag. - - if (!($lop->private & (OPpLVAL_INTRO|OPpOUR_INTRO) - or $lop->name eq "undef") - or $lop->name =~ /^(?:entersub|exit|open|split)\z/) - { - $local = ""; # or not - last; - } - if ($lop->name =~ /^pad[ash]v$/) { - if ($lop->private & OPpPAD_STATE) { # state() - ($local = "", last) if $local =~ /^(?:local|our|my)$/; + my $lopname = $lop->name; + my $loppriv = $lop->private; + my $newtype; + if ($lopname =~ /^pad[ash]v$/ && $loppriv & OPpLVAL_INTRO) { + if ($loppriv & OPpPAD_STATE) { # state() + ($local = "", last) if $local !~ /^(?:either|state)$/; $local = "state"; } else { # my() - ($local = "", last) if $local =~ /^(?:local|our|state)$/; + ($local = "", last) if $local !~ /^(?:either|my)$/; $local = "my"; } - } elsif ($lop->name =~ /^(gv|rv2)[ash]v$/ - && $lop->private & OPpOUR_INTRO - or $lop->name eq "null" && $lop->first->name eq "gvsv" + my $padname = $self->padname_sv($lop->targ); + if ($padname->FLAGS & SVpad_TYPED) { + $newtype = $padname->SvSTASH->NAME; + } + } elsif ($lopname =~ /^(?:gv|rv2)([ash])v$/ + && $loppriv & OPpOUR_INTRO + or $lopname eq "null" && class($lop) eq 'UNOP' + && $lop->first->name eq "gvsv" && $lop->first->private & OPpOUR_INTRO) { # our() - ($local = "", last) if $local =~ /^(?:my|local|state)$/; - $local = "our"; - } elsif ($lop->name ne "undef" - # specifically avoid the "reverse sort" optimisation, - # where "reverse" is nullified - && !($lop->name eq 'sort' && ($lop->flags & OPpSORT_REVERSE))) + my $newlocal = "local " x !!($loppriv & OPpLVAL_INTRO) . "our"; + ($local = "", last) + if $local ne 'either' && $local ne $newlocal; + $local = $newlocal; + my $funny = !$1 || $1 eq 's' ? '$' : $1 eq 'a' ? '@' : '%'; + if (my $t = $self->find_our_type( + $funny . $self->gv_or_padgv($lop->first)->NAME + )) { + $newtype = $t; + } + } elsif ($lopname ne 'undef' + and !($loppriv & OPpLVAL_INTRO) + || !exists $uses_intro{$lopname eq 'null' + ? substr B::ppname($lop->targ), 3 + : $lopname}) + { + $local = ""; # or not + last; + } elsif ($lopname ne "undef") { # local() - ($local = "", last) if $local =~ /^(?:my|our|state)$/; + ($local = "", last) if $local !~ /^(?:either|local)$/; $local = "local"; } + if (defined $type && defined $newtype && $newtype ne $type) { + $local = ''; + last; + } + $type = $newtype; } $local = "" if $local eq "either"; # no point if it's all undefs + $local &&= join ' ', map $self->keyword($_), split / /, $local; + $local .= " $type " if $local && length $type; return $self->deparse($kid, $cx) if null $kid->sibling and not $local; for (; !null($kid); $kid = $kid->sibling) { if ($local) { @@ -3053,8 +3487,9 @@ sub pp_cond_expr { $cond = $self->deparse($cond, 1); $true = $self->deparse($true, 0); - my $head = "if ($cond) {\n\t$true\n\b}"; + my $head = $self->keyword("if") . " ($cond) {\n\t$true\n\b}"; my @elsifs; + my $elsif; while (!null($false) and is_ifelse_cont($false)) { my $newop = $false->first; my $newcond = $newop->first; @@ -3068,10 +3503,11 @@ sub pp_cond_expr { } $newcond = $self->deparse($newcond, 1); $newtrue = $self->deparse($newtrue, 0); - push @elsifs, "elsif ($newcond) {\n\t$newtrue\n\b}"; + $elsif ||= $self->keyword("elsif"); + push @elsifs, "$elsif ($newcond) {\n\t$newtrue\n\b}"; } if (!null($false)) { - $false = $cuddle . "else {\n\t" . + $false = $cuddle . $self->keyword("else") . " {\n\t" . $self->deparse($false, 0) . "\n\b}\cK"; } else { $false = "\cK"; @@ -3084,7 +3520,9 @@ sub pp_once { my $cond = $op->first; my $true = $cond->sibling; - return $self->deparse($true, $cx); + my $ret = $self->deparse($true, $cx); + $ret =~ s/^(\(?)\$/$1 . $self->keyword("state") . ' $'/e; + $ret; } sub loop_common { @@ -3098,6 +3536,7 @@ sub loop_common { my $bare = 0; my $body; my $cond = undef; + my $name; if ($kid->name eq "lineseq") { # bare or infinite loop if ($kid->last->name eq "unstack") { # infinite $head = "while (1) "; # Can't use for(;;) if there's a continue @@ -3121,12 +3560,7 @@ sub loop_common { $ary = $self->deparse($ary, 1); } if (null $var) { - if (($enter->flags & OPf_SPECIAL) && ($] < 5.009)) { - # thread special var, under 5005threads - $var = $self->pp_threadsv($enter, 1); - } else { # regular my() variable - $var = $self->pp_padsv($enter, 1, 1); - } + $var = $self->pp_padsv($enter, 1, 1); } elsif ($var->name eq "rv2gv") { $var = $self->pp_rv2sv($var, 1); if ($enter->private & OPpOUR_INTRO) { @@ -3136,19 +3570,21 @@ sub loop_common { } } elsif ($var->name eq "gv") { $var = "\$" . $self->deparse($var, 1); + } else { + $var = $self->deparse($var, 1); } $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER if (!is_state $body->first and $body->first->name !~ /^(?:stub|leave|scope)$/) { confess unless $var eq '$_'; $body = $body->first; - return $self->deparse($body, 2) . " foreach ($ary)"; + return $self->deparse($body, 2) . " " + . $self->keyword("foreach") . " ($ary)"; } $head = "foreach $var ($ary) "; } elsif ($kid->name eq "null") { # while/until $kid = $kid->first; - my $name = {"and" => "while", "or" => "until"}->{$kid->name}; - $cond = $self->deparse($kid->first, 1); - $head = "$name ($cond) "; + $name = {"and" => "while", "or" => "until"}->{$kid->name}; + $cond = $kid->first; $body = $kid->first->sibling; } elsif ($kid->name eq "stub") { # bare and empty return "{;}"; # {} could be a hashref @@ -3160,6 +3596,8 @@ sub loop_common { # block (or the last in a bare loop). my $cont_start = $enter->nextop; my $cont; + my $precond; + my $postcond; if ($$cont_start != $$op && ${$cont_start} != ${$body->last}) { if ($bare) { $cont = $body->last; @@ -3177,7 +3615,8 @@ sub loop_common { } $body = $self->lineseq(undef, 0, @states); if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) { - $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") "; + $precond = "for ($init; "; + $postcond = "; " . $self->deparse($cont, 1) .") "; $cont = "\cK"; } else { $cont = $cuddle . "continue {\n\t" . @@ -3186,11 +3625,23 @@ sub loop_common { } else { return "" if !defined $body; if (length $init) { - $head = "for ($init; $cond;) "; + $precond = "for ($init; "; + $postcond = ";) "; } $cont = "\cK"; $body = $self->deparse($body, 0); } + if ($precond) { # for(;;) + $cond &&= $name eq 'until' + ? listop($self, undef, 1, "not", $cond->first) + : $self->deparse($cond, 1); + $head = "$precond$cond$postcond"; + } + if ($name && !$head) { + ref $cond and $cond = $self->deparse($cond, 1); + $head = "$name ($cond) "; + } + $head =~ s/^(for(?:each)?|while|until)/$self->keyword($1)/e; $body =~ s/;?$/;\n/; return $head . "{\n\t" . $body . "\b}" . $cont; @@ -3220,11 +3671,12 @@ sub _op_is_or_was { } sub pp_null { - my $self = shift; - my($op, $cx) = @_; + my($self, $op, $cx) = @_; if (class($op) eq "OP") { # old value is lost return $self->{'ex_const'} if $op->targ == OP_CONST; + } elsif (class ($op) eq "COP") { + return &pp_nextstate; } elsif ($op->first->name eq 'pushmark' or $op->first->name eq 'null' && $op->first->targ == OP_PUSHMARK @@ -3253,13 +3705,14 @@ sub pp_null { . $self->deparse($op->first->sibling, 7), $cx, 7); } elsif (!null($op->first->sibling) and - $op->first->sibling->name eq "trans" and + $op->first->sibling->name =~ /^transr?\z/ and $op->first->sibling->flags & OPf_STACKED) { return $self->maybe_parens($self->deparse($op->first, 20) . " =~ " . $self->deparse($op->first->sibling, 20), $cx, 20); } elsif ($op->flags & OPf_SPECIAL && $cx < 1 && !$op->targ) { - return "do {\n\t". $self->deparse($op->first, $cx) ."\n\b};"; + return ($self->lex_in_scope("&do") ? "CORE::do" : "do") + . " {\n\t". $self->deparse($op->first, $cx) ."\n\b};"; } elsif (!null($op->first->sibling) and $op->first->sibling->name eq "null" and class($op->first->sibling) eq "UNOP" and @@ -3288,20 +3741,15 @@ sub padany { sub pp_padsv { my $self = shift; my($op, $cx, $forbid_parens) = @_; - return $self->maybe_my($op, $cx, $self->padname($op->targ), + my $targ = $op->targ; + return $self->maybe_my($op, $cx, $self->padname($targ), + $self->padname_sv($targ), $forbid_parens); } sub pp_padav { pp_padsv(@_) } sub pp_padhv { pp_padsv(@_) } -my @threadsv_names = B::threadsv_names; -sub pp_threadsv { - my $self = shift; - my($op, $cx) = @_; - return $self->maybe_local($op, $cx, "\$" . $threadsv_names[$op->targ]); -} - sub gv_or_padgv { my $self = shift; my $op = shift; @@ -3443,7 +3891,7 @@ sub pp_rv2av { sub is_subscriptable { my $op = shift; - if ($op->name =~ /^[ahg]elem/) { + if ($op->name =~ /^([ahg]elem|multideref$)/) { return 1; } elsif ($op->name eq "entersub") { my $kid = $op->first; @@ -3548,6 +3996,145 @@ sub elem { } +# a simplified version of elem_or_slice_array_name() +# for the use of pp_multideref + +sub multideref_var_name { + my $self = shift; + my ($gv, $is_hash) = @_; + + my ($name, $quoted) = + $self->stash_variable_name( $is_hash ? '%' : '@', $gv); + return $quoted ? "$name->" + : $name eq '#' + ? '${#}' # avoid ${#}[1] => $#[1] + : '$' . $name; +} + + +sub pp_multideref { + my $self = shift; + my($op, $cx) = @_; + my $text = ""; + + if ($op->private & OPpMULTIDEREF_EXISTS) { + $text = $self->keyword("exists"). " "; + } + elsif ($op->private & OPpMULTIDEREF_DELETE) { + $text = $self->keyword("delete"). " "; + } + elsif ($op->private & OPpLVAL_INTRO) { + $text = $self->keyword("local"). " "; + } + + if ($op->first && ($op->first->flags & OPf_KIDS)) { + # arbitrary initial expression, e.g. f(1,2,3)->[...] + $text .= $self->deparse($op->first, 24); + } + + my @items = $op->aux_list($self->{curcv}); + my $actions = shift @items; + + my $is_hash; + my $derefs = 0; + + while (1) { + if (($actions & MDEREF_ACTION_MASK) == MDEREF_reload) { + $actions = shift @items; + next; + } + + $is_hash = ( + ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_pop_rv2hv_helem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvsv_vivify_rv2hv_helem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padsv_vivify_rv2hv_helem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_vivify_rv2hv_helem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padhv_helem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvhv_helem + ); + + if ( ($actions & MDEREF_ACTION_MASK) == MDEREF_AV_padav_aelem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padhv_helem) + { + $derefs = 1; + $text .= '$' . substr($self->padname(shift @items), 1); + } + elsif ( ($actions & MDEREF_ACTION_MASK) == MDEREF_AV_gvav_aelem + || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvhv_helem) + { + $derefs = 1; + $text .= $self->multideref_var_name(shift @items, $is_hash); + } + else { + if ( ($actions & MDEREF_ACTION_MASK) == + MDEREF_AV_padsv_vivify_rv2av_aelem + || ($actions & MDEREF_ACTION_MASK) == + MDEREF_HV_padsv_vivify_rv2hv_helem) + { + $text .= $self->padname(shift @items); + } + elsif ( ($actions & MDEREF_ACTION_MASK) == + MDEREF_AV_gvsv_vivify_rv2av_aelem + || ($actions & MDEREF_ACTION_MASK) == + MDEREF_HV_gvsv_vivify_rv2hv_helem) + { + $text .= $self->multideref_var_name(shift @items, $is_hash); + } + elsif ( ($actions & MDEREF_ACTION_MASK) == + MDEREF_AV_pop_rv2av_aelem + || ($actions & MDEREF_ACTION_MASK) == + MDEREF_HV_pop_rv2hv_helem) + { + if ( ($op->flags & OPf_KIDS) + && ( _op_is_or_was($op->first, OP_RV2AV) + || _op_is_or_was($op->first, OP_RV2HV)) + && ($op->first->flags & OPf_KIDS) + && ( _op_is_or_was($op->first->first, OP_AELEM) + || _op_is_or_was($op->first->first, OP_HELEM)) + ) + { + $derefs++; + } + } + + $text .= '->' if !$derefs++; + } + + + if (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_none) { + last; + } + + $text .= $is_hash ? '{' : '['; + + if (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_const) { + my $key = shift @items; + if ($is_hash) { + $text .= $self->const($key, $cx); + } + else { + $text .= $key; + } + } + elsif (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_padsv) { + $text .= $self->padname(shift @items); + } + elsif (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_gvsv) { + $text .= '$' . ($self->stash_variable_name('$', shift @items))[0]; + } + + $text .= $is_hash ? '}' : ']'; + + if ($actions & MDEREF_FLAG_last) { + last; + } + $actions >>= MDEREF_SHIFT; + } + + return $text; +} + + sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) } sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) } @@ -3654,7 +4241,14 @@ sub _method { } if ($meth->name eq "method_named") { - $meth = $self->const_sv($meth)->PV; + $meth = $self->meth_sv($meth)->PV; + } elsif ($meth->name eq "method_super") { + $meth = "SUPER::".$self->meth_sv($meth)->PV; + } elsif ($meth->name eq "method_redir") { + $meth = $self->meth_rclass_sv($meth)->PV.'::'.$self->meth_sv($meth)->PV; + } elsif ($meth->name eq "method_redir_super") { + $meth = $self->meth_rclass_sv($meth)->PV.'::SUPER::'. + $self->meth_sv($meth)->PV; } else { $meth = $meth->first; if ($meth->name eq "const") { @@ -3714,7 +4308,7 @@ sub check_proto { 1 while $proto =~ s/(?name; + # XXX There has to be a better way of doing this scalar-op check. + # Currently PL_opargs is not exposed. + if ($name eq 'null') { + $name = substr B::ppname($_[0]->targ), 3 + } + $name =~ /^(?:scalar|pushmark|wantarray|const|gvsv|gv|padsv|rv2gv + |rv2sv|av2arylen|anoncode|prototype|srefgen|ref|bless + |regcmaybe|regcreset|regcomp|qr|subst|substcont|trans + |transr|sassign|chop|schop|chomp|schomp|defined|undef + |study|pos|preinc|i_preinc|predec|i_predec|postinc + |i_postinc|postdec|i_postdec|pow|multiply|i_multiply + |divide|i_divide|modulo|i_modulo|add|i_add|subtract + |i_subtract|concat|stringify|left_shift|right_shift|lt + |i_lt|gt|i_gt|le|i_le|ge|i_ge|eq|i_eq|ne|i_ne|ncmp|i_ncmp + |slt|sgt|sle|sge|seq|sne|scmp|[sn]?bit_(?:and|x?or)|negate + |i_negate|not|[sn]?complement|smartmatch|atan2|sin|cos + |rand|srand|exp|log|sqrt|int|hex|oct|abs|length|substr + |vec|index|rindex|sprintf|formline|ord|chr|crypt|ucfirst + |lcfirst|uc|lc|quotemeta|aelemfast|aelem|exists|helem + |pack|join|anonlist|anonhash|push|pop|shift|unshift|xor + |andassign|orassign|dorassign|warn|die|reset|nextstate + |dbstate|unstack|last|next|redo|dump|goto|exit|open|close + |pipe_op|fileno|umask|binmode|tie|untie|tied|dbmopen + |dbmclose|select|getc|read|enterwrite|prtf|print|say + |sysopen|sysseek|sysread|syswrite|eof|tell|seek|truncate + |fcntl|ioctl|flock|send|recv|socket|sockpair|bind|connect + |listen|accept|shutdown|gsockopt|ssockopt|getsockname + |getpeername|ftrread|ftrwrite|ftrexec|fteread|ftewrite + |fteexec|ftis|ftsize|ftmtime|ftatime|ftctime|ftrowned + |fteowned|ftzero|ftsock|ftchr|ftblk|ftfile|ftdir|ftpipe + |ftsuid|ftsgid|ftsvtx|ftlink|fttty|fttext|ftbinary|chdir + |chown|chroot|unlink|chmod|utime|rename|link|symlink + |readlink|mkdir|rmdir|open_dir|telldir|seekdir|rewinddir + |closedir|fork|wait|waitpid|system|exec|kill|getppid + |getpgrp|setpgrp|getpriority|setpriority|time|alarm|sleep + |shmget|shmctl|shmread|shmwrite|msgget|msgctl|msgsnd + |msgrcv|semop|semget|semctl|hintseval|shostent|snetent + |sprotoent|sservent|ehostent|enetent|eprotoent|eservent + |spwent|epwent|sgrent|egrent|getlogin|syscall|lock|runcv + |fc)\z/x +} + sub pp_entersub { my $self = shift; my($op, $cx) = @_; @@ -3801,59 +4439,106 @@ sub pp_entersub { } my $simple = 0; my $proto = undef; + my $lexical; if (is_scope($kid)) { $amper = "&"; $kid = "{" . $self->deparse($kid, 0) . "}"; } elsif ($kid->first->name eq "gv") { my $gv = $self->gv_or_padgv($kid->first); - if (class($gv->CV) ne "SPECIAL") { - $proto = $gv->CV->PV if $gv->CV->FLAGS & SVf_POK; + my $cv; + if (class($gv) eq 'GV' && class($cv = $gv->CV) ne "SPECIAL" + || $gv->FLAGS & SVf_ROK && class($cv = $gv->RV) eq 'CV') { + $proto = $cv->PV if $cv->FLAGS & SVf_POK; } $simple = 1; # only calls of named functions can be prototyped $kid = $self->deparse($kid, 24); - if (!$amper) { + my $fq; + # Fully qualify any sub name that conflicts with a lexical. + if ($self->lex_in_scope("&$kid") + || $self->lex_in_scope("&$kid", 1)) + { + $fq++; + } elsif (!$amper) { if ($kid eq 'main::') { $kid = '::'; - } elsif ($kid !~ /^(?:\w|::)(?:[\w\d]|::(?!\z))*\z/) { - $kid = single_delim("q", "'", $kid) . '->'; + } + else { + if ($kid !~ /::/ && $kid ne 'x') { + # Fully qualify any sub name that is also a keyword. While + # we could check the import flag, we cannot guarantee that + # the code deparsed so far would set that flag, so we qual- + # ify the names regardless of importation. + if (exists $feature_keywords{$kid}) { + $fq++ if $self->feature_enabled($kid); + } elsif (do { local $@; local $SIG{__DIE__}; + eval { () = prototype "CORE::$kid"; 1 } }) { + $fq++ + } + } + if ($kid !~ /^(?:\w|::)(?:[\w\d]|::(?!\z))*\z/) { + $kid = single_delim("q", "'", $kid, $self) . '->'; + } } } + $fq and substr $kid, 0, 0, = $self->{'curstash'}.'::'; } elsif (is_scalar ($kid->first) && $kid->first->name ne 'rv2cv') { $amper = "&"; $kid = $self->deparse($kid, 24); } else { $prefix = ""; - my $arrow = is_subscriptable($kid->first) || $kid->first->name eq "padcv" ? "" : "->"; + my $grandkid = $kid->first; + my $arrow = ($lexical = $grandkid->name eq "padcv") + || is_subscriptable($grandkid) + ? "" + : "->"; $kid = $self->deparse($kid, 24) . $arrow; + if ($lexical) { + my $padlist = $self->{'curcv'}->PADLIST; + my $padoff = $grandkid->targ; + my $padname = $padlist->ARRAYelt(0)->ARRAYelt($padoff); + my $protocv = $padname->FLAGS & SVpad_STATE + ? $padlist->ARRAYelt(1)->ARRAYelt($padoff) + : $padname->PROTOCV; + if ($protocv->FLAGS & SVf_POK) { + $proto = $protocv->PV + } + $simple = 1; + } } # Doesn't matter how many prototypes there are, if # they haven't happened yet! - my $declared; - { + my $declared = $lexical || exists $self->{'subs_declared'}{$kid}; + if (not $declared and $self->{'in_coderef2text'}) { no strict 'refs'; no warnings 'uninitialized'; - $declared = exists $self->{'subs_declared'}{$kid} - || ( + $declared = + ( defined &{ ${$self->{'curstash'}."::"}{$kid} } && !exists $self->{'subs_deparsed'}{$self->{'curstash'}."::".$kid} && defined prototype $self->{'curstash'}."::".$kid ); - if (!$declared && defined($proto)) { - # Avoid "too early to check prototype" warning - ($amper, $proto) = ('&'); - } + } + if (!$declared && defined($proto)) { + # Avoid "too early to check prototype" warning + ($amper, $proto) = ('&'); } my $args; + my $listargs = 1; if ($declared and defined $proto and not $amper) { ($amper, $args) = $self->check_proto($proto, @exprs); - if ($amper eq "&") { - $args = join(", ", map($self->deparse($_, 6), @exprs)); - } - } else { - $args = join(", ", map($self->deparse($_, 6), @exprs)); + $listargs = $amper; + } + if ($listargs) { + $args = join(", ", map( + ($_->flags & OPf_WANT) == OPf_WANT_SCALAR + && !retscalar($_) + ? $self->maybe_parens_unop('scalar', $_, 6) + : $self->deparse($_, 6), + @exprs + )); } if ($prefix or $amper) { if ($kid eq '&') { $kid = "{$kid}" } # &{&} cannot be written as && @@ -3869,17 +4554,18 @@ sub pp_entersub { $kid =~ s/^CORE::GLOBAL:://; my $dproto = defined($proto) ? $proto : "undefined"; + my $scalar_proto = $dproto =~ /^;*(?:[\$*_+]|\\.|\\\[[^]]\])\z/; if (!$declared) { return "$kid(" . $args . ")"; } elsif ($dproto =~ /^\s*\z/) { return $kid; - } elsif ($dproto eq "\$" and is_scalar($exprs[0])) { + } elsif ($scalar_proto and is_scalar($exprs[0])) { # is_scalar is an excessively conservative test here: # really, we should be comparing to the precedence of the # top operator of $exprs[0] (ala unop()), but that would # take some major code restructuring to do right. return $self->maybe_parens_func($kid, $args, $cx, 16); - } elsif ($dproto ne '$' and defined($proto) || $simple) { #' + } elsif (not $scalar_proto and defined($proto) || $simple) { #' return $self->maybe_parens_func($kid, $args, $cx, 5); } else { return "$kid(" . $args . ")"; @@ -3913,35 +4599,10 @@ BEGIN { } # the same, but treat $|, $), $( and $ at the end of the string differently +# and leave comments unmangled for the sake of /x and (?x). sub re_uninterp { my($str) = @_; - $str =~ s/ - ( ^|\G # $1 - | [^\\] - ) - - ( # $2 - (?:\\\\)* - ) - - ( # $3 - (\(\?\??\{$bal\}\)) # $4 - | [\$\@] - (?!\||\)|\(|$) - | \\[uUlLQE] - ) - - /defined($4) && length($4) ? "$1$2$4" : "$1$2\\$3"/xeg; - - return $str; -} - -# This is for regular expressions with the /x modifier -# We have to leave comments unmangled. -sub re_uninterp_extended { - my($str) = @_; - $str =~ s/ ( ^|\G # $1 | [^\\] @@ -3966,64 +4627,29 @@ sub re_uninterp_extended { } } -my %unctrl = # portable to EBCDIC - ( - "\c@" => '\c@', # unused - "\cA" => '\cA', - "\cB" => '\cB', - "\cC" => '\cC', - "\cD" => '\cD', - "\cE" => '\cE', - "\cF" => '\cF', - "\cG" => '\cG', - "\cH" => '\cH', - "\cI" => '\cI', - "\cJ" => '\cJ', - "\cK" => '\cK', - "\cL" => '\cL', - "\cM" => '\cM', - "\cN" => '\cN', - "\cO" => '\cO', - "\cP" => '\cP', - "\cQ" => '\cQ', - "\cR" => '\cR', - "\cS" => '\cS', - "\cT" => '\cT', - "\cU" => '\cU', - "\cV" => '\cV', - "\cW" => '\cW', - "\cX" => '\cX', - "\cY" => '\cY', - "\cZ" => '\cZ', - "\c[" => '\c[', # unused - "\c\\" => '\c\\', # unused - "\c]" => '\c]', # unused - "\c_" => '\c_', # unused - ); - # character escapes, but not delimiters that might need to be escaped sub escape_str { # ASCII, UTF8 my($str) = @_; $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg; $str =~ s/\a/\\a/g; -# $str =~ s/\cH/\\b/g; # \b means something different in a regex +# $str =~ s/\cH/\\b/g; # \b means something different in a regex; and \cH + # isn't a backspace in EBCDIC $str =~ s/\t/\\t/g; $str =~ s/\n/\\n/g; $str =~ s/\e/\\e/g; $str =~ s/\f/\\f/g; $str =~ s/\r/\\r/g; - $str =~ s/([\cA-\cZ])/$unctrl{$1}/ge; - $str =~ s/([[:^print:]])/sprintf("\\%03o", ord($1))/ge; + $str =~ s/([\cA-\cZ])/'\\c' . $unctrl{$1}/ge; + $str =~ s/([[:^print:]])/sprintf("\\%03o", ord($1))/age; return $str; } -# For regexes with the /x modifier. -# Leave whitespace unmangled. -sub escape_extended_re { +# For regexes. Leave whitespace unmangled in case of /x or (?x). +sub escape_re { my($str) = @_; $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg; $str =~ s/([[:^print:]])/ - ($1 =~ y! \t\n!!) ? $1 : sprintf("\\%03o", ord($1))/ge; + ($1 =~ y! \t\n!!) ? $1 : sprintf("\\%03o", ord($1))/age; $str =~ s/\n/\n\f/g; return $str; } @@ -4074,21 +4700,22 @@ sub balanced_delim { } sub single_delim { - my($q, $default, $str) = @_; + my($q, $default, $str, $self) = @_; return "$default$str$default" if $default and index($str, $default) == -1; + my $coreq = $self->keyword($q); # maybe CORE::q if ($q ne 'qr') { (my $succeed, $str) = balanced_delim($str); - return "$q$str" if $succeed; + return "$coreq$str" if $succeed; } for my $delim ('/', '"', '#') { - return "$q$delim" . $str . $delim if index($str, $delim) == -1; + return "$coreq$delim" . $str . $delim if index($str, $delim) == -1; } if ($default) { $str =~ s/$default/\\$default/g; return "$default$str$default"; } else { $str =~ s[/][\\/]g; - return "$q/$str/"; + return "$coreq/$str/"; } } @@ -4124,7 +4751,8 @@ sub const { } if (class($sv) eq "SPECIAL") { # sv_undef, sv_yes, sv_no - return ('undef', '1', $self->maybe_parens("!1", $cx, 21))[$$sv-1]; + return $$sv == 3 ? $self->maybe_parens("!1", $cx, 21) + : ('undef', '1')[$$sv-1]; } if (class($sv) eq "NULL") { return 'undef'; @@ -4189,16 +4817,17 @@ sub const { return $str; } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) { my $ref = $sv->RV; - if (class($ref) eq "AV") { + my $class = class($ref); + if ($class eq "AV") { return "[" . $self->list_const(2, $ref->ARRAY) . "]"; - } elsif (class($ref) eq "HV") { + } elsif ($class eq "HV") { my %hash = $ref->ARRAY; my @elts; for my $k (sort keys %hash) { push @elts, "$k => " . $self->const($hash{$k}, 6); } return "{" . join(", ", @elts) . "}"; - } elsif (class($ref) eq "CV") { + } elsif ($class eq "CV") { BEGIN { if ($] > 5.0150051) { require overloading; @@ -4211,11 +4840,11 @@ sub const { } return "sub " . $self->deparse_sub($ref); } - if ($ref->FLAGS & SVs_SMG) { + if ($class ne 'SPECIAL' and $ref->FLAGS & SVs_SMG) { for (my $mg = $ref->MAGIC; $mg; $mg = $mg->MOREMAGIC) { if ($mg->TYPE eq 'r') { - my $re = re_uninterp(escape_str(re_unback($mg->precomp))); - return single_delim("qr", "", $re); + my $re = re_uninterp(escape_re(re_unback($mg->precomp))); + return single_delim("qr", "", $re, $self); } } } @@ -4227,10 +4856,11 @@ sub const { return $self->maybe_parens("\\$const", $cx, 20); } elsif ($sv->FLAGS & SVf_POK) { my $str = $sv->PV; - if ($str =~ /[[:^print:]]/) { - return single_delim("qq", '"', uninterp escape_str unback $str); + if ($str =~ /[[:^print:]]/a) { + return single_delim("qq", '"', + uninterp(escape_str unback $str), $self); } else { - return single_delim("q", "'", unback $str); + return single_delim("q", "'", unback($str), $self); } } else { return "undef"; @@ -4260,6 +4890,24 @@ sub const_sv { return $sv; } +sub meth_sv { + my $self = shift; + my $op = shift; + my $sv = $op->meth_sv; + # the constant could be in the pad (under useithreads) + $sv = $self->padval($op->targ) unless $$sv; + return $sv; +} + +sub meth_rclass_sv { + my $self = shift; + my $op = shift; + my $sv = $op->rclass; + # the constant could be in the pad (under useithreads) + $sv = $self->padval($sv) unless ref $sv; + return $sv; +} + sub pp_const { my $self = shift; my($op, $cx) = @_; @@ -4317,7 +4965,7 @@ sub pp_backtick { my $child = $op->first->sibling->isa('B::NULL') ? $op->first : $op->first->sibling; if ($self->pure_string($child)) { - return single_delim("qx", '`', $self->dq($child, 1)); + return single_delim("qx", '`', $self->dq($child, 1), $self); } unop($self, @_, "readpipe"); } @@ -4328,11 +4976,28 @@ sub dquote { my $kid = $op->first->sibling; # skip ex-stringify, pushmark return $self->deparse($kid, $cx) if $self->{'unquote'}; $self->maybe_targmy($kid, $cx, - sub {single_delim("qq", '"', $self->dq($_[1]))}); + sub {single_delim("qq", '"', $self->dq($_[1]), + $self)}); } # OP_STRINGIFY is a listop, but it only ever has one arg -sub pp_stringify { maybe_targmy(@_, \&dquote) } +sub pp_stringify { + my ($self, $op, $cx) = @_; + my $kid = $op->first->sibling; + while ($kid->name eq 'null' && !null($kid->first)) { + $kid = $kid->first; + } + if ($kid->name =~ /^(?:const|padsv|rv2sv|av2arylen|gvsv|multideref + |aelemfast(?:_lex)?|[ah]elem|join|concat)\z/x) { + maybe_targmy(@_, \&dquote); + } + else { + # Actually an optimised join. + my $result = listop(@_,"join"); + $result =~ s/join([( ])/join$1$self->{'ex_const'}, /; + $result; + } +} # tr/// and s/// (and tr[][], tr[]//, tr###, etc) # note that tr(from)/to/ is OK, but not tr/from/(to) @@ -4369,7 +5034,11 @@ sub pchr { # ASCII return '\\\\'; } elsif ($n == ord "-") { return "\\-"; - } elsif ($n >= ord(' ') and $n <= ord('~')) { + } elsif (utf8::native_to_unicode($n) >= utf8::native_to_unicode(ord(' ')) + and utf8::native_to_unicode($n) <= utf8::native_to_unicode(ord('~'))) + { + # I'm presuming a regex is not ok here, otherwise we could have used + # /[[:print:]]/a to get here return chr($n); } elsif ($n == ord "\a") { return '\\a'; @@ -4386,7 +5055,7 @@ sub pchr { # ASCII } elsif ($n == ord "\r") { return '\\r'; } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) { - return '\\c' . chr(ord("@") + $n); + return '\\c' . unctrl{chr $n}; } else { # return '\x' . sprintf("%02x", $n); return '\\' . sprintf("%03o", $n); @@ -4566,7 +5235,7 @@ sub tr_decode_utf8 { sub pp_trans { my $self = shift; - my($op, $cx) = @_; + my($op, $cx, $morflags) = @_; my($from, $to); my $class = class($op); my $priv_flags = $op->private; @@ -4583,10 +5252,16 @@ sub pp_trans { $flags .= "d" if $priv_flags & OPpTRANS_DELETE; $to = "" if $from eq $to and $flags eq ""; $flags .= "s" if $priv_flags & OPpTRANS_SQUASH; - return "tr" . double_delim($from, $to) . $flags; + $flags .= $morflags if defined $morflags; + my $ret = $self->keyword("tr") . double_delim($from, $to) . $flags; + if (my $targ = $op->targ) { + return $self->maybe_parens($self->padname($targ) . " =~ $ret", + $cx, 20); + } + return $ret; } -sub pp_transr { &pp_trans . 'r' } +sub pp_transr { push @_, 'r'; goto &pp_trans } sub re_dq_disambiguate { my ($first, $last) = @_; @@ -4601,36 +5276,35 @@ sub re_dq_disambiguate { # Like dq(), but different sub re_dq { my $self = shift; - my ($op, $extended) = @_; + my ($op) = @_; my $type = $op->name; if ($type eq "const") { return '$[' if $op->private & OPpCONST_ARYBASE; my $unbacked = re_unback($self->const_sv($op)->as_string); - return re_uninterp_extended(escape_extended_re($unbacked)) - if $extended; - return re_uninterp(escape_str($unbacked)); + return re_uninterp(escape_re($unbacked)); } elsif ($type eq "concat") { - my $first = $self->re_dq($op->first, $extended); - my $last = $self->re_dq($op->last, $extended); + my $first = $self->re_dq($op->first); + my $last = $self->re_dq($op->last); return re_dq_disambiguate($first, $last); } elsif ($type eq "uc") { - return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E'; + return '\U' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "lc") { - return '\L' . $self->re_dq($op->first->sibling, $extended) . '\E'; + return '\L' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "ucfirst") { - return '\u' . $self->re_dq($op->first->sibling, $extended); + return '\u' . $self->re_dq($op->first->sibling); } elsif ($type eq "lcfirst") { - return '\l' . $self->re_dq($op->first->sibling, $extended); + return '\l' . $self->re_dq($op->first->sibling); } elsif ($type eq "quotemeta") { - return '\Q' . $self->re_dq($op->first->sibling, $extended) . '\E'; + return '\Q' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "fc") { - return '\F' . $self->re_dq($op->first->sibling, $extended) . '\E'; + return '\F' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { my $ret = $self->deparse($op, 26); - $ret =~ s/^\$([(|)])\z/\${$1}/; # $( $| $) need braces + $ret =~ s/^\$([(|)])\z/\${$1}/ # $( $| $) need braces + or $ret =~ s/^\@([-+])\z/\@{$1}/; # @- @+ need braces return $ret; } } @@ -4664,43 +5338,80 @@ sub pure_string { elsif (is_scalar($op) || $type =~ /^[ah]elem$/) { return 1; } - elsif ($type eq "null" and $op->can('first') and not null $op->first and - ($op->first->name eq "null" and $op->first->can('first') - and not null $op->first->first and - $op->first->first->name eq "aelemfast" - or - $op->first->name =~ /^aelemfast(?:_lex)?\z/ - )) { - return 1; - } - else { - return 0; + elsif ($type eq "null" and $op->can('first') and not null $op->first) { + my $first = $op->first; + + return 1 if $first->name eq "multideref"; + return 1 if $first->name eq "aelemfast_lex"; + + if ( $first->name eq "null" + and $first->can('first') + and not null $first->first + and $first->first->name eq "aelemfast" + ) + { + return 1; + } } - return 1; + return 0; +} + +sub code_list { + my ($self,$op,$cv) = @_; + + # localise stuff relating to the current sub + $cv and + local($self->{'curcv'}) = $cv, + local($self->{'curcvlex'}), + local(@$self{qw'curstash warnings hints hinthash curcop'}) + = @$self{qw'curstash warnings hints hinthash curcop'}; + + my $re; + for ($op = $op->first->sibling; !null($op); $op = $op->sibling) { + if ($op->name eq 'null' and $op->flags & OPf_SPECIAL) { + my $scope = $op->first; + # 0 context (last arg to scopeop) means statement context, so + # the contents of the block will not be wrapped in do{...}. + my $block = scopeop($scope->first->name eq "enter", $self, + $scope, 0); + # next op is the source code of the block + $op = $op->sibling; + $re .= ($self->const_sv($op)->PV =~ m|^(\(\?\??\{)|)[0]; + my $multiline = $block =~ /\n/; + $re .= $multiline ? "\n\t" : ' '; + $re .= $block; + $re .= $multiline ? "\n\b})" : " })"; + } else { + $re = re_dq_disambiguate($re, $self->re_dq($op)); + } + } + $re; } sub regcomp { my $self = shift; - my($op, $cx, $extended) = @_; + my($op, $cx) = @_; my $kid = $op->first; $kid = $kid->first if $kid->name eq "regcmaybe"; $kid = $kid->first if $kid->name eq "regcreset"; - if ($kid->name eq "null" and !null($kid->first) + my $kname = $kid->name; + if ($kname eq "null" and !null($kid->first) and $kid->first->name eq 'pushmark') { my $str = ''; $kid = $kid->first->sibling; while (!null($kid)) { my $first = $str; - my $last = $self->re_dq($kid, $extended); + my $last = $self->re_dq($kid); $str = re_dq_disambiguate($first, $last); $kid = $kid->sibling; } return $str, 1; } - return ($self->re_dq($kid, $extended), 1) if $self->pure_string($kid); + return ($self->re_dq($kid), 1) + if $kname =~ /^(?:rv2|pad)av/ or $self->pure_string($kid); return ($self->deparse($kid, $cx), 0); } @@ -4713,17 +5424,24 @@ sub re_flags { my ($self, $op) = @_; my $flags = ''; my $pmflags = $op->pmflags; + if (!$pmflags) { + my $re = $op->pmregexp; + if ($$re) { + $pmflags = $re->compflags; + } + } $flags .= "g" if $pmflags & PMf_GLOBAL; $flags .= "i" if $pmflags & PMf_FOLD; $flags .= "m" if $pmflags & PMf_MULTILINE; $flags .= "o" if $pmflags & PMf_KEEP; $flags .= "s" if $pmflags & PMf_SINGLELINE; $flags .= "x" if $pmflags & PMf_EXTENDED; + $flags .= "x" if $pmflags & PMf_EXTENDED_MORE; $flags .= "p" if $pmflags & RXf_PMf_KEEPCOPY; if (my $charset = $pmflags & RXf_PMf_CHARSET) { # Hardcoding this is fragile, but B does not yet export the # constants we need. - $flags .= qw(d l u a aa)[$charset >> 5] + $flags .= qw(d l u a aa)[$charset >> 7] } # The /d flag is indicated by 0; only show it if necessary. elsif ($self->{hinthash} and @@ -4746,7 +5464,23 @@ sub re_flags { my %matchwords; map($matchwords{join "", sort split //, $_} = $_, 'cig', 'cog', 'cos', 'cogs', 'cox', 'go', 'is', 'ism', 'iso', 'mig', 'mix', 'osmic', 'ox', 'sic', - 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi'); + 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi', 'soup', 'soupmix'); + +# When deparsing a regular expression with code blocks, we have to look in +# various places to find the blocks. +# +# For qr/(?{...})/ without interpolation, the CV is under $qr->qr_anoncv +# and the code list (list of blocks and constants, maybe vars) is under +# $cv->ROOT->first->code_list: +# ./perl -Ilib -MB -e 'use O "Concise", B::svref_2object(sub {qr/(?{die})/})->ROOT->first->first->sibling->pmregexp->qr_anoncv->object_2svref' +# +# For qr/$a(?{...})/ with interpolation, the code list is more accessible, +# under $pmop->code_list, but the $cv is something you have to dig for in +# the regcomp op’s kids: +# ./perl -Ilib -mO=Concise -e 'qr/$a(?{die})/' +# +# For m// and split //, things are much simpler. There is no CV. The code +# list is under $pmop->code_list. sub matchop { my $self = shift; @@ -4757,24 +5491,48 @@ sub matchop { $binop = 1; $var = $self->deparse($kid, 20); $kid = $kid->sibling; + } + # not $name; $name will be 'm' for both match and split + elsif ($op->name eq 'match' and my $targ = $op->targ) { + $binop = 1; + $var = $self->padname($targ); } my $quote = 1; my $pmflags = $op->pmflags; - my $extended = ($pmflags & PMf_EXTENDED); my $rhs_bound_to_defsv; - if (null $kid) { - my $unbacked = re_unback($op->precomp); - if ($extended) { - $re = re_uninterp_extended(escape_extended_re($unbacked)); - } else { - $re = re_uninterp(escape_str(re_unback($op->precomp))); - } + my ($cv, $bregexp); + my $have_kid = !null $kid; + # Check for code blocks first + if (not null my $code_list = $op->code_list) { + $re = $self->code_list($code_list, + $op->name eq 'qr' + ? $self->padval( + $kid->first # ex-list + ->first # pushmark + ->sibling # entersub + ->first # ex-list + ->first # pushmark + ->sibling # srefgen + ->first # ex-list + ->first # anoncode + ->targ + ) + : undef); + } elsif (${$bregexp = $op->pmregexp} && ${$cv = $bregexp->qr_anoncv}) { + my $patop = $cv->ROOT # leavesub + ->first # qr + ->code_list;# list + $re = $self->code_list($patop, $cv); + } elsif (!$have_kid) { + $re = re_uninterp(escape_re(re_unback($op->precomp))); } elsif ($kid->name ne 'regcomp') { carp("found ".$kid->name." where regcomp expected"); } else { - ($re, $quote) = $self->regcomp($kid, 21, $extended); + ($re, $quote) = $self->regcomp($kid, 21); + } + if ($have_kid and $kid->name eq 'regcomp') { my $matchop = $kid->first; - if ($matchop->name eq 'regcrest') { + if ($matchop->name eq 'regcreset') { $matchop = $matchop->first; } if ($matchop->name =~ /^(?:match|transr?|subst)\z/ @@ -4789,9 +5547,9 @@ sub matchop { $flags = $matchwords{$flags} if $matchwords{$flags}; if ($pmflags & PMf_ONCE) { # only one kind of delimiter works here $re =~ s/\?/\\?/g; - $re = "?$re?"; + $re = $self->keyword("m") . "?$re?"; # explicit 'm' is required } elsif ($quote) { - $re = single_delim($name, $delim, $re); + $re = single_delim($name, $delim, $re, $self); } $re = $re . $flags if $quote; if ($binop) { @@ -4814,6 +5572,9 @@ sub pp_qr { matchop(@_, "qr", "") } sub pp_runcv { unop(@_, "__SUB__"); } sub pp_split { + maybe_targmy(@_, \&split); +} +sub split { my $self = shift; my($op, $cx) = @_; my($kid, @exprs, $ary, $expr); @@ -4827,14 +5588,25 @@ sub pp_split { # figures out for us which it is. my $replroot = $kid->pmreplroot; my $gv = 0; + my $stacked = $op->flags & OPf_STACKED; if (ref($replroot) eq "B::GV") { $gv = $replroot; } elsif (!ref($replroot) and $replroot > 0) { $gv = $self->padval($replroot); - } - $ary = $self->stash_variable('@', $self->gv_name($gv), $cx) if $gv; - - for (; !null($kid); $kid = $kid->sibling) { + } elsif ($kid->targ) { + $ary = $self->padname($kid->targ) + } elsif ($stacked) { + $ary = $self->deparse($op->last, 7); + } + $ary = $self->maybe_local(@_, + $self->stash_variable('@', + $self->gv_name($gv), + $cx)) + if $gv; + + # Skip the last kid when OPf_STACKED is set, since it is the array + # on the left. + for (; !null($stacked ? $kid->sibling : $kid); $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } @@ -4883,6 +5655,10 @@ sub pp_subst { $var = $self->deparse($kid, 20); $kid = $kid->sibling; } + elsif (my $targ = $op->targ) { + $binop = 1; + $var = $self->padname($targ); + } my $flags = ""; my $pmflags = $op->pmflags; if (null($op->pmreplroot)) { @@ -4903,29 +5679,25 @@ sub pp_subst { $repl = $self->dq($repl); } } - my $extended = ($pmflags & PMf_EXTENDED); - if (null $kid) { - my $unbacked = re_unback($op->precomp); - if ($extended) { - $re = re_uninterp_extended(escape_extended_re($unbacked)); - } - else { - $re = re_uninterp(escape_str($unbacked)); - } + if (not null my $code_list = $op->code_list) { + $re = $self->code_list($code_list); + } elsif (null $kid) { + $re = re_uninterp(escape_re(re_unback($op->precomp))); } else { - ($re) = $self->regcomp($kid, 1, $extended); + ($re) = $self->regcomp($kid, 1); } $flags .= "r" if $pmflags & PMf_NONDESTRUCT; $flags .= "e" if $pmflags & PMf_EVAL; $flags .= $self->re_flags($op); $flags = join '', sort split //, $flags; $flags = $substwords{$flags} if $substwords{$flags}; + my $core_s = $self->keyword("s"); # maybe CORE::s if ($binop) { - return $self->maybe_parens("$var =~ s" + return $self->maybe_parens("$var =~ $core_s" . double_delim($re, $repl) . $flags, $cx, 20); } else { - return "s". double_delim($re, $repl) . $flags; + return "$core_s". double_delim($re, $repl) . $flags; } } @@ -4937,6 +5709,10 @@ sub is_lexical_subs { return 1; } +# Pretend these two ops do not exist. The perl parser adds them to the +# beginning of any block containing my-sub declarations, whereas we handle +# the subs in pad_subs and next_todo. +*pp_clonecv = *pp_introcv; sub pp_introcv { my $self = shift; my($op, $cx) = @_; @@ -4945,20 +5721,66 @@ sub pp_introcv { return ''; } -sub pp_clonecv { - my $self = shift; - my($op, $cx) = @_; - my $sv = $self->padname_sv($op->targ); - my $name = substr $sv->PVX, 1; # skip &/$/@/%, like $self->padany - return "my sub $name"; -} - sub pp_padcv { my $self = shift; my($op, $cx) = @_; return $self->padany($op); } +my %lvref_funnies = ( + OPpLVREF_SV, => '$', + OPpLVREF_AV, => '@', + OPpLVREF_HV, => '%', + OPpLVREF_CV, => '&', +); + +sub pp_refassign { + my ($self, $op, $cx) = @_; + my $left; + if ($op->private & OPpLVREF_ELEM) { + $left = $op->first->sibling; + $left = maybe_local(@_, elem($self, $left, undef, + $left->targ == OP_AELEM + ? qw([ ] padav) + : qw({ } padhv))); + } elsif ($op->flags & OPf_STACKED) { + $left = maybe_local(@_, + $lvref_funnies{$op->private & OPpLVREF_TYPE} + . $self->deparse($op->first->sibling)); + } else { + $left = &pp_padsv; + } + my $right = $self->deparse_binop_right($op, $op->first, 7); + return $self->maybe_parens("\\$left = $right", $cx, 7); +} + +sub pp_lvref { + my ($self, $op, $cx) = @_; + my $code; + if ($op->private & OPpLVREF_ELEM) { + $code = $op->first->name =~ /av\z/ ? &pp_aelem : &pp_helem; + } elsif ($op->flags & OPf_STACKED) { + $code = maybe_local(@_, + $lvref_funnies{$op->private & OPpLVREF_TYPE} + . $self->deparse($op->first)); + } else { + $code = &pp_padsv; + } + "\\$code"; +} + +sub pp_lvrefslice { + my ($self, $op, $cx) = @_; + '\\' . ($op->last->name =~ /av\z/ ? &pp_aslice : &pp_hslice); +} + +sub pp_lvavref { + my ($self, $op, $cx) = @_; + '\\(' . ($op->flags & OPf_STACKED + ? maybe_local(@_, rv2x(@_, "\@")) + : &pp_padsv) . ')' +} + 1; __END__ @@ -5384,7 +6206,8 @@ the main:: package, the code will include a package declaration. =item * -The only pragmas to be completely supported are: C, +In Perl 5.20 and earlier, the only pragmas to +be completely supported are: C, C, C, C and C. (C<$[>, which behaves like a pragma, is also supported.) @@ -5405,8 +6228,8 @@ exactly the right place. So if you use a module which affects compilation (such as by over-riding keywords, overloading constants or whatever) then the output code might not work as intended. -This is the most serious outstanding problem, and will require some help -from the Perl core to fix. +This is the most serious problem in Perl 5.20 and earlier. Fixing this +required internal changes in Perl 5.22. =item * @@ -5427,7 +6250,7 @@ produced is already ordinary Perl which shouldn't be filtered again. =item * -Optimised away statements are rendered as +Optimized-away statements are rendered as '???'. This includes statements that have a compile-time side-effect, such as the obscure @@ -5446,26 +6269,18 @@ appear in code2ref output text as package variables. This is a tricky problem, as perl has no native facility for referring to a lexical variable defined within a different scope, although L is a good start. -=item * - -There are probably many more bugs on non-ASCII platforms (EBCDIC). +See also L, which combines B::Deparse and +L to serialize closures properly. =item * -Lexical C subroutines are not deparsed properly at the moment. They are -emitted as pure declarations, without their body; and the declaration may -appear in the wrong place (before any lexicals the body closes over, or -before the C declaration that permits use of this feature). - -We expect to resolve this before the lexical-subroutine feature is no longer -considered experimental. +There are probably many more bugs on non-ASCII platforms (EBCDIC). =item * -Lexical C subroutines are not deparsed at all at the moment. - -We expect to resolve this before the lexical-subroutine feature is no longer -considered experimental. +Prior to Perl 5.22, lexical C subroutines were not deparsed properly. +They were emitted as pure declarations, sometimes in the wrong place. +Lexical C subroutines were not deparsed at all. =back diff --git a/Master/tlpkg/tlperl/lib/B/Op_private.pm b/Master/tlpkg/tlperl/lib/B/Op_private.pm new file mode 100644 index 00000000000..20b598eaaa5 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/B/Op_private.pm @@ -0,0 +1,836 @@ +# -*- buffer-read-only: t -*- +# +# lib/B/Op_private.pm +# +# Copyright (C) 2014 by Larry Wall and others +# +# You may distribute under the terms of either the GNU General Public +# License or the Artistic License, as specified in the README file. +# +# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! +# This file is built by regen/opcode.pl from data in +# regen/op_private and pod embedded in regen/opcode.pl. +# Any changes made here will be lost! + +=head1 NAME + +B::Op_private - OP op_private flag definitions + +=head1 SYNOPSIS + + use B::Op_private; + + # flag details for bit 7 of OP_AELEM's op_private: + my $name = $B::Op_private::bits{aelem}{7}; # OPpLVAL_INTRO + my $value = $B::Op_private::defines{$name}; # 128 + my $label = $B::Op_private::labels{$name}; # LVINTRO + + # the bit field at bits 5..6 of OP_AELEM's op_private: + my $bf = $B::Op_private::bits{aelem}{6}; + my $mask = $bf->{bitmask}; # etc + +=head1 DESCRIPTION + +This module provides four global hashes: + + %B::Op_private::bits + %B::Op_private::defines + %B::Op_private::labels + %B::Op_private::ops_using + +which contain information about the per-op meanings of the bits in the +op_private field. + +=head2 C<%bits> + +This is indexed by op name and then bit number (0..7). For single bit flags, +it returns the name of the define (if any) for that bit: + + $B::Op_private::bits{aelem}{7} eq 'OPpLVAL_INTRO'; + +For bit fields, it returns a hash ref containing details about the field. +The same reference will be returned for all bit positions that make +up the bit field; so for example these both return the same hash ref: + + $bitfield = $B::Op_private::bits{aelem}{5}; + $bitfield = $B::Op_private::bits{aelem}{6}; + +The general format of this hash ref is + + { + # The bit range and mask; these are always present. + bitmin => 5, + bitmax => 6, + bitmask => 0x60, + + # (The remaining keys are optional) + + # The names of any defines that were requested: + mask_def => 'OPpFOO_MASK', + baseshift_def => 'OPpFOO_SHIFT', + bitcount_def => 'OPpFOO_BITS', + + # If present, Concise etc will display the value with a 'FOO=' + # prefix. If it equals '-', then Concise will treat the bit + # field as raw bits and not try to interpret it. + label => 'FOO', + + # If present, specifies the names of some defines and the + # display labels that are used to assign meaning to particu- + # lar integer values within the bit field; e.g. 3 is dis- + # played as 'C'. + enum => [ qw( + 1 OPpFOO_A A + 2 OPpFOO_B B + 3 OPpFOO_C C + )], + + }; + + +=head2 C<%defines> + +This gives the value of every C define, e.g. + + $B::Op_private::defines{OPpLVAL_INTRO} == 128; + +=head2 C<%labels> + +This gives the short display label for each define, as used by C +and C, e.g. + + $B::Op_private::labels{OPpLVAL_INTRO} eq 'LVINTRO'; + +If the label equals '-', then Concise will treat the bit as a raw bit and +not try to display it symbolically. + +=head2 C<%ops_using> + +For each define, this gives a reference to an array of op names that use +the flag. + + @ops_using_lvintro = @{ $B::Op_private::ops_using{OPp_LVAL_INTRO} }; + +=cut + +package B::Op_private; + +our %bits; + + +our $VERSION = "5.022001"; + +$bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv); +$bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv); +$bits{$_}{2} = 'OPpENTERSUB_HASTARG' for qw(entersub rv2cv); +$bits{$_}{6} = 'OPpFLIP_LINENUM' for qw(flip flop); +$bits{$_}{1} = 'OPpFT_ACCESS' for qw(fteexec fteread ftewrite ftrexec ftrread ftrwrite); +$bits{$_}{4} = 'OPpFT_AFTER_t' for qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero); +$bits{$_}{2} = 'OPpFT_STACKED' for qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero); +$bits{$_}{3} = 'OPpFT_STACKING' for qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero); +$bits{$_}{1} = 'OPpGREP_LEX' for qw(grepstart grepwhile mapstart mapwhile); +$bits{$_}{1} = 'OPpHINT_STRICT_REFS' for qw(entersub multideref rv2av rv2cv rv2gv rv2hv rv2sv); +$bits{$_}{5} = 'OPpHUSH_VMSISH' for qw(dbstate nextstate); +$bits{$_}{2} = 'OPpITER_REVERSED' for qw(enteriter iter); +$bits{$_}{7} = 'OPpLVALUE' for qw(leave leaveloop); +$bits{$_}{6} = 'OPpLVAL_DEFER' for qw(aelem helem multideref); +$bits{$_}{7} = 'OPpLVAL_INTRO' for qw(aelem aslice cond_expr delete enteriter entersub gvsv helem hslice list lvavref lvref lvrefslice multideref padav padhv padrange padsv pushmark refassign rv2av rv2gv rv2hv rv2sv); +$bits{$_}{2} = 'OPpLVREF_ELEM' for qw(lvref refassign); +$bits{$_}{3} = 'OPpLVREF_ITER' for qw(lvref refassign); +$bits{$_}{3} = 'OPpMAYBE_LVSUB' for qw(aassign aelem aslice av2arylen helem hslice keys kvaslice kvhslice multideref padav padhv pos rkeys rv2av rv2gv rv2hv substr vec); +$bits{$_}{4} = 'OPpMAYBE_TRUEBOOL' for qw(padhv rv2hv); +$bits{$_}{7} = 'OPpOFFBYONE' for qw(caller runcv wantarray); +$bits{$_}{5} = 'OPpOPEN_IN_CRLF' for qw(backtick open); +$bits{$_}{4} = 'OPpOPEN_IN_RAW' for qw(backtick open); +$bits{$_}{7} = 'OPpOPEN_OUT_CRLF' for qw(backtick open); +$bits{$_}{6} = 'OPpOPEN_OUT_RAW' for qw(backtick open); +$bits{$_}{6} = 'OPpOUR_INTRO' for qw(enteriter gvsv rv2av rv2hv rv2sv split); +$bits{$_}{6} = 'OPpPAD_STATE' for qw(lvavref lvref padav padhv padsv pushmark refassign); +$bits{$_}{7} = 'OPpPV_IS_UTF8' for qw(dump goto last next redo); +$bits{$_}{6} = 'OPpREFCOUNTED' for qw(leave leaveeval leavesub leavesublv leavewrite); +$bits{$_}{6} = 'OPpRUNTIME' for qw(match pushre qr subst substcont); +$bits{$_}{2} = 'OPpSLICEWARNING' for qw(aslice hslice padav padhv rv2av rv2hv); +$bits{$_}{4} = 'OPpTARGET_MY' for qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log match mkdir modulo multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push pushre qr rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subst subtract symlink system time trans transr unlink unshift utime wait waitpid); +$bits{$_}{5} = 'OPpTRANS_COMPLEMENT' for qw(trans transr); +$bits{$_}{7} = 'OPpTRANS_DELETE' for qw(trans transr); +$bits{$_}{0} = 'OPpTRANS_FROM_UTF' for qw(trans transr); +$bits{$_}{6} = 'OPpTRANS_GROWS' for qw(trans transr); +$bits{$_}{2} = 'OPpTRANS_IDENTICAL' for qw(trans transr); +$bits{$_}{3} = 'OPpTRANS_SQUASH' for qw(trans transr); +$bits{$_}{1} = 'OPpTRANS_TO_UTF' for qw(trans transr); +$bits{$_}{5} = 'OPpTRUEBOOL' for qw(padhv rv2hv); + +my @bf = ( + { + label => '-', + mask_def => 'OPpARG1_MASK', + bitmin => 0, + bitmax => 0, + bitmask => 1, + }, + { + label => '-', + mask_def => 'OPpARG2_MASK', + bitmin => 0, + bitmax => 1, + bitmask => 3, + }, + { + label => '-', + mask_def => 'OPpARG3_MASK', + bitmin => 0, + bitmax => 2, + bitmask => 7, + }, + { + label => '-', + mask_def => 'OPpARG4_MASK', + bitmin => 0, + bitmax => 3, + bitmask => 15, + }, + { + label => '-', + mask_def => 'OPpPADRANGE_COUNTMASK', + bitcount_def => 'OPpPADRANGE_COUNTSHIFT', + bitmin => 0, + bitmax => 6, + bitmask => 127, + }, + { + label => '-', + bitmin => 0, + bitmax => 7, + bitmask => 255, + }, + { + mask_def => 'OPpDEREF', + bitmin => 4, + bitmax => 5, + bitmask => 48, + enum => [ + 1, 'OPpDEREF_AV', 'DREFAV', + 2, 'OPpDEREF_HV', 'DREFHV', + 3, 'OPpDEREF_SV', 'DREFSV', + ], + }, + { + mask_def => 'OPpLVREF_TYPE', + bitmin => 4, + bitmax => 5, + bitmask => 48, + enum => [ + 0, 'OPpLVREF_SV', 'SV', + 1, 'OPpLVREF_AV', 'AV', + 2, 'OPpLVREF_HV', 'HV', + 3, 'OPpLVREF_CV', 'CV', + ], + }, +); + +@{$bits{aassign}}{6,1,0} = ('OPpASSIGN_COMMON', $bf[1], $bf[1]); +$bits{abs}{0} = $bf[0]; +@{$bits{accept}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{add}}{1,0} = ($bf[1], $bf[1]); +$bits{aeach}{0} = $bf[0]; +@{$bits{aelem}}{5,4,1,0} = ($bf[6], $bf[6], $bf[1], $bf[1]); +@{$bits{aelemfast}}{7,6,5,4,3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5]); +@{$bits{aelemfast_lex}}{7,6,5,4,3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5], $bf[5]); +$bits{akeys}{0} = $bf[0]; +$bits{alarm}{0} = $bf[0]; +$bits{and}{0} = $bf[0]; +$bits{andassign}{0} = $bf[0]; +$bits{anonconst}{0} = $bf[0]; +@{$bits{anonhash}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{anonlist}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{atan2}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{av2arylen}{0} = $bf[0]; +$bits{avalues}{0} = $bf[0]; +$bits{backtick}{0} = $bf[0]; +@{$bits{bind}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{binmode}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{bit_and}}{1,0} = ($bf[1], $bf[1]); +@{$bits{bit_or}}{1,0} = ($bf[1], $bf[1]); +@{$bits{bit_xor}}{1,0} = ($bf[1], $bf[1]); +@{$bits{bless}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{caller}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{chdir}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{chmod}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{chomp}{0} = $bf[0]; +$bits{chop}{0} = $bf[0]; +@{$bits{chown}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{chr}{0} = $bf[0]; +$bits{chroot}{0} = $bf[0]; +@{$bits{close}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{closedir}{0} = $bf[0]; +$bits{complement}{0} = $bf[0]; +@{$bits{concat}}{1,0} = ($bf[1], $bf[1]); +$bits{cond_expr}{0} = $bf[0]; +@{$bits{connect}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{const}}{6,4,3,2,1} = ('OPpCONST_BARE', 'OPpCONST_ENTERED', 'OPpCONST_STRICT', 'OPpCONST_SHORTCIRCUIT', 'OPpCONST_NOVER'); +@{$bits{coreargs}}{7,6,1,0} = ('OPpCOREARGS_PUSHMARK', 'OPpCOREARGS_SCALARMOD', 'OPpCOREARGS_DEREF2', 'OPpCOREARGS_DEREF1'); +$bits{cos}{0} = $bf[0]; +@{$bits{crypt}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{dbmclose}{0} = $bf[0]; +@{$bits{dbmopen}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{defined}{0} = $bf[0]; +@{$bits{delete}}{6,0} = ('OPpSLICE', $bf[0]); +@{$bits{die}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{divide}}{1,0} = ($bf[1], $bf[1]); +$bits{dofile}{0} = $bf[0]; +$bits{dor}{0} = $bf[0]; +$bits{dorassign}{0} = $bf[0]; +$bits{dump}{0} = $bf[0]; +$bits{each}{0} = $bf[0]; +@{$bits{entereval}}{5,4,3,2,1,0} = ('OPpEVAL_RE_REPARSING', 'OPpEVAL_COPHH', 'OPpEVAL_BYTES', 'OPpEVAL_UNICODE', 'OPpEVAL_HAS_HH', $bf[0]); +$bits{entergiven}{0} = $bf[0]; +$bits{enteriter}{3} = 'OPpITER_DEF'; +@{$bits{entersub}}{5,4,0} = ($bf[6], $bf[6], 'OPpENTERSUB_INARGS'); +$bits{entertry}{0} = $bf[0]; +$bits{enterwhen}{0} = $bf[0]; +@{$bits{enterwrite}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{eof}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{eq}}{1,0} = ($bf[1], $bf[1]); +@{$bits{exec}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{exists}}{6,0} = ('OPpEXISTS_SUB', $bf[0]); +@{$bits{exit}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{exp}{0} = $bf[0]; +$bits{fc}{0} = $bf[0]; +@{$bits{fcntl}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{fileno}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{flip}{0} = $bf[0]; +@{$bits{flock}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{flop}{0} = $bf[0]; +@{$bits{formline}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{ftatime}{0} = $bf[0]; +$bits{ftbinary}{0} = $bf[0]; +$bits{ftblk}{0} = $bf[0]; +$bits{ftchr}{0} = $bf[0]; +$bits{ftctime}{0} = $bf[0]; +$bits{ftdir}{0} = $bf[0]; +$bits{fteexec}{0} = $bf[0]; +$bits{fteowned}{0} = $bf[0]; +$bits{fteread}{0} = $bf[0]; +$bits{ftewrite}{0} = $bf[0]; +$bits{ftfile}{0} = $bf[0]; +$bits{ftis}{0} = $bf[0]; +$bits{ftlink}{0} = $bf[0]; +$bits{ftmtime}{0} = $bf[0]; +$bits{ftpipe}{0} = $bf[0]; +$bits{ftrexec}{0} = $bf[0]; +$bits{ftrowned}{0} = $bf[0]; +$bits{ftrread}{0} = $bf[0]; +$bits{ftrwrite}{0} = $bf[0]; +$bits{ftsgid}{0} = $bf[0]; +$bits{ftsize}{0} = $bf[0]; +$bits{ftsock}{0} = $bf[0]; +$bits{ftsuid}{0} = $bf[0]; +$bits{ftsvtx}{0} = $bf[0]; +$bits{fttext}{0} = $bf[0]; +$bits{fttty}{0} = $bf[0]; +$bits{ftzero}{0} = $bf[0]; +@{$bits{ge}}{1,0} = ($bf[1], $bf[1]); +@{$bits{gelem}}{1,0} = ($bf[1], $bf[1]); +@{$bits{getc}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{getpeername}{0} = $bf[0]; +@{$bits{getpgrp}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{getpriority}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{getsockname}{0} = $bf[0]; +$bits{ggrgid}{0} = $bf[0]; +$bits{ggrnam}{0} = $bf[0]; +@{$bits{ghbyaddr}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{ghbyname}{0} = $bf[0]; +@{$bits{glob}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{gmtime}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{gnbyaddr}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{gnbyname}{0} = $bf[0]; +$bits{goto}{0} = $bf[0]; +$bits{gpbyname}{0} = $bf[0]; +@{$bits{gpbynumber}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{gpwnam}{0} = $bf[0]; +$bits{gpwuid}{0} = $bf[0]; +$bits{grepstart}{0} = $bf[0]; +$bits{grepwhile}{0} = $bf[0]; +@{$bits{gsbyname}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{gsbyport}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{gsockopt}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{gt}}{1,0} = ($bf[1], $bf[1]); +$bits{gv}{5} = 'OPpEARLY_CV'; +@{$bits{helem}}{5,4,1,0} = ($bf[6], $bf[6], $bf[1], $bf[1]); +$bits{hex}{0} = $bf[0]; +@{$bits{i_add}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_divide}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_eq}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_ge}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_gt}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_le}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_lt}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_modulo}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_multiply}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_ncmp}}{1,0} = ($bf[1], $bf[1]); +@{$bits{i_ne}}{1,0} = ($bf[1], $bf[1]); +$bits{i_negate}{0} = $bf[0]; +$bits{i_postdec}{0} = $bf[0]; +$bits{i_postinc}{0} = $bf[0]; +$bits{i_predec}{0} = $bf[0]; +$bits{i_preinc}{0} = $bf[0]; +@{$bits{i_subtract}}{1,0} = ($bf[1], $bf[1]); +@{$bits{index}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{int}{0} = $bf[0]; +@{$bits{ioctl}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{join}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{keys}{0} = $bf[0]; +@{$bits{kill}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{last}{0} = $bf[0]; +$bits{lc}{0} = $bf[0]; +$bits{lcfirst}{0} = $bf[0]; +@{$bits{le}}{1,0} = ($bf[1], $bf[1]); +$bits{leaveeval}{0} = $bf[0]; +$bits{leavegiven}{0} = $bf[0]; +@{$bits{leaveloop}}{1,0} = ($bf[1], $bf[1]); +$bits{leavesub}{0} = $bf[0]; +$bits{leavesublv}{0} = $bf[0]; +$bits{leavewhen}{0} = $bf[0]; +$bits{leavewrite}{0} = $bf[0]; +@{$bits{left_shift}}{1,0} = ($bf[1], $bf[1]); +$bits{length}{0} = $bf[0]; +@{$bits{link}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{list}{6} = 'OPpLIST_GUESSED'; +@{$bits{listen}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{localtime}{0} = $bf[0]; +$bits{lock}{0} = $bf[0]; +$bits{log}{0} = $bf[0]; +@{$bits{lslice}}{1,0} = ($bf[1], $bf[1]); +$bits{lstat}{0} = $bf[0]; +@{$bits{lt}}{1,0} = ($bf[1], $bf[1]); +$bits{lvavref}{0} = $bf[0]; +@{$bits{lvref}}{5,4,0} = ($bf[7], $bf[7], $bf[0]); +$bits{mapstart}{0} = $bf[0]; +$bits{mapwhile}{0} = $bf[0]; +$bits{method}{0} = $bf[0]; +$bits{method_named}{0} = $bf[0]; +$bits{method_redir}{0} = $bf[0]; +$bits{method_redir_super}{0} = $bf[0]; +$bits{method_super}{0} = $bf[0]; +@{$bits{mkdir}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{modulo}}{1,0} = ($bf[1], $bf[1]); +@{$bits{msgctl}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{msgget}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{msgrcv}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{msgsnd}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{multideref}}{5,4,0} = ('OPpMULTIDEREF_DELETE', 'OPpMULTIDEREF_EXISTS', $bf[0]); +@{$bits{multiply}}{1,0} = ($bf[1], $bf[1]); +@{$bits{nbit_and}}{1,0} = ($bf[1], $bf[1]); +@{$bits{nbit_or}}{1,0} = ($bf[1], $bf[1]); +@{$bits{nbit_xor}}{1,0} = ($bf[1], $bf[1]); +@{$bits{ncmp}}{1,0} = ($bf[1], $bf[1]); +$bits{ncomplement}{0} = $bf[0]; +@{$bits{ne}}{1,0} = ($bf[1], $bf[1]); +$bits{negate}{0} = $bf[0]; +$bits{next}{0} = $bf[0]; +$bits{not}{0} = $bf[0]; +$bits{oct}{0} = $bf[0]; +$bits{once}{0} = $bf[0]; +@{$bits{open}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{open_dir}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{or}{0} = $bf[0]; +$bits{orassign}{0} = $bf[0]; +$bits{ord}{0} = $bf[0]; +@{$bits{pack}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{padrange}}{6,5,4,3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4], $bf[4], $bf[4], $bf[4]); +@{$bits{padsv}}{5,4} = ($bf[6], $bf[6]); +@{$bits{pipe_op}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{pop}{0} = $bf[0]; +$bits{pos}{0} = $bf[0]; +$bits{postdec}{0} = $bf[0]; +$bits{postinc}{0} = $bf[0]; +@{$bits{pow}}{1,0} = ($bf[1], $bf[1]); +$bits{predec}{0} = $bf[0]; +$bits{preinc}{0} = $bf[0]; +$bits{prototype}{0} = $bf[0]; +@{$bits{push}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{quotemeta}{0} = $bf[0]; +@{$bits{rand}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{range}{0} = $bf[0]; +$bits{reach}{0} = $bf[0]; +@{$bits{read}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{readdir}{0} = $bf[0]; +$bits{readline}{0} = $bf[0]; +$bits{readlink}{0} = $bf[0]; +@{$bits{recv}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{redo}{0} = $bf[0]; +$bits{ref}{0} = $bf[0]; +@{$bits{refassign}}{5,4,1,0} = ($bf[7], $bf[7], $bf[1], $bf[1]); +$bits{refgen}{0} = $bf[0]; +$bits{regcmaybe}{0} = $bf[0]; +$bits{regcomp}{0} = $bf[0]; +$bits{regcreset}{0} = $bf[0]; +@{$bits{rename}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{repeat}}{6,1,0} = ('OPpREPEAT_DOLIST', $bf[1], $bf[1]); +$bits{require}{0} = $bf[0]; +@{$bits{reset}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{reverse}}{3,0} = ('OPpREVERSE_INPLACE', $bf[0]); +$bits{rewinddir}{0} = $bf[0]; +@{$bits{right_shift}}{1,0} = ($bf[1], $bf[1]); +@{$bits{rindex}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{rkeys}{0} = $bf[0]; +$bits{rmdir}{0} = $bf[0]; +$bits{rv2av}{0} = $bf[0]; +@{$bits{rv2cv}}{7,5,0} = ('OPpENTERSUB_NOPAREN', 'OPpMAY_RETURN_CONSTANT', $bf[0]); +@{$bits{rv2gv}}{6,5,4,2,0} = ('OPpALLOW_FAKE', $bf[6], $bf[6], 'OPpDONT_INIT_GV', $bf[0]); +$bits{rv2hv}{0} = $bf[0]; +@{$bits{rv2sv}}{5,4,0} = ($bf[6], $bf[6], $bf[0]); +$bits{rvalues}{0} = $bf[0]; +@{$bits{sassign}}{7,6,1,0} = ('OPpASSIGN_CV_TO_GV', 'OPpASSIGN_BACKWARDS', $bf[1], $bf[1]); +@{$bits{sbit_and}}{1,0} = ($bf[1], $bf[1]); +@{$bits{sbit_or}}{1,0} = ($bf[1], $bf[1]); +@{$bits{sbit_xor}}{1,0} = ($bf[1], $bf[1]); +$bits{scalar}{0} = $bf[0]; +$bits{schomp}{0} = $bf[0]; +$bits{schop}{0} = $bf[0]; +@{$bits{scmp}}{1,0} = ($bf[1], $bf[1]); +$bits{scomplement}{0} = $bf[0]; +@{$bits{seek}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{seekdir}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{select}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{semctl}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{semget}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{semop}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{send}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{seq}}{1,0} = ($bf[1], $bf[1]); +@{$bits{setpgrp}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{setpriority}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sge}}{1,0} = ($bf[1], $bf[1]); +@{$bits{sgt}}{1,0} = ($bf[1], $bf[1]); +$bits{shift}{0} = $bf[0]; +@{$bits{shmctl}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{shmget}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{shmread}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{shmwrite}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{shostent}{0} = $bf[0]; +@{$bits{shutdown}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{sin}{0} = $bf[0]; +@{$bits{sle}}{1,0} = ($bf[1], $bf[1]); +@{$bits{sleep}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{slt}}{1,0} = ($bf[1], $bf[1]); +@{$bits{smartmatch}}{1,0} = ($bf[1], $bf[1]); +@{$bits{sne}}{1,0} = ($bf[1], $bf[1]); +$bits{snetent}{0} = $bf[0]; +@{$bits{socket}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sockpair}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sort}}{6,5,4,3,2,1,0} = ('OPpSORT_STABLE', 'OPpSORT_QSORT', 'OPpSORT_DESCEND', 'OPpSORT_INPLACE', 'OPpSORT_REVERSE', 'OPpSORT_INTEGER', 'OPpSORT_NUMERIC'); +@{$bits{splice}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{split}{7} = 'OPpSPLIT_IMPLIM'; +@{$bits{sprintf}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{sprotoent}{0} = $bf[0]; +$bits{sqrt}{0} = $bf[0]; +@{$bits{srand}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{srefgen}{0} = $bf[0]; +@{$bits{sselect}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{sservent}{0} = $bf[0]; +@{$bits{ssockopt}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{stat}{0} = $bf[0]; +@{$bits{stringify}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{study}{0} = $bf[0]; +$bits{substcont}{0} = $bf[0]; +@{$bits{substr}}{4,2,1,0} = ('OPpSUBSTR_REPL_FIRST', $bf[2], $bf[2], $bf[2]); +@{$bits{subtract}}{1,0} = ($bf[1], $bf[1]); +@{$bits{symlink}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{syscall}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sysopen}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sysread}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{sysseek}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{system}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{syswrite}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{tell}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{telldir}{0} = $bf[0]; +@{$bits{tie}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{tied}{0} = $bf[0]; +@{$bits{truncate}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{uc}{0} = $bf[0]; +$bits{ucfirst}{0} = $bf[0]; +@{$bits{umask}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{undef}{0} = $bf[0]; +@{$bits{unlink}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{unpack}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{unshift}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{untie}{0} = $bf[0]; +@{$bits{utime}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +$bits{values}{0} = $bf[0]; +@{$bits{vec}}{1,0} = ($bf[1], $bf[1]); +@{$bits{waitpid}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{warn}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]); +@{$bits{xor}}{1,0} = ($bf[1], $bf[1]); + + +our %defines = ( + OPpALLOW_FAKE => 64, + OPpARG1_MASK => 1, + OPpARG2_MASK => 3, + OPpARG3_MASK => 7, + OPpARG4_MASK => 15, + OPpASSIGN_BACKWARDS => 64, + OPpASSIGN_COMMON => 64, + OPpASSIGN_CV_TO_GV => 128, + OPpCONST_BARE => 64, + OPpCONST_ENTERED => 16, + OPpCONST_NOVER => 2, + OPpCONST_SHORTCIRCUIT => 4, + OPpCONST_STRICT => 8, + OPpCOREARGS_DEREF1 => 1, + OPpCOREARGS_DEREF2 => 2, + OPpCOREARGS_PUSHMARK => 128, + OPpCOREARGS_SCALARMOD => 64, + OPpDEREF => 48, + OPpDEREF_AV => 16, + OPpDEREF_HV => 32, + OPpDEREF_SV => 48, + OPpDONT_INIT_GV => 4, + OPpEARLY_CV => 32, + OPpENTERSUB_AMPER => 8, + OPpENTERSUB_DB => 64, + OPpENTERSUB_HASTARG => 4, + OPpENTERSUB_INARGS => 1, + OPpENTERSUB_NOPAREN => 128, + OPpEVAL_BYTES => 8, + OPpEVAL_COPHH => 16, + OPpEVAL_HAS_HH => 2, + OPpEVAL_RE_REPARSING => 32, + OPpEVAL_UNICODE => 4, + OPpEXISTS_SUB => 64, + OPpFLIP_LINENUM => 64, + OPpFT_ACCESS => 2, + OPpFT_AFTER_t => 16, + OPpFT_STACKED => 4, + OPpFT_STACKING => 8, + OPpGREP_LEX => 2, + OPpHINT_STRICT_REFS => 2, + OPpHUSH_VMSISH => 32, + OPpITER_DEF => 8, + OPpITER_REVERSED => 4, + OPpLIST_GUESSED => 64, + OPpLVALUE => 128, + OPpLVAL_DEFER => 64, + OPpLVAL_INTRO => 128, + OPpLVREF_AV => 16, + OPpLVREF_CV => 48, + OPpLVREF_ELEM => 4, + OPpLVREF_HV => 32, + OPpLVREF_ITER => 8, + OPpLVREF_SV => 0, + OPpLVREF_TYPE => 48, + OPpMAYBE_LVSUB => 8, + OPpMAYBE_TRUEBOOL => 16, + OPpMAY_RETURN_CONSTANT => 32, + OPpMULTIDEREF_DELETE => 32, + OPpMULTIDEREF_EXISTS => 16, + OPpOFFBYONE => 128, + OPpOPEN_IN_CRLF => 32, + OPpOPEN_IN_RAW => 16, + OPpOPEN_OUT_CRLF => 128, + OPpOPEN_OUT_RAW => 64, + OPpOUR_INTRO => 64, + OPpPADRANGE_COUNTMASK => 127, + OPpPADRANGE_COUNTSHIFT => 7, + OPpPAD_STATE => 64, + OPpPV_IS_UTF8 => 128, + OPpREFCOUNTED => 64, + OPpREPEAT_DOLIST => 64, + OPpREVERSE_INPLACE => 8, + OPpRUNTIME => 64, + OPpSLICE => 64, + OPpSLICEWARNING => 4, + OPpSORT_DESCEND => 16, + OPpSORT_INPLACE => 8, + OPpSORT_INTEGER => 2, + OPpSORT_NUMERIC => 1, + OPpSORT_QSORT => 32, + OPpSORT_REVERSE => 4, + OPpSORT_STABLE => 64, + OPpSPLIT_IMPLIM => 128, + OPpSUBSTR_REPL_FIRST => 16, + OPpTARGET_MY => 16, + OPpTRANS_COMPLEMENT => 32, + OPpTRANS_DELETE => 128, + OPpTRANS_FROM_UTF => 1, + OPpTRANS_GROWS => 64, + OPpTRANS_IDENTICAL => 4, + OPpTRANS_SQUASH => 8, + OPpTRANS_TO_UTF => 2, + OPpTRUEBOOL => 32, +); + +our %labels = ( + OPpALLOW_FAKE => 'FAKE', + OPpASSIGN_BACKWARDS => 'BKWARD', + OPpASSIGN_COMMON => 'COMMON', + OPpASSIGN_CV_TO_GV => 'CV2GV', + OPpCONST_BARE => 'BARE', + OPpCONST_ENTERED => 'ENTERED', + OPpCONST_NOVER => 'NOVER', + OPpCONST_SHORTCIRCUIT => 'SHORT', + OPpCONST_STRICT => 'STRICT', + OPpCOREARGS_DEREF1 => 'DEREF1', + OPpCOREARGS_DEREF2 => 'DEREF2', + OPpCOREARGS_PUSHMARK => 'MARK', + OPpCOREARGS_SCALARMOD => '$MOD', + OPpDEREF_AV => 'DREFAV', + OPpDEREF_HV => 'DREFHV', + OPpDEREF_SV => 'DREFSV', + OPpDONT_INIT_GV => 'NOINIT', + OPpEARLY_CV => 'EARLYCV', + OPpENTERSUB_AMPER => 'AMPER', + OPpENTERSUB_DB => 'DBG', + OPpENTERSUB_HASTARG => 'TARG', + OPpENTERSUB_INARGS => 'INARGS', + OPpENTERSUB_NOPAREN => 'NO()', + OPpEVAL_BYTES => 'BYTES', + OPpEVAL_COPHH => 'COPHH', + OPpEVAL_HAS_HH => 'HAS_HH', + OPpEVAL_RE_REPARSING => 'REPARSE', + OPpEVAL_UNICODE => 'UNI', + OPpEXISTS_SUB => 'SUB', + OPpFLIP_LINENUM => 'LINENUM', + OPpFT_ACCESS => 'FTACCESS', + OPpFT_AFTER_t => 'FTAFTERt', + OPpFT_STACKED => 'FTSTACKED', + OPpFT_STACKING => 'FTSTACKING', + OPpGREP_LEX => 'GREPLEX', + OPpHINT_STRICT_REFS => 'STRICT', + OPpHUSH_VMSISH => 'HUSH', + OPpITER_DEF => 'DEF', + OPpITER_REVERSED => 'REVERSED', + OPpLIST_GUESSED => 'GUESSED', + OPpLVALUE => 'LV', + OPpLVAL_DEFER => 'LVDEFER', + OPpLVAL_INTRO => 'LVINTRO', + OPpLVREF_AV => 'AV', + OPpLVREF_CV => 'CV', + OPpLVREF_ELEM => 'ELEM', + OPpLVREF_HV => 'HV', + OPpLVREF_ITER => 'ITER', + OPpLVREF_SV => 'SV', + OPpMAYBE_LVSUB => 'LVSUB', + OPpMAYBE_TRUEBOOL => 'BOOL?', + OPpMAY_RETURN_CONSTANT => 'CONST', + OPpMULTIDEREF_DELETE => 'DELETE', + OPpMULTIDEREF_EXISTS => 'EXISTS', + OPpOFFBYONE => '+1', + OPpOPEN_IN_CRLF => 'INCR', + OPpOPEN_IN_RAW => 'INBIN', + OPpOPEN_OUT_CRLF => 'OUTCR', + OPpOPEN_OUT_RAW => 'OUTBIN', + OPpOUR_INTRO => 'OURINTR', + OPpPAD_STATE => 'STATE', + OPpPV_IS_UTF8 => 'UTF', + OPpREFCOUNTED => 'REFC', + OPpREPEAT_DOLIST => 'DOLIST', + OPpREVERSE_INPLACE => 'INPLACE', + OPpRUNTIME => 'RTIME', + OPpSLICE => 'SLICE', + OPpSLICEWARNING => 'SLICEWARN', + OPpSORT_DESCEND => 'DESC', + OPpSORT_INPLACE => 'INPLACE', + OPpSORT_INTEGER => 'INT', + OPpSORT_NUMERIC => 'NUM', + OPpSORT_QSORT => 'QSORT', + OPpSORT_REVERSE => 'REV', + OPpSORT_STABLE => 'STABLE', + OPpSPLIT_IMPLIM => 'IMPLIM', + OPpSUBSTR_REPL_FIRST => 'REPL1ST', + OPpTARGET_MY => 'TARGMY', + OPpTRANS_COMPLEMENT => 'COMPL', + OPpTRANS_DELETE => 'DEL', + OPpTRANS_FROM_UTF => ' 'GROWS', + OPpTRANS_IDENTICAL => 'IDENT', + OPpTRANS_SQUASH => 'SQUASH', + OPpTRANS_TO_UTF => '>UTF', + OPpTRUEBOOL => 'BOOL', +); + + +our %ops_using = ( + OPpALLOW_FAKE => [qw(rv2gv)], + OPpASSIGN_BACKWARDS => [qw(sassign)], + OPpASSIGN_COMMON => [qw(aassign)], + OPpCONST_BARE => [qw(const)], + OPpCOREARGS_DEREF1 => [qw(coreargs)], + OPpEARLY_CV => [qw(gv)], + OPpENTERSUB_AMPER => [qw(entersub rv2cv)], + OPpENTERSUB_INARGS => [qw(entersub)], + OPpENTERSUB_NOPAREN => [qw(rv2cv)], + OPpEVAL_BYTES => [qw(entereval)], + OPpEXISTS_SUB => [qw(exists)], + OPpFLIP_LINENUM => [qw(flip flop)], + OPpFT_ACCESS => [qw(fteexec fteread ftewrite ftrexec ftrread ftrwrite)], + OPpFT_AFTER_t => [qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero)], + OPpGREP_LEX => [qw(grepstart grepwhile mapstart mapwhile)], + OPpHINT_STRICT_REFS => [qw(entersub multideref rv2av rv2cv rv2gv rv2hv rv2sv)], + OPpHUSH_VMSISH => [qw(dbstate nextstate)], + OPpITER_DEF => [qw(enteriter)], + OPpITER_REVERSED => [qw(enteriter iter)], + OPpLIST_GUESSED => [qw(list)], + OPpLVALUE => [qw(leave leaveloop)], + OPpLVAL_DEFER => [qw(aelem helem multideref)], + OPpLVAL_INTRO => [qw(aelem aslice cond_expr delete enteriter entersub gvsv helem hslice list lvavref lvref lvrefslice multideref padav padhv padrange padsv pushmark refassign rv2av rv2gv rv2hv rv2sv)], + OPpLVREF_ELEM => [qw(lvref refassign)], + OPpMAYBE_LVSUB => [qw(aassign aelem aslice av2arylen helem hslice keys kvaslice kvhslice multideref padav padhv pos rkeys rv2av rv2gv rv2hv substr vec)], + OPpMAYBE_TRUEBOOL => [qw(padhv rv2hv)], + OPpMULTIDEREF_DELETE => [qw(multideref)], + OPpOFFBYONE => [qw(caller runcv wantarray)], + OPpOPEN_IN_CRLF => [qw(backtick open)], + OPpOUR_INTRO => [qw(enteriter gvsv rv2av rv2hv rv2sv split)], + OPpPAD_STATE => [qw(lvavref lvref padav padhv padsv pushmark refassign)], + OPpPV_IS_UTF8 => [qw(dump goto last next redo)], + OPpREFCOUNTED => [qw(leave leaveeval leavesub leavesublv leavewrite)], + OPpREPEAT_DOLIST => [qw(repeat)], + OPpREVERSE_INPLACE => [qw(reverse)], + OPpRUNTIME => [qw(match pushre qr subst substcont)], + OPpSLICE => [qw(delete)], + OPpSLICEWARNING => [qw(aslice hslice padav padhv rv2av rv2hv)], + OPpSORT_DESCEND => [qw(sort)], + OPpSPLIT_IMPLIM => [qw(split)], + OPpSUBSTR_REPL_FIRST => [qw(substr)], + OPpTARGET_MY => [qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log match mkdir modulo multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push pushre qr rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subst subtract symlink system time trans transr unlink unshift utime wait waitpid)], + OPpTRANS_COMPLEMENT => [qw(trans transr)], +); + +$ops_using{OPpASSIGN_CV_TO_GV} = $ops_using{OPpASSIGN_BACKWARDS}; +$ops_using{OPpCONST_ENTERED} = $ops_using{OPpCONST_BARE}; +$ops_using{OPpCONST_NOVER} = $ops_using{OPpCONST_BARE}; +$ops_using{OPpCONST_SHORTCIRCUIT} = $ops_using{OPpCONST_BARE}; +$ops_using{OPpCONST_STRICT} = $ops_using{OPpCONST_BARE}; +$ops_using{OPpCOREARGS_DEREF2} = $ops_using{OPpCOREARGS_DEREF1}; +$ops_using{OPpCOREARGS_PUSHMARK} = $ops_using{OPpCOREARGS_DEREF1}; +$ops_using{OPpCOREARGS_SCALARMOD} = $ops_using{OPpCOREARGS_DEREF1}; +$ops_using{OPpDONT_INIT_GV} = $ops_using{OPpALLOW_FAKE}; +$ops_using{OPpENTERSUB_DB} = $ops_using{OPpENTERSUB_AMPER}; +$ops_using{OPpENTERSUB_HASTARG} = $ops_using{OPpENTERSUB_AMPER}; +$ops_using{OPpEVAL_COPHH} = $ops_using{OPpEVAL_BYTES}; +$ops_using{OPpEVAL_HAS_HH} = $ops_using{OPpEVAL_BYTES}; +$ops_using{OPpEVAL_RE_REPARSING} = $ops_using{OPpEVAL_BYTES}; +$ops_using{OPpEVAL_UNICODE} = $ops_using{OPpEVAL_BYTES}; +$ops_using{OPpFT_STACKED} = $ops_using{OPpFT_AFTER_t}; +$ops_using{OPpFT_STACKING} = $ops_using{OPpFT_AFTER_t}; +$ops_using{OPpLVREF_ITER} = $ops_using{OPpLVREF_ELEM}; +$ops_using{OPpMAY_RETURN_CONSTANT} = $ops_using{OPpENTERSUB_NOPAREN}; +$ops_using{OPpMULTIDEREF_EXISTS} = $ops_using{OPpMULTIDEREF_DELETE}; +$ops_using{OPpOPEN_IN_RAW} = $ops_using{OPpOPEN_IN_CRLF}; +$ops_using{OPpOPEN_OUT_CRLF} = $ops_using{OPpOPEN_IN_CRLF}; +$ops_using{OPpOPEN_OUT_RAW} = $ops_using{OPpOPEN_IN_CRLF}; +$ops_using{OPpSORT_INPLACE} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpSORT_INTEGER} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpSORT_NUMERIC} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpSORT_QSORT} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpSORT_REVERSE} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpSORT_STABLE} = $ops_using{OPpSORT_DESCEND}; +$ops_using{OPpTRANS_DELETE} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRANS_FROM_UTF} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRANS_GROWS} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRANS_IDENTICAL} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRANS_SQUASH} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRANS_TO_UTF} = $ops_using{OPpTRANS_COMPLEMENT}; +$ops_using{OPpTRUEBOOL} = $ops_using{OPpMAYBE_TRUEBOOL}; + +# ex: set ro: diff --git a/Master/tlpkg/tlperl/lib/B/Showlex.pm b/Master/tlpkg/tlperl/lib/B/Showlex.pm index ab684516100..1ad230e7bdf 100644 --- a/Master/tlpkg/tlperl/lib/B/Showlex.pm +++ b/Master/tlpkg/tlperl/lib/B/Showlex.pm @@ -1,6 +1,6 @@ package B::Showlex; -our $VERSION = '1.04'; +our $VERSION = '1.05'; use strict; use B qw(svref_2object comppadlist class); @@ -36,7 +36,8 @@ sub shownamearray { for ($i = 0; $i < $count; $i++) { my $sv = $els[$i]; if (class($sv) ne "SPECIAL") { - printf $walkHandle "$i: %s (0x%lx) %s\n", class($sv), $$sv, $sv->PVX; + printf $walkHandle "$i: (0x%lx) %s\n", + $$sv, $sv->PVX // "undef" || "const"; } else { printf $walkHandle "$i: %s\n", $sv->terse; #printf $walkHandle "$i: %s\n", B::Concise::concise_sv($sv); @@ -64,16 +65,27 @@ sub showlex { my ($newlex, $nosp1); # rendering state vars +sub padname_terse { + my $name = shift; + return $name->terse if class($name) eq 'SPECIAL'; + my $str = $name->PVX; + return sprintf "(0x%lx) %s", + $$name, + length $str ? qq'"$str"' : defined $str ? "const" : 'undef'; +} + sub newlex { # drop-in for showlex my ($objname, $names, $vals) = @_; my @names = $names->ARRAY; my @vals = $vals->ARRAY; my $count = @names; print $walkHandle "$objname Pad has $count entries\n"; - printf $walkHandle "0: %s\n", $names[0]->terse unless $nosp1; + printf $walkHandle "0: %s\n", padname_terse($names[0]) unless $nosp1; for (my $i = 1; $i < $count; $i++) { - printf $walkHandle "$i: %s = %s\n", $names[$i]->terse, $vals[$i]->terse - unless $nosp1 and $names[$i]->terse =~ /SPECIAL/; + printf $walkHandle "$i: %s = %s\n", padname_terse($names[$i]), + $vals[$i]->terse, + unless $nosp1 + and class($names[$i]) eq 'SPECIAL' || !$names[$i]->LEN; } } @@ -143,10 +155,10 @@ Traditional form: $ perl -MO=Showlex -e 'my ($i,$j,$k)=(1,"foo")' Pad of lexical names for comppadlist has 4 entries - 0: SPECIAL #1 &PL_sv_undef - 1: PVNV (0x9db0fb0) $i - 2: PVNV (0x9db0f38) $j - 3: PVNV (0x9db0f50) $k + 0: (0x8caea4) undef + 1: (0x9db0fb0) $i + 2: (0x9db0f38) $j + 3: (0x9db0f50) $k Pad of lexical values for comppadlist has 5 entries 0: SPECIAL #1 &PL_sv_undef 1: NULL (0x9da4234) @@ -159,10 +171,10 @@ New-style form: $ perl -MO=Showlex,-newlex -e 'my ($i,$j,$k)=(1,"foo")' main Pad has 4 entries - 0: SPECIAL #1 &PL_sv_undef - 1: PVNV (0xa0c4fb8) "$i" = NULL (0xa0b8234) - 2: PVNV (0xa0c4f40) "$j" = NULL (0xa0c4f34) - 3: PVNV (0xa0c4f58) "$k" = NULL (0xa0c4f4c) + 0: (0x8caea4) undef + 1: (0xa0c4fb8) "$i" = NULL (0xa0b8234) + 2: (0xa0c4f40) "$j" = NULL (0xa0c4f34) + 3: (0xa0c4f58) "$k" = NULL (0xa0c4f4c) -e syntax OK New form, no specials, outside O framework: @@ -170,9 +182,9 @@ New form, no specials, outside O framework: $ perl -MB::Showlex -e \ 'my ($i,$j,$k)=(1,"foo"); B::Showlex::compile(-newlex,-nosp)->()' main Pad has 4 entries - 1: PVNV (0x998ffb0) "$i" = IV (0x9983234) 1 - 2: PVNV (0x998ff68) "$j" = PV (0x998ff5c) "foo" - 3: PVNV (0x998ff80) "$k" = NULL (0x998ff74) + 1: (0x998ffb0) "$i" = IV (0x9983234) 1 + 2: (0x998ff68) "$j" = PV (0x998ff5c) "foo" + 3: (0x998ff80) "$k" = NULL (0x998ff74) Note that this example shows the values of the lexicals, whereas the other examples did not (as they're compile-time only). diff --git a/Master/tlpkg/tlperl/lib/Benchmark.pm b/Master/tlpkg/tlperl/lib/Benchmark.pm index 9a43a2bc60e..b3016788080 100644 --- a/Master/tlpkg/tlperl/lib/Benchmark.pm +++ b/Master/tlpkg/tlperl/lib/Benchmark.pm @@ -404,7 +404,7 @@ outputs something like this: =head1 INHERITANCE Benchmark inherits from no other class, except of course -for Exporter. +from Exporter. =head1 CAVEATS @@ -482,7 +482,7 @@ our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION); clearcache clearallcache disablecache enablecache); %EXPORT_TAGS=( all => [ @EXPORT, @EXPORT_OK ] ) ; -$VERSION = 1.18; +$VERSION = 1.20; # --- ':hireswallclock' special handling @@ -700,8 +700,18 @@ sub runloop { # getting a too low initial $n in the initial, 'find the minimum' loop # in &countit. This, in turn, can reduce the number of calls to # &runloop a lot, and thus reduce additive errors. + # + # Note that its possible for the act of reading the system clock to + # burn lots of system CPU while we burn very little user clock in the + # busy loop, which can cause the loop to run for a very long wall time. + # So gradually ramp up the duration of the loop. See RT #122003 + # my $tbase = Benchmark->new(0)->[1]; - while ( ( $t0 = Benchmark->new(0) )->[1] == $tbase ) {} ; + my $limit = 1; + while ( ( $t0 = Benchmark->new(0) )->[1] == $tbase ) { + for (my $i=0; $i < $limit; $i++) { my $x = $i / 1.5 } # burn user CPU + $limit *= 1.1; + } $subref->(); $t1 = Benchmark->new($n); $td = &timediff($t1, $t0); diff --git a/Master/tlpkg/tlperl/lib/CGI.pm b/Master/tlpkg/tlperl/lib/CGI.pm deleted file mode 100644 index bcee2b1134d..00000000000 --- a/Master/tlpkg/tlperl/lib/CGI.pm +++ /dev/null @@ -1,8116 +0,0 @@ -package CGI; -require 5.008001; -use if $] >= 5.019, 'deprecate'; -use Carp 'croak'; - -# See the bottom of this file for the POD documentation. Search for the -# string '=head'. - -# You can run this file through either pod2man or pod2html to produce pretty -# documentation in manual or html file format (these utilities are part of the -# Perl 5 distribution). - -# Copyright 1995-1998 Lincoln D. Stein. All rights reserved. -# It may be used and modified freely, but I do request that this copyright -# notice remain attached to the file. You may modify this module as you -# wish, but if you redistribute a modified version, please attach a note -# listing the modifications you have made. - -# The most recent version and complete docs are available at: -# http://search.cpan.org/dist/CGI.pm - -# The revision is no longer being updated since moving to git. -$CGI::revision = '$Id: CGI.pm,v 1.266 2009/07/30 16:32:34 lstein Exp $'; -$CGI::VERSION='3.65'; - -# HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES. -# UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING. -# $CGITempFile::TMPDIRECTORY = '/usr/tmp'; -use CGI::Util qw(rearrange rearrange_header make_attributes unescape escape expires ebcdic2ascii ascii2ebcdic); - -#use constant XHTML_DTD => ['-//W3C//DTD XHTML Basic 1.0//EN', -# 'http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd']; - -use constant XHTML_DTD => ['-//W3C//DTD XHTML 1.0 Transitional//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd']; - -{ - local $^W = 0; - $TAINTED = substr("$0$^X",0,0); -} - -$MOD_PERL = 0; # no mod_perl by default - -#global settings -$POST_MAX = -1; # no limit to uploaded files -$DISABLE_UPLOADS = 0; - -@SAVED_SYMBOLS = (); - - -# >>>>> Here are some globals that you might want to adjust <<<<<< -sub initialize_globals { - # Set this to 1 to enable copious autoloader debugging messages - $AUTOLOAD_DEBUG = 0; - - # Set this to 1 to generate XTML-compatible output - $XHTML = 1; - - # Change this to the preferred DTD to print in start_html() - # or use default_dtd('text of DTD to use'); - $DEFAULT_DTD = [ '-//W3C//DTD HTML 4.01 Transitional//EN', - 'http://www.w3.org/TR/html4/loose.dtd' ] ; - - # Set this to 1 to enable NOSTICKY scripts - # or: - # 1) use CGI '-nosticky'; - # 2) $CGI::NOSTICKY = 1; - $NOSTICKY = 0; - - # Set this to 1 to enable NPH scripts - # or: - # 1) use CGI qw(-nph) - # 2) CGI::nph(1) - # 3) print header(-nph=>1) - $NPH = 0; - - # Set this to 1 to enable debugging from @ARGV - # Set to 2 to enable debugging from STDIN - $DEBUG = 1; - - # Set this to 1 to make the temporary files created - # during file uploads safe from prying eyes - # or do... - # 1) use CGI qw(:private_tempfiles) - # 2) CGI::private_tempfiles(1); - $PRIVATE_TEMPFILES = 0; - - # Set this to 1 to generate automatic tab indexes - $TABINDEX = 0; - - # Set this to 1 to cause files uploaded in multipart documents - # to be closed, instead of caching the file handle - # or: - # 1) use CGI qw(:close_upload_files) - # 2) $CGI::close_upload_files(1); - # Uploads with many files run out of file handles. - # Also, for performance, since the file is already on disk, - # it can just be renamed, instead of read and written. - $CLOSE_UPLOAD_FILES = 0; - - # Automatically determined -- don't change - $EBCDIC = 0; - - # Change this to 1 to suppress redundant HTTP headers - $HEADERS_ONCE = 0; - - # separate the name=value pairs by semicolons rather than ampersands - $USE_PARAM_SEMICOLONS = 1; - - # Do not include undefined params parsed from query string - # use CGI qw(-no_undef_params); - $NO_UNDEF_PARAMS = 0; - - # return everything as utf-8 - $PARAM_UTF8 = 0; - - # Other globals that you shouldn't worry about. - undef $Q; - $BEEN_THERE = 0; - $DTD_PUBLIC_IDENTIFIER = ""; - undef @QUERY_PARAM; - undef %EXPORT; - undef $QUERY_CHARSET; - undef %QUERY_FIELDNAMES; - undef %QUERY_TMPFILES; - - # prevent complaints by mod_perl - 1; -} - -# ------------------ START OF THE LIBRARY ------------ - -# make mod_perlhappy -initialize_globals(); - -# FIGURE OUT THE OS WE'RE RUNNING UNDER -# Some systems support the $^O variable. If not -# available then require() the Config library -unless ($OS) { - unless ($OS = $^O) { - require Config; - $OS = $Config::Config{'osname'}; - } -} -if ($OS =~ /^MSWin/i) { - $OS = 'WINDOWS'; -} elsif ($OS =~ /^VMS/i) { - $OS = 'VMS'; -} elsif ($OS =~ /^dos/i) { - $OS = 'DOS'; -} elsif ($OS =~ /^MacOS/i) { - $OS = 'MACINTOSH'; -} elsif ($OS =~ /^os2/i) { - $OS = 'OS2'; -} elsif ($OS =~ /^epoc/i) { - $OS = 'EPOC'; -} elsif ($OS =~ /^cygwin/i) { - $OS = 'CYGWIN'; -} elsif ($OS =~ /^NetWare/i) { - $OS = 'NETWARE'; -} else { - $OS = 'UNIX'; -} - -# Some OS logic. Binary mode enabled on DOS, NT and VMS -$needs_binmode = $OS=~/^(WINDOWS|DOS|OS2|MSWin|CYGWIN|NETWARE)/; - -# This is the default class for the CGI object to use when all else fails. -$DefaultClass = 'CGI' unless defined $CGI::DefaultClass; - -# This is where to look for autoloaded routines. -$AutoloadClass = $DefaultClass unless defined $CGI::AutoloadClass; - -# The path separator is a slash, backslash or semicolon, depending -# on the platform. -$SL = { - UNIX => '/', OS2 => '\\', EPOC => '/', CYGWIN => '/', NETWARE => '/', - WINDOWS => '\\', DOS => '\\', MACINTOSH => ':', VMS => '/' - }->{$OS}; - -# This no longer seems to be necessary -# Turn on NPH scripts by default when running under IIS server! -# $NPH++ if defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/; -$IIS++ if defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/; - -# Turn on special checking for ActiveState's PerlEx -$PERLEX++ if defined($ENV{'GATEWAY_INTERFACE'}) && $ENV{'GATEWAY_INTERFACE'} =~ /^CGI-PerlEx/; - -# Turn on special checking for Doug MacEachern's modperl -# PerlEx::DBI tries to fool DBI by setting MOD_PERL -if (exists $ENV{MOD_PERL} && ! $PERLEX) { - # mod_perl handlers may run system() on scripts using CGI.pm; - # Make sure so we don't get fooled by inherited $ENV{MOD_PERL} - if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) { - $MOD_PERL = 2; - require Apache2::Response; - require Apache2::RequestRec; - require Apache2::RequestUtil; - require Apache2::RequestIO; - require APR::Pool; - } else { - $MOD_PERL = 1; - require Apache; - } -} - -# Define the CRLF sequence. I can't use a simple "\r\n" because the meaning -# of "\n" is different on different OS's (sometimes it generates CRLF, sometimes LF -# and sometimes CR). The most popular VMS web server -# doesn't accept CRLF -- instead it wants a LR. EBCDIC machines don't -# use ASCII, so \015\012 means something different. I find this all -# really annoying. -$EBCDIC = "\t" ne "\011"; -if ($OS eq 'VMS') { - $CRLF = "\n"; -} elsif ($EBCDIC) { - $CRLF= "\r\n"; -} else { - $CRLF = "\015\012"; -} - -if ($needs_binmode) { - $CGI::DefaultClass->binmode(\*main::STDOUT); - $CGI::DefaultClass->binmode(\*main::STDIN); - $CGI::DefaultClass->binmode(\*main::STDERR); -} - -%EXPORT_TAGS = ( - ':html2'=>['h1'..'h6',qw/p br hr ol ul li dl dt dd menu code var strong em - tt u i b blockquote pre img a address cite samp dfn html head - base body Link nextid title meta kbd start_html end_html - input Select option comment charset escapeHTML/], - ':html3'=>[qw/div table caption th td TR Tr sup Sub strike applet Param nobr - embed basefont style span layer ilayer font frameset frame script small big Area Map/], - ':html4'=>[qw/abbr acronym bdo col colgroup del fieldset iframe - ins label legend noframes noscript object optgroup Q - thead tbody tfoot/], - ':netscape'=>[qw/blink fontsize center/], - ':form'=>[qw/textfield textarea filefield password_field hidden checkbox checkbox_group - submit reset defaults radio_group popup_menu button autoEscape - scrolling_list image_button start_form end_form startform endform - start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART/], - ':cgi'=>[qw/param upload path_info path_translated request_uri url self_url script_name - cookie Dump - raw_cookie request_method query_string Accept user_agent remote_host content_type - remote_addr referer server_name server_software server_port server_protocol virtual_port - virtual_host remote_ident auth_type http append - save_parameters restore_parameters param_fetch - remote_user user_name header redirect import_names put - Delete Delete_all url_param cgi_error/], - ':ssl' => [qw/https/], - ':cgi-lib' => [qw/ReadParse PrintHeader HtmlTop HtmlBot SplitParam Vars/], - ':html' => [qw/:html2 :html3 :html4 :netscape/], - ':standard' => [qw/:html2 :html3 :html4 :form :cgi/], - ':push' => [qw/multipart_init multipart_start multipart_end multipart_final/], - ':all' => [qw/:html2 :html3 :netscape :form :cgi :internal :html4/] - ); - -# Custom 'can' method for both autoloaded and non-autoloaded subroutines. -# Author: Cees Hek - -sub can { - my($class, $method) = @_; - - # See if UNIVERSAL::can finds it. - - if (my $func = $class -> SUPER::can($method) ){ - return $func; - } - - # Try to compile the function. - - eval { - # _compile looks at $AUTOLOAD for the function name. - - local $AUTOLOAD = join "::", $class, $method; - &_compile; - }; - - # Now that the function is loaded (if it exists) - # just use UNIVERSAL::can again to do the work. - - return $class -> SUPER::can($method); -} - -# to import symbols into caller -sub import { - my $self = shift; - - # This causes modules to clash. - undef %EXPORT_OK; - undef %EXPORT; - - $self->_setup_symbols(@_); - my ($callpack, $callfile, $callline) = caller; - - # To allow overriding, search through the packages - # Till we find one in which the correct subroutine is defined. - my @packages = ($self,@{"$self\:\:ISA"}); - for $sym (keys %EXPORT) { - my $pck; - my $def = ${"$self\:\:AutoloadClass"} || $DefaultClass; - for $pck (@packages) { - if (defined(&{"$pck\:\:$sym"})) { - $def = $pck; - last; - } - } - *{"${callpack}::$sym"} = \&{"$def\:\:$sym"}; - } -} - -sub compile { - my $pack = shift; - $pack->_setup_symbols('-compile',@_); -} - -sub expand_tags { - my($tag) = @_; - return ("start_$1","end_$1") if $tag=~/^(?:\*|start_|end_)(.+)/; - my(@r); - return ($tag) unless $EXPORT_TAGS{$tag}; - for (@{$EXPORT_TAGS{$tag}}) { - push(@r,&expand_tags($_)); - } - return @r; -} - -#### Method: new -# The new routine. This will check the current environment -# for an existing query string, and initialize itself, if so. -#### -sub new { - my($class,@initializer) = @_; - my $self = {}; - - bless $self,ref $class || $class || $DefaultClass; - - # always use a tempfile - $self->{'use_tempfile'} = 1; - - if (ref($initializer[0]) - && (UNIVERSAL::isa($initializer[0],'Apache') - || - UNIVERSAL::isa($initializer[0],'Apache2::RequestRec') - )) { - $self->r(shift @initializer); - } - if (ref($initializer[0]) - && (UNIVERSAL::isa($initializer[0],'CODE'))) { - $self->upload_hook(shift @initializer, shift @initializer); - $self->{'use_tempfile'} = shift @initializer if (@initializer > 0); - } - if ($MOD_PERL) { - if ($MOD_PERL == 1) { - $self->r(Apache->request) unless $self->r; - my $r = $self->r; - $r->register_cleanup(\&CGI::_reset_globals); - $self->_setup_symbols(@SAVED_SYMBOLS) if @SAVED_SYMBOLS; - } - else { - # XXX: once we have the new API - # will do a real PerlOptions -SetupEnv check - $self->r(Apache2::RequestUtil->request) unless $self->r; - my $r = $self->r; - $r->subprocess_env unless exists $ENV{REQUEST_METHOD}; - $r->pool->cleanup_register(\&CGI::_reset_globals); - $self->_setup_symbols(@SAVED_SYMBOLS) if @SAVED_SYMBOLS; - } - undef $NPH; - } - $self->_reset_globals if $PERLEX; - $self->init(@initializer); - return $self; -} - -# We provide a DESTROY method so that we can ensure that -# temporary files are closed (via Fh->DESTROY) before they -# are unlinked (via CGITempFile->DESTROY) because it is not -# possible to unlink an open file on Win32. We explicitly -# call DESTROY on each, rather than just undefing them and -# letting Perl DESTROY them by garbage collection, in case the -# user is still holding any reference to them as well. -sub DESTROY { - my $self = shift; - if ($OS eq 'WINDOWS' || $OS eq 'VMS') { - for my $href (values %{$self->{'.tmpfiles'}}) { - $href->{hndl}->DESTROY if defined $href->{hndl}; - $href->{name}->DESTROY if defined $href->{name}; - } - } -} - -sub r { - my $self = shift; - my $r = $self->{'.r'}; - $self->{'.r'} = shift if @_; - $r; -} - -sub upload_hook { - my $self; - if (ref $_[0] eq 'CODE') { - $CGI::Q = $self = $CGI::DefaultClass->new(@_); - } else { - $self = shift; - } - my ($hook,$data,$use_tempfile) = @_; - $self->{'.upload_hook'} = $hook; - $self->{'.upload_data'} = $data; - $self->{'use_tempfile'} = $use_tempfile if defined $use_tempfile; -} - -#### Method: param -# Returns the value(s)of a named parameter. -# If invoked in a list context, returns the -# entire list. Otherwise returns the first -# member of the list. -# If name is not provided, return a list of all -# the known parameters names available. -# If more than one argument is provided, the -# second and subsequent arguments are used to -# set the value of the parameter. -#### -sub param { - my($self,@p) = self_or_default(@_); - return $self->all_parameters unless @p; - my($name,$value,@other); - - # For compatibility between old calling style and use_named_parameters() style, - # we have to special case for a single parameter present. - if (@p > 1) { - ($name,$value,@other) = rearrange([NAME,[DEFAULT,VALUE,VALUES]],@p); - my(@values); - - if (substr($p[0],0,1) eq '-') { - @values = defined($value) ? (ref($value) && ref($value) eq 'ARRAY' ? @{$value} : $value) : (); - } else { - for ($value,@other) { - push(@values,$_) if defined($_); - } - } - # If values is provided, then we set it. - if (@values or defined $value) { - $self->add_parameter($name); - $self->{param}{$name}=[@values]; - } - } else { - $name = $p[0]; - } - - return unless defined($name) && $self->{param}{$name}; - - my @result = @{$self->{param}{$name}}; - - if ($PARAM_UTF8) { - eval "require Encode; 1;" unless Encode->can('decode'); # bring in these functions - @result = map {ref $_ ? $_ : $self->_decode_utf8($_) } @result; - } - - return wantarray ? @result : $result[0]; -} - -sub _decode_utf8 { - my ($self, $val) = @_; - - if (Encode::is_utf8($val)) { - return $val; - } - else { - return Encode::decode(utf8 => $val); - } -} - -sub self_or_default { - return @_ if defined($_[0]) && (!ref($_[0])) &&($_[0] eq 'CGI'); - unless (defined($_[0]) && - (ref($_[0]) eq 'CGI' || UNIVERSAL::isa($_[0],'CGI')) # slightly optimized for common case - ) { - $Q = $CGI::DefaultClass->new unless defined($Q); - unshift(@_,$Q); - } - return wantarray ? @_ : $Q; -} - -sub self_or_CGI { - local $^W=0; # prevent a warning - if (defined($_[0]) && - (substr(ref($_[0]),0,3) eq 'CGI' - || UNIVERSAL::isa($_[0],'CGI'))) { - return @_; - } else { - return ($DefaultClass,@_); - } -} - -######################################## -# THESE METHODS ARE MORE OR LESS PRIVATE -# GO TO THE __DATA__ SECTION TO SEE MORE -# PUBLIC METHODS -######################################## - -# Initialize the query object from the environment. -# If a parameter list is found, this object will be set -# to a hash in which parameter names are keys -# and the values are stored as lists -# If a keyword list is found, this method creates a bogus -# parameter list with the single parameter 'keywords'. - -sub init { - my $self = shift; - my($query_string,$meth,$content_length,$fh,@lines) = ('','','',''); - - my $is_xforms; - - my $initializer = shift; # for backward compatibility - local($/) = "\n"; - - # set autoescaping on by default - $self->{'escape'} = 1; - - # if we get called more than once, we want to initialize - # ourselves from the original query (which may be gone - # if it was read from STDIN originally.) - if (@QUERY_PARAM && !defined($initializer)) { - for my $name (@QUERY_PARAM) { - my $val = $QUERY_PARAM{$name}; # always an arrayref; - $self->param('-name'=>$name,'-value'=> $val); - if (defined $val and ref $val eq 'ARRAY') { - for my $fh (grep {defined($_) && ref($_) && defined(fileno($_))} @$val) { - seek($fh,0,0); # reset the filehandle. - } - - } - } - $self->charset($QUERY_CHARSET); - $self->{'.fieldnames'} = {%QUERY_FIELDNAMES}; - $self->{'.tmpfiles'} = {%QUERY_TMPFILES}; - return; - } - - $meth=$ENV{'REQUEST_METHOD'} if defined($ENV{'REQUEST_METHOD'}); - $content_length = defined($ENV{'CONTENT_LENGTH'}) ? $ENV{'CONTENT_LENGTH'} : 0; - - $fh = to_filehandle($initializer) if $initializer; - - # set charset to the safe ISO-8859-1 - $self->charset('ISO-8859-1'); - - METHOD: { - - # avoid unreasonably large postings - if (($POST_MAX > 0) && ($content_length > $POST_MAX)) { - #discard the post, unread - $self->cgi_error("413 Request entity too large"); - last METHOD; - } - - # Process multipart postings, but only if the initializer is - # not defined. - if ($meth eq 'POST' - && defined($ENV{'CONTENT_TYPE'}) - && $ENV{'CONTENT_TYPE'}=~m|^multipart/form-data| - && !defined($initializer) - ) { - my($boundary) = $ENV{'CONTENT_TYPE'} =~ /boundary=\"?([^\";,]+)\"?/; - $self->read_multipart($boundary,$content_length); - last METHOD; - } - - # Process XForms postings. We know that we have XForms in the - # following cases: - # method eq 'POST' && content-type eq 'application/xml' - # method eq 'POST' && content-type =~ /multipart\/related.+start=/ - # There are more cases, actually, but for now, we don't support other - # methods for XForm posts. - # In a XForm POST, the QUERY_STRING is parsed normally. - # If the content-type is 'application/xml', we just set the param - # XForms:Model (referring to the xml syntax) param containing the - # unparsed XML data. - # In the case of multipart/related we set XForms:Model as above, but - # the other parts are available as uploads with the Content-ID as the - # the key. - # See the URL below for XForms specs on this issue. - # http://www.w3.org/TR/2006/REC-xforms-20060314/slice11.html#submit-options - if ($meth eq 'POST' && defined($ENV{'CONTENT_TYPE'})) { - if ($ENV{'CONTENT_TYPE'} eq 'application/xml') { - my($param) = 'XForms:Model'; - my($value) = ''; - $self->add_parameter($param); - $self->read_from_client(\$value,$content_length,0) - if $content_length > 0; - push (@{$self->{param}{$param}},$value); - $is_xforms = 1; - } elsif ($ENV{'CONTENT_TYPE'} =~ /multipart\/related.+boundary=\"?([^\";,]+)\"?.+start=\"?\]+)\>?\"?/) { - my($boundary,$start) = ($1,$2); - my($param) = 'XForms:Model'; - $self->add_parameter($param); - my($value) = $self->read_multipart_related($start,$boundary,$content_length,0); - push (@{$self->{param}{$param}},$value); - if ($MOD_PERL) { - $query_string = $self->r->args; - } else { - $query_string = $ENV{'QUERY_STRING'} if defined $ENV{'QUERY_STRING'}; - $query_string ||= $ENV{'REDIRECT_QUERY_STRING'} if defined $ENV{'REDIRECT_QUERY_STRING'}; - } - $is_xforms = 1; - } - } - - - # If initializer is defined, then read parameters - # from it. - if (!$is_xforms && defined($initializer)) { - if (UNIVERSAL::isa($initializer,'CGI')) { - $query_string = $initializer->query_string; - last METHOD; - } - if (ref($initializer) && ref($initializer) eq 'HASH') { - for (keys %$initializer) { - $self->param('-name'=>$_,'-value'=>$initializer->{$_}); - } - last METHOD; - } - - if (defined($fh) && ($fh ne '')) { - while (my $line = <$fh>) { - chomp $line; - last if $line =~ /^=$/; - push(@lines,$line); - } - # massage back into standard format - if ("@lines" =~ /=/) { - $query_string=join("&",@lines); - } else { - $query_string=join("+",@lines); - } - last METHOD; - } - - # last chance -- treat it as a string - $initializer = $$initializer if ref($initializer) eq 'SCALAR'; - $query_string = $initializer; - - last METHOD; - } - - # If method is GET, HEAD or DELETE, fetch the query from - # the environment. - if ($is_xforms || $meth=~/^(GET|HEAD|DELETE)$/) { - if ($MOD_PERL) { - $query_string = $self->r->args; - } else { - $query_string = $ENV{'QUERY_STRING'} if defined $ENV{'QUERY_STRING'}; - $query_string ||= $ENV{'REDIRECT_QUERY_STRING'} if defined $ENV{'REDIRECT_QUERY_STRING'}; - } - last METHOD; - } - - if ($meth eq 'POST' || $meth eq 'PUT') { - if ( $content_length > 0 ) { - $self->read_from_client(\$query_string,$content_length,0); - } - # Some people want to have their cake and eat it too! - # Uncomment this line to have the contents of the query string - # APPENDED to the POST data. - # $query_string .= (length($query_string) ? '&' : '') . $ENV{'QUERY_STRING'} if defined $ENV{'QUERY_STRING'}; - last METHOD; - } - - # If $meth is not of GET, POST, PUT or HEAD, assume we're - # being debugged offline. - # Check the command line and then the standard input for data. - # We use the shellwords package in order to behave the way that - # UN*X programmers expect. - if ($DEBUG) - { - my $cmdline_ret = read_from_cmdline(); - $query_string = $cmdline_ret->{'query_string'}; - if (defined($cmdline_ret->{'subpath'})) - { - $self->path_info($cmdline_ret->{'subpath'}); - } - } - } - -# YL: Begin Change for XML handler 10/19/2001 - if (!$is_xforms && ($meth eq 'POST' || $meth eq 'PUT') - && defined($ENV{'CONTENT_TYPE'}) - && $ENV{'CONTENT_TYPE'} !~ m|^application/x-www-form-urlencoded| - && $ENV{'CONTENT_TYPE'} !~ m|^multipart/form-data| ) { - my($param) = $meth . 'DATA' ; - $self->add_parameter($param) ; - push (@{$self->{param}{$param}},$query_string); - undef $query_string ; - } -# YL: End Change for XML handler 10/19/2001 - - # We now have the query string in hand. We do slightly - # different things for keyword lists and parameter lists. - if (defined $query_string && length $query_string) { - if ($query_string =~ /[&=;]/) { - $self->parse_params($query_string); - } else { - $self->add_parameter('keywords'); - $self->{param}{'keywords'} = [$self->parse_keywordlist($query_string)]; - } - } - - # Special case. Erase everything if there is a field named - # .defaults. - if ($self->param('.defaults')) { - $self->delete_all(); - } - - # hash containing our defined fieldnames - $self->{'.fieldnames'} = {}; - for ($self->param('.cgifields')) { - $self->{'.fieldnames'}->{$_}++; - } - - # Clear out our default submission button flag if present - $self->delete('.submit'); - $self->delete('.cgifields'); - - $self->save_request unless defined $initializer; -} - -# FUNCTIONS TO OVERRIDE: -# Turn a string into a filehandle -sub to_filehandle { - my $thingy = shift; - return undef unless $thingy; - return $thingy if UNIVERSAL::isa($thingy,'GLOB'); - return $thingy if UNIVERSAL::isa($thingy,'FileHandle'); - if (!ref($thingy)) { - my $caller = 1; - while (my $package = caller($caller++)) { - my($tmp) = $thingy=~/[\':]/ ? $thingy : "$package\:\:$thingy"; - return $tmp if defined(fileno($tmp)); - } - } - return undef; -} - -# send output to the browser -sub put { - my($self,@p) = self_or_default(@_); - $self->print(@p); -} - -# print to standard output (for overriding in mod_perl) -sub print { - shift; - CORE::print(@_); -} - -# get/set last cgi_error -sub cgi_error { - my ($self,$err) = self_or_default(@_); - $self->{'.cgi_error'} = $err if defined $err; - return $self->{'.cgi_error'}; -} - -sub save_request { - my($self) = @_; - # We're going to play with the package globals now so that if we get called - # again, we initialize ourselves in exactly the same way. This allows - # us to have several of these objects. - @QUERY_PARAM = $self->param; # save list of parameters - for (@QUERY_PARAM) { - next unless defined $_; - $QUERY_PARAM{$_}=$self->{param}{$_}; - } - $QUERY_CHARSET = $self->charset; - %QUERY_FIELDNAMES = %{$self->{'.fieldnames'}}; - %QUERY_TMPFILES = %{ $self->{'.tmpfiles'} || {} }; -} - -sub parse_params { - my($self,$tosplit) = @_; - my(@pairs) = split(/[&;]/,$tosplit); - my($param,$value); - for (@pairs) { - ($param,$value) = split('=',$_,2); - next unless defined $param; - next if $NO_UNDEF_PARAMS and not defined $value; - $value = '' unless defined $value; - $param = unescape($param); - $value = unescape($value); - $self->add_parameter($param); - push (@{$self->{param}{$param}},$value); - } -} - -sub add_parameter { - my($self,$param)=@_; - return unless defined $param; - push (@{$self->{'.parameters'}},$param) - unless defined($self->{param}{$param}); -} - -sub all_parameters { - my $self = shift; - return () unless defined($self) && $self->{'.parameters'}; - return () unless @{$self->{'.parameters'}}; - return @{$self->{'.parameters'}}; -} - -# put a filehandle into binary mode (DOS) -sub binmode { - return unless defined($_[1]) && ref ($_[1]) && defined fileno($_[1]); - CORE::binmode($_[1]); -} - -sub _make_tag_func { - my ($self,$tagname) = @_; - my $func = qq( - sub $tagname { - my (\$q,\$a,\@rest) = self_or_default(\@_); - my(\$attr) = ''; - if (ref(\$a) && ref(\$a) eq 'HASH') { - my(\@attr) = make_attributes(\$a,\$q->{'escape'}); - \$attr = " \@attr" if \@attr; - } else { - unshift \@rest,\$a if defined \$a; - } - ); - if ($tagname=~/start_(\w+)/i) { - $func .= qq! return "<\L$1\E\$attr>";} !; - } elsif ($tagname=~/end_(\w+)/i) { - $func .= qq! return "<\L/$1\E>"; } !; - } else { - $func .= qq# - return \$XHTML ? "\L<$tagname\E\$attr />" : "\L<$tagname\E\$attr>" unless \@rest; - my(\$tag,\$untag) = ("\L<$tagname\E\$attr>","\L\E"); - my \@result = map { "\$tag\$_\$untag" } - (ref(\$rest[0]) eq 'ARRAY') ? \@{\$rest[0]} : "\@rest"; - return "\@result"; - }#; - } -return $func; -} - -sub AUTOLOAD { - print STDERR "CGI::AUTOLOAD for $AUTOLOAD\n" if $CGI::AUTOLOAD_DEBUG; - my $func = &_compile; - goto &$func; -} - -sub _compile { - my($func) = $AUTOLOAD; - my($pack,$func_name); - { - local($1,$2); # this fixes an obscure variable suicide problem. - $func=~/(.+)::([^:]+)$/; - ($pack,$func_name) = ($1,$2); - $pack=~s/::SUPER$//; # fix another obscure problem - $pack = ${"$pack\:\:AutoloadClass"} || $CGI::DefaultClass - unless defined(${"$pack\:\:AUTOLOADED_ROUTINES"}); - - my($sub) = \%{"$pack\:\:SUBS"}; - unless (%$sub) { - my($auto) = \${"$pack\:\:AUTOLOADED_ROUTINES"}; - local ($@,$!); - eval "package $pack; $$auto"; - croak("$AUTOLOAD: $@") if $@; - $$auto = ''; # Free the unneeded storage (but don't undef it!!!) - } - my($code) = $sub->{$func_name}; - - $code = "sub $AUTOLOAD { }" if (!$code and $func_name eq 'DESTROY'); - if (!$code) { - (my $base = $func_name) =~ s/^(start_|end_)//i; - if ($EXPORT{':any'} || - $EXPORT{'-any'} || - $EXPORT{$base} || - (%EXPORT_OK || grep(++$EXPORT_OK{$_},&expand_tags(':html'))) - && $EXPORT_OK{$base}) { - $code = $CGI::DefaultClass->_make_tag_func($func_name); - } - } - croak("Undefined subroutine $AUTOLOAD\n") unless $code; - local ($@,$!); - eval "package $pack; $code"; - if ($@) { - $@ =~ s/ at .*\n//; - croak("$AUTOLOAD: $@"); - } - } - CORE::delete($sub->{$func_name}); #free storage - return "$pack\:\:$func_name"; -} - -sub _selected { - my $self = shift; - my $value = shift; - return '' unless $value; - return $XHTML ? qq(selected="selected" ) : qq(selected ); -} - -sub _checked { - my $self = shift; - my $value = shift; - return '' unless $value; - return $XHTML ? qq(checked="checked" ) : qq(checked ); -} - -sub _reset_globals { initialize_globals(); } - -sub _setup_symbols { - my $self = shift; - my $compile = 0; - - # to avoid reexporting unwanted variables - undef %EXPORT; - - for (@_) { - $HEADERS_ONCE++, next if /^[:-]unique_headers$/; - $NPH++, next if /^[:-]nph$/; - $NOSTICKY++, next if /^[:-]nosticky$/; - $DEBUG=0, next if /^[:-]no_?[Dd]ebug$/; - $DEBUG=2, next if /^[:-][Dd]ebug$/; - $USE_PARAM_SEMICOLONS++, next if /^[:-]newstyle_urls$/; - $PARAM_UTF8++, next if /^[:-]utf8$/; - $XHTML++, next if /^[:-]xhtml$/; - $XHTML=0, next if /^[:-]no_?xhtml$/; - $USE_PARAM_SEMICOLONS=0, next if /^[:-]oldstyle_urls$/; - $PRIVATE_TEMPFILES++, next if /^[:-]private_tempfiles$/; - $TABINDEX++, next if /^[:-]tabindex$/; - $CLOSE_UPLOAD_FILES++, next if /^[:-]close_upload_files$/; - $EXPORT{$_}++, next if /^[:-]any$/; - $compile++, next if /^[:-]compile$/; - $NO_UNDEF_PARAMS++, next if /^[:-]no_undef_params$/; - - # This is probably extremely evil code -- to be deleted some day. - if (/^[-]autoload$/) { - my($pkg) = caller(1); - *{"${pkg}::AUTOLOAD"} = sub { - my($routine) = $AUTOLOAD; - $routine =~ s/^.*::/CGI::/; - &$routine; - }; - next; - } - - for (&expand_tags($_)) { - tr/a-zA-Z0-9_//cd; # don't allow weird function names - $EXPORT{$_}++; - } - } - _compile_all(keys %EXPORT) if $compile; - @SAVED_SYMBOLS = @_; -} - -sub charset { - my ($self,$charset) = self_or_default(@_); - $self->{'.charset'} = $charset if defined $charset; - $self->{'.charset'}; -} - -sub element_id { - my ($self,$new_value) = self_or_default(@_); - $self->{'.elid'} = $new_value if defined $new_value; - sprintf('%010d',$self->{'.elid'}++); -} - -sub element_tab { - my ($self,$new_value) = self_or_default(@_); - $self->{'.etab'} ||= 1; - $self->{'.etab'} = $new_value if defined $new_value; - my $tab = $self->{'.etab'}++; - return '' unless $TABINDEX or defined $new_value; - return qq(tabindex="$tab" ); -} - -############################################################################### -################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### -############################################################################### -$AUTOLOADED_ROUTINES = ''; # get rid of -w warning -$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; - -%SUBS = ( - -'URL_ENCODED'=> <<'END_OF_FUNC', -sub URL_ENCODED { 'application/x-www-form-urlencoded'; } -END_OF_FUNC - -'MULTIPART' => <<'END_OF_FUNC', -sub MULTIPART { 'multipart/form-data'; } -END_OF_FUNC - -'SERVER_PUSH' => <<'END_OF_FUNC', -sub SERVER_PUSH { 'multipart/x-mixed-replace;boundary="' . shift() . '"'; } -END_OF_FUNC - -'new_MultipartBuffer' => <<'END_OF_FUNC', -# Create a new multipart buffer -sub new_MultipartBuffer { - my($self,$boundary,$length) = @_; - return MultipartBuffer->new($self,$boundary,$length); -} -END_OF_FUNC - -'read_from_client' => <<'END_OF_FUNC', -# Read data from a file handle -sub read_from_client { - my($self, $buff, $len, $offset) = @_; - local $^W=0; # prevent a warning - return $MOD_PERL - ? $self->r->read($$buff, $len, $offset) - : read(\*STDIN, $$buff, $len, $offset); -} -END_OF_FUNC - -'delete' => <<'END_OF_FUNC', -#### Method: delete -# Deletes the named parameter entirely. -#### -sub delete { - my($self,@p) = self_or_default(@_); - my(@names) = rearrange([NAME],@p); - my @to_delete = ref($names[0]) eq 'ARRAY' ? @$names[0] : @names; - my %to_delete; - for my $name (@to_delete) - { - CORE::delete $self->{param}{$name}; - CORE::delete $self->{'.fieldnames'}->{$name}; - $to_delete{$name}++; - } - @{$self->{'.parameters'}}=grep { !exists($to_delete{$_}) } $self->param(); - return; -} -END_OF_FUNC - -#### Method: import_names -# Import all parameters into the given namespace. -# Assumes namespace 'Q' if not specified -#### -'import_names' => <<'END_OF_FUNC', -sub import_names { - my($self,$namespace,$delete) = self_or_default(@_); - $namespace = 'Q' unless defined($namespace); - die "Can't import names into \"main\"\n" if \%{"${namespace}::"} == \%::; - if ($delete || $MOD_PERL || exists $ENV{'FCGI_ROLE'}) { - # can anyone find an easier way to do this? - for (keys %{"${namespace}::"}) { - local *symbol = "${namespace}::${_}"; - undef $symbol; - undef @symbol; - undef %symbol; - } - } - my($param,@value,$var); - for $param ($self->param) { - # protect against silly names - ($var = $param)=~tr/a-zA-Z0-9_/_/c; - $var =~ s/^(?=\d)/_/; - local *symbol = "${namespace}::$var"; - @value = $self->param($param); - @symbol = @value; - $symbol = $value[0]; - } -} -END_OF_FUNC - -#### Method: keywords -# Keywords acts a bit differently. Calling it in a list context -# returns the list of keywords. -# Calling it in a scalar context gives you the size of the list. -#### -'keywords' => <<'END_OF_FUNC', -sub keywords { - my($self,@values) = self_or_default(@_); - # If values is provided, then we set it. - $self->{param}{'keywords'}=[@values] if @values; - my(@result) = defined($self->{param}{'keywords'}) ? @{$self->{param}{'keywords'}} : (); - @result; -} -END_OF_FUNC - -# These are some tie() interfaces for compatibility -# with Steve Brenner's cgi-lib.pl routines -'Vars' => <<'END_OF_FUNC', -sub Vars { - my $q = shift; - my %in; - tie(%in,CGI,$q); - return %in if wantarray; - return \%in; -} -END_OF_FUNC - -# These are some tie() interfaces for compatibility -# with Steve Brenner's cgi-lib.pl routines -'ReadParse' => <<'END_OF_FUNC', -sub ReadParse { - local(*in); - if (@_) { - *in = $_[0]; - } else { - my $pkg = caller(); - *in=*{"${pkg}::in"}; - } - tie(%in,CGI); - return scalar(keys %in); -} -END_OF_FUNC - -'PrintHeader' => <<'END_OF_FUNC', -sub PrintHeader { - my($self) = self_or_default(@_); - return $self->header(); -} -END_OF_FUNC - -'HtmlTop' => <<'END_OF_FUNC', -sub HtmlTop { - my($self,@p) = self_or_default(@_); - return $self->start_html(@p); -} -END_OF_FUNC - -'HtmlBot' => <<'END_OF_FUNC', -sub HtmlBot { - my($self,@p) = self_or_default(@_); - return $self->end_html(@p); -} -END_OF_FUNC - -'SplitParam' => <<'END_OF_FUNC', -sub SplitParam { - my ($param) = @_; - my (@params) = split ("\0", $param); - return (wantarray ? @params : $params[0]); -} -END_OF_FUNC - -'MethGet' => <<'END_OF_FUNC', -sub MethGet { - return request_method() eq 'GET'; -} -END_OF_FUNC - -'MethPost' => <<'END_OF_FUNC', -sub MethPost { - return request_method() eq 'POST'; -} -END_OF_FUNC - -'MethPut' => <<'END_OF_FUNC', -sub MethPut { - return request_method() eq 'PUT'; -} -END_OF_FUNC - -'TIEHASH' => <<'END_OF_FUNC', -sub TIEHASH { - my $class = shift; - my $arg = $_[0]; - if (ref($arg) && UNIVERSAL::isa($arg,'CGI')) { - return $arg; - } - return $Q ||= $class->new(@_); -} -END_OF_FUNC - -'STORE' => <<'END_OF_FUNC', -sub STORE { - my $self = shift; - my $tag = shift; - my $vals = shift; - my @vals = index($vals,"\0")!=-1 ? split("\0",$vals) : $vals; - $self->param(-name=>$tag,-value=>\@vals); -} -END_OF_FUNC - -'FETCH' => <<'END_OF_FUNC', -sub FETCH { - return $_[0] if $_[1] eq 'CGI'; - return undef unless defined $_[0]->param($_[1]); - return join("\0",$_[0]->param($_[1])); -} -END_OF_FUNC - -'FIRSTKEY' => <<'END_OF_FUNC', -sub FIRSTKEY { - $_[0]->{'.iterator'}=0; - $_[0]->{'.parameters'}->[$_[0]->{'.iterator'}++]; -} -END_OF_FUNC - -'NEXTKEY' => <<'END_OF_FUNC', -sub NEXTKEY { - $_[0]->{'.parameters'}->[$_[0]->{'.iterator'}++]; -} -END_OF_FUNC - -'EXISTS' => <<'END_OF_FUNC', -sub EXISTS { - exists $_[0]->{param}{$_[1]}; -} -END_OF_FUNC - -'DELETE' => <<'END_OF_FUNC', -sub DELETE { - $_[0]->delete($_[1]); -} -END_OF_FUNC - -'CLEAR' => <<'END_OF_FUNC', -sub CLEAR { - %{$_[0]}=(); -} -#### -END_OF_FUNC - -#### -# Append a new value to an existing query -#### -'append' => <<'EOF', -sub append { - my($self,@p) = self_or_default(@_); - my($name,$value) = rearrange([NAME,[VALUE,VALUES]],@p); - my(@values) = defined($value) ? (ref($value) ? @{$value} : $value) : (); - if (@values) { - $self->add_parameter($name); - push(@{$self->{param}{$name}},@values); - } - return $self->param($name); -} -EOF - -#### Method: delete_all -# Delete all parameters -#### -'delete_all' => <<'EOF', -sub delete_all { - my($self) = self_or_default(@_); - my @param = $self->param(); - $self->delete(@param); -} -EOF - -'Delete' => <<'EOF', -sub Delete { - my($self,@p) = self_or_default(@_); - $self->delete(@p); -} -EOF - -'Delete_all' => <<'EOF', -sub Delete_all { - my($self,@p) = self_or_default(@_); - $self->delete_all(@p); -} -EOF - -#### Method: autoescape -# If you want to turn off the autoescaping features, -# call this method with undef as the argument -'autoEscape' => <<'END_OF_FUNC', -sub autoEscape { - my($self,$escape) = self_or_default(@_); - my $d = $self->{'escape'}; - $self->{'escape'} = $escape; - $d; -} -END_OF_FUNC - - -#### Method: version -# Return the current version -#### -'version' => <<'END_OF_FUNC', -sub version { - return $VERSION; -} -END_OF_FUNC - -#### Method: url_param -# Return a parameter in the QUERY_STRING, regardless of -# whether this was a POST or a GET -#### -'url_param' => <<'END_OF_FUNC', -sub url_param { - my ($self,@p) = self_or_default(@_); - my $name = shift(@p); - return undef unless exists($ENV{QUERY_STRING}); - unless (exists($self->{'.url_param'})) { - $self->{'.url_param'}={}; # empty hash - if ($ENV{QUERY_STRING} =~ /=/) { - my(@pairs) = split(/[&;]/,$ENV{QUERY_STRING}); - my($param,$value); - for (@pairs) { - ($param,$value) = split('=',$_,2); - $param = unescape($param); - $value = unescape($value); - push(@{$self->{'.url_param'}->{$param}},$value); - } - } else { - my @keywords = $self->parse_keywordlist($ENV{QUERY_STRING}); - $self->{'.url_param'}{'keywords'} = \@keywords if @keywords; - } - } - return keys %{$self->{'.url_param'}} unless defined($name); - return () unless $self->{'.url_param'}->{$name}; - return wantarray ? @{$self->{'.url_param'}->{$name}} - : $self->{'.url_param'}->{$name}->[0]; -} -END_OF_FUNC - -#### Method: Dump -# Returns a string in which all the known parameter/value -# pairs are represented as nested lists, mainly for the purposes -# of debugging. -#### -'Dump' => <<'END_OF_FUNC', -sub Dump { - my($self) = self_or_default(@_); - my($param,$value,@result); - return '
    ' unless $self->param; - push(@result,"
      "); - for $param ($self->param) { - my($name)=$self->_maybe_escapeHTML($param); - push(@result,"
    • $name
    • "); - push(@result,"
        "); - for $value ($self->param($param)) { - $value = $self->_maybe_escapeHTML($value); - $value =~ s/\n/
        \n/g; - push(@result,"
      • $value
      • "); - } - push(@result,"
      "); - } - push(@result,"
    "); - return join("\n",@result); -} -END_OF_FUNC - -#### Method as_string -# -# synonym for "dump" -#### -'as_string' => <<'END_OF_FUNC', -sub as_string { - &Dump(@_); -} -END_OF_FUNC - -#### Method: save -# Write values out to a filehandle in such a way that they can -# be reinitialized by the filehandle form of the new() method -#### -'save' => <<'END_OF_FUNC', -sub save { - my($self,$filehandle) = self_or_default(@_); - $filehandle = to_filehandle($filehandle); - my($param); - local($,) = ''; # set print field separator back to a sane value - local($\) = ''; # set output line separator to a sane value - for $param ($self->param) { - my($escaped_param) = escape($param); - my($value); - for $value ($self->param($param)) { - print $filehandle "$escaped_param=",escape("$value"),"\n" - if length($escaped_param) or length($value); - } - } - for (keys %{$self->{'.fieldnames'}}) { - print $filehandle ".cgifields=",escape("$_"),"\n"; - } - print $filehandle "=\n"; # end of record -} -END_OF_FUNC - - -#### Method: save_parameters -# An alias for save() that is a better name for exportation. -# Only intended to be used with the function (non-OO) interface. -#### -'save_parameters' => <<'END_OF_FUNC', -sub save_parameters { - my $fh = shift; - return save(to_filehandle($fh)); -} -END_OF_FUNC - -#### Method: restore_parameters -# A way to restore CGI parameters from an initializer. -# Only intended to be used with the function (non-OO) interface. -#### -'restore_parameters' => <<'END_OF_FUNC', -sub restore_parameters { - $Q = $CGI::DefaultClass->new(@_); -} -END_OF_FUNC - -#### Method: multipart_init -# Return a Content-Type: style header for server-push -# This has to be NPH on most web servers, and it is advisable to set $| = 1 -# -# Many thanks to Ed Jordan for this -# contribution, updated by Andrew Benham (adsb@bigfoot.com) -#### -'multipart_init' => <<'END_OF_FUNC', -sub multipart_init { - my($self,@p) = self_or_default(@_); - my($boundary,@other) = rearrange_header([BOUNDARY],@p); - if (!$boundary) { - $boundary = '------- =_'; - my @chrs = ('0'..'9', 'A'..'Z', 'a'..'z'); - for (1..17) { - $boundary .= $chrs[rand(scalar @chrs)]; - } - } - - $self->{'separator'} = "$CRLF--$boundary$CRLF"; - $self->{'final_separator'} = "$CRLF--$boundary--$CRLF"; - $type = SERVER_PUSH($boundary); - return $self->header( - -nph => 0, - -type => $type, - (map { split "=", $_, 2 } @other), - ) . "WARNING: YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY." . $self->multipart_end; -} -END_OF_FUNC - - -#### Method: multipart_start -# Return a Content-Type: style header for server-push, start of section -# -# Many thanks to Ed Jordan for this -# contribution, updated by Andrew Benham (adsb@bigfoot.com) -#### -'multipart_start' => <<'END_OF_FUNC', -sub multipart_start { - my(@header); - my($self,@p) = self_or_default(@_); - my($type,@other) = rearrange([TYPE],@p); - $type = $type || 'text/html'; - push(@header,"Content-Type: $type"); - - # rearrange() was designed for the HTML portion, so we - # need to fix it up a little. - for (@other) { - # Don't use \s because of perl bug 21951 - next unless my($header,$value) = /([^ \r\n\t=]+)=\"?(.+?)\"?$/; - ($_ = $header) =~ s/^(\w)(.*)/$1 . lc ($2) . ': '.$self->unescapeHTML($value)/e; - } - push(@header,@other); - my $header = join($CRLF,@header)."${CRLF}${CRLF}"; - return $header; -} -END_OF_FUNC - - -#### Method: multipart_end -# Return a MIME boundary separator for server-push, end of section -# -# Many thanks to Ed Jordan for this -# contribution -#### -'multipart_end' => <<'END_OF_FUNC', -sub multipart_end { - my($self,@p) = self_or_default(@_); - return $self->{'separator'}; -} -END_OF_FUNC - - -#### Method: multipart_final -# Return a MIME boundary separator for server-push, end of all sections -# -# Contributed by Andrew Benham (adsb@bigfoot.com) -#### -'multipart_final' => <<'END_OF_FUNC', -sub multipart_final { - my($self,@p) = self_or_default(@_); - return $self->{'final_separator'} . "WARNING: YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY." . $CRLF; -} -END_OF_FUNC - - -#### Method: header -# Return a Content-Type: style header -# -#### -'header' => <<'END_OF_FUNC', -sub header { - my($self,@p) = self_or_default(@_); - my(@header); - - return "" if $self->{'.header_printed'}++ and $HEADERS_ONCE; - - my($type,$status,$cookie,$target,$expires,$nph,$charset,$attachment,$p3p,@other) = - rearrange([['TYPE','CONTENT_TYPE','CONTENT-TYPE'], - 'STATUS',['COOKIE','COOKIES'],'TARGET', - 'EXPIRES','NPH','CHARSET', - 'ATTACHMENT','P3P'],@p); - - # Since $cookie and $p3p may be array references, - # we must stringify them before CR escaping is done. - my @cookie; - for (ref($cookie) eq 'ARRAY' ? @{$cookie} : $cookie) { - my $cs = UNIVERSAL::isa($_,'CGI::Cookie') ? $_->as_string : $_; - push(@cookie,$cs) if defined $cs and $cs ne ''; - } - $p3p = join ' ',@$p3p if ref($p3p) eq 'ARRAY'; - - # CR escaping for values, per RFC 822 - for my $header ($type,$status,@cookie,$target,$expires,$nph,$charset,$attachment,$p3p,@other) { - if (defined $header) { - # From RFC 822: - # Unfolding is accomplished by regarding CRLF immediately - # followed by a LWSP-char as equivalent to the LWSP-char. - $header =~ s/$CRLF(\s)/$1/g; - - # All other uses of newlines are invalid input. - if ($header =~ m/$CRLF|\015|\012/) { - # shorten very long values in the diagnostic - $header = substr($header,0,72).'...' if (length $header > 72); - die "Invalid header value contains a newline not followed by whitespace: $header"; - } - } - } - - $nph ||= $NPH; - - $type ||= 'text/html' unless defined($type); - - # sets if $charset is given, gets if not - $charset = $self->charset( $charset ); - - # rearrange() was designed for the HTML portion, so we - # need to fix it up a little. - for (@other) { - # Don't use \s because of perl bug 21951 - next unless my($header,$value) = /([^ \r\n\t=]+)=\"?(.+?)\"?$/s; - ($_ = $header) =~ s/^(\w)(.*)/"\u$1\L$2" . ': '.$self->unescapeHTML($value)/e; - } - - $type .= "; charset=$charset" - if $type ne '' - and $type !~ /\bcharset\b/ - and defined $charset - and $charset ne ''; - - # Maybe future compatibility. Maybe not. - my $protocol = $ENV{SERVER_PROTOCOL} || 'HTTP/1.0'; - push(@header,$protocol . ' ' . ($status || '200 OK')) if $nph; - push(@header,"Server: " . &server_software()) if $nph; - - push(@header,"Status: $status") if $status; - push(@header,"Window-Target: $target") if $target; - push(@header,"P3P: policyref=\"/w3c/p3p.xml\", CP=\"$p3p\"") if $p3p; - # push all the cookies -- there may be several - push(@header,map {"Set-Cookie: $_"} @cookie); - # if the user indicates an expiration time, then we need - # both an Expires and a Date header (so that the browser is - # uses OUR clock) - push(@header,"Expires: " . expires($expires,'http')) - if $expires; - push(@header,"Date: " . expires(0,'http')) if $expires || $cookie || $nph; - push(@header,"Pragma: no-cache") if $self->cache(); - push(@header,"Content-Disposition: attachment; filename=\"$attachment\"") if $attachment; - push(@header,map {ucfirst $_} @other); - push(@header,"Content-Type: $type") if $type ne ''; - my $header = join($CRLF,@header)."${CRLF}${CRLF}"; - if (($MOD_PERL >= 1) && !$nph) { - $self->r->send_cgi_header($header); - return ''; - } - return $header; -} -END_OF_FUNC - -#### Method: cache -# Control whether header() will produce the no-cache -# Pragma directive. -#### -'cache' => <<'END_OF_FUNC', -sub cache { - my($self,$new_value) = self_or_default(@_); - $new_value = '' unless $new_value; - if ($new_value ne '') { - $self->{'cache'} = $new_value; - } - return $self->{'cache'}; -} -END_OF_FUNC - - -#### Method: redirect -# Return a Location: style header -# -#### -'redirect' => <<'END_OF_FUNC', -sub redirect { - my($self,@p) = self_or_default(@_); - my($url,$target,$status,$cookie,$nph,@other) = - rearrange([[LOCATION,URI,URL],TARGET,STATUS,['COOKIE','COOKIES'],NPH],@p); - $status = '302 Found' unless defined $status; - $url ||= $self->self_url; - my(@o); - for (@other) { tr/\"//d; push(@o,split("=",$_,2)); } - unshift(@o, - '-Status' => $status, - '-Location'=> $url, - '-nph' => $nph); - unshift(@o,'-Target'=>$target) if $target; - unshift(@o,'-Type'=>''); - my @unescaped; - unshift(@unescaped,'-Cookie'=>$cookie) if $cookie; - return $self->header((map {$self->unescapeHTML($_)} @o),@unescaped); -} -END_OF_FUNC - - -#### Method: start_html -# Canned HTML header -# -# Parameters: -# $title -> (optional) The title for this HTML document (-title) -# $author -> (optional) e-mail address of the author (-author) -# $base -> (optional) if set to true, will enter the BASE address of this document -# for resolving relative references (-base) -# $xbase -> (optional) alternative base at some remote location (-xbase) -# $target -> (optional) target window to load all links into (-target) -# $script -> (option) Javascript code (-script) -# $no_script -> (option) Javascript -END - ; - my($other) = @other ? " @other" : ''; - push(@result,"\n\n"); - return join("\n",@result); -} -END_OF_FUNC - -### Method: _style -# internal method for generating a CSS style section -#### -'_style' => <<'END_OF_FUNC', -sub _style { - my ($self,$style) = @_; - my (@result); - - my $type = 'text/css'; - my $rel = 'stylesheet'; - - - my $cdata_start = $XHTML ? "\n\n" : " -->\n"; - - my @s = ref($style) eq 'ARRAY' ? @$style : $style; - my $other = ''; - - for my $s (@s) { - if (ref($s)) { - my($src,$code,$verbatim,$stype,$alternate,$foo,@other) = - rearrange([qw(SRC CODE VERBATIM TYPE ALTERNATE FOO)], - ('-foo'=>'bar', - ref($s) eq 'ARRAY' ? @$s : %$s)); - my $type = defined $stype ? $stype : 'text/css'; - my $rel = $alternate ? 'alternate stylesheet' : 'stylesheet'; - $other = "@other" if @other; - - if (ref($src) eq "ARRAY") # Check to see if the $src variable is an array reference - { # If it is, push a LINK tag for each one - for $src (@$src) - { - push(@result,$XHTML ? qq() - : qq()) if $src; - } - } - else - { # Otherwise, push the single -src, if it exists. - push(@result,$XHTML ? qq() - : qq() - ) if $src; - } - if ($verbatim) { - my @v = ref($verbatim) eq 'ARRAY' ? @$verbatim : $verbatim; - push(@result, "") for @v; - } - my @c = ref($code) eq 'ARRAY' ? @$code : $code if $code; - push(@result,style({'type'=>$type},"$cdata_start\n$_\n$cdata_end")) for @c; - - } else { - my $src = $s; - push(@result,$XHTML ? qq() - : qq()); - } - } - @result; -} -END_OF_FUNC - -'_script' => <<'END_OF_FUNC', -sub _script { - my ($self,$script) = @_; - my (@result); - - my (@scripts) = ref($script) eq 'ARRAY' ? @$script : ($script); - for $script (@scripts) { - my($src,$code,$language,$charset); - if (ref($script)) { # script is a hash - ($src,$code,$type,$charset) = - rearrange(['SRC','CODE',['LANGUAGE','TYPE'],'CHARSET'], - '-foo'=>'bar', # a trick to allow the '-' to be omitted - ref($script) eq 'ARRAY' ? @$script : %$script); - $type ||= 'text/javascript'; - unless ($type =~ m!\w+/\w+!) { - $type =~ s/[\d.]+$//; - $type = "text/$type"; - } - } else { - ($src,$code,$type,$charset) = ('',$script, 'text/javascript', ''); - } - - my $comment = '//'; # javascript by default - $comment = '#' if $type=~/perl|tcl/i; - $comment = "'" if $type=~/vbscript/i; - - my ($cdata_start,$cdata_end); - if ($XHTML) { - $cdata_start = "$comment"; - } else { - $cdata_start = "\n\n"; - } - my(@satts); - push(@satts,'src'=>$src) if $src; - push(@satts,'type'=>$type); - push(@satts,'charset'=>$charset) if ($src && $charset); - $code = $cdata_start . $code . $cdata_end if defined $code; - push(@result,$self->script({@satts},$code || '')); - } - @result; -} -END_OF_FUNC - -#### Method: end_html -# End an HTML document. -# Trivial method for completeness. Just returns "" -#### -'end_html' => <<'END_OF_FUNC', -sub end_html { - return "\n\n"; -} -END_OF_FUNC - - -################################ -# METHODS USED IN BUILDING FORMS -################################ - -#### Method: isindex -# Just prints out the isindex tag. -# Parameters: -# $action -> optional URL of script to run -# Returns: -# A string containing a tag -'isindex' => <<'END_OF_FUNC', -sub isindex { - my($self,@p) = self_or_default(@_); - my($action,@other) = rearrange([ACTION],@p); - $action = qq/ action="$action"/ if $action; - my($other) = @other ? " @other" : ''; - return $XHTML ? "" : ""; -} -END_OF_FUNC - - -#### Method: startform -# This method is DEPRECATED -# Start a form -# Parameters: -# $method -> optional submission method to use (GET or POST) -# $action -> optional URL of script to run -# $enctype ->encoding to use (URL_ENCODED or MULTIPART) -'startform' => <<'END_OF_FUNC', -sub startform { - my($self,@p) = self_or_default(@_); - - my($method,$action,$enctype,@other) = - rearrange([METHOD,ACTION,ENCTYPE],@p); - - $method = $self->_maybe_escapeHTML(lc($method || 'post')); - $enctype = $self->_maybe_escapeHTML($enctype || &URL_ENCODED); - if (defined $action) { - $action = $self->_maybe_escapeHTML($action); - } - else { - $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url); - } - $action = qq(action="$action"); - my($other) = @other ? " @other" : ''; - $self->{'.parametersToAdd'}={}; - return qq/
    /; -} -END_OF_FUNC - -#### Method: start_form -# Start a form -# Parameters: -# $method -> optional submission method to use (GET or POST) -# $action -> optional URL of script to run -# $enctype ->encoding to use (URL_ENCODED or MULTIPART) -'start_form' => <<'END_OF_FUNC', -sub start_form { - my($self,@p) = self_or_default(@_); - - my($method,$action,$enctype,@other) = - rearrange([METHOD,ACTION,ENCTYPE],@p); - - $method = $self->_maybe_escapeHTML(lc($method || 'post')); - - if( $XHTML ){ - $enctype = $self->_maybe_escapeHTML($enctype || &MULTIPART); - }else{ - $enctype = $self->_maybe_escapeHTML($enctype || &URL_ENCODED); - } - - if (defined $action) { - $action = $self->_maybe_escapeHTML($action); - } - else { - $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url); - } - $action = qq(action="$action"); - my($other) = @other ? " @other" : ''; - $self->{'.parametersToAdd'}={}; - return qq//; -} -END_OF_FUNC - -#### Method: start_multipart_form -'start_multipart_form' => <<'END_OF_FUNC', -sub start_multipart_form { - my($self,@p) = self_or_default(@_); - if (defined($p[0]) && substr($p[0],0,1) eq '-') { - return $self->start_form(-enctype=>&MULTIPART,@p); - } else { - my($method,$action,@other) = - rearrange([METHOD,ACTION],@p); - return $self->start_form($method,$action,&MULTIPART,@other); - } -} -END_OF_FUNC - - - -#### Method: end_form -# End a form -# Note: This repeated below under the older name. -'end_form' => <<'END_OF_FUNC', -sub end_form { - my($self,@p) = self_or_default(@_); - if ( $NOSTICKY ) { - return wantarray ? ("
    ") : "\n"; - } else { - if (my @fields = $self->get_fields) { - return wantarray ? ("
    ",@fields,"
    ","") - : "
    ".(join '',@fields)."
    \n"; - } else { - return ""; - } - } -} -END_OF_FUNC - -'endform' => <<'END_OF_FUNC', -sub endform { - my($self,@p) = self_or_default(@_); - if ( $NOSTICKY ) { - return wantarray ? ("") : "\n"; - } else { - if (my @fields = $self->get_fields) { - return wantarray ? ("
    ",@fields,"
    ","") - : "
    ".(join '',@fields)."
    \n"; - } else { - return ""; - } - } -} -END_OF_FUNC - -#### Method: end_multipart_form -# end a multipart form -'end_multipart_form' => <<'END_OF_FUNC', -sub end_multipart_form { - &end_form; -} -END_OF_FUNC - - -'_textfield' => <<'END_OF_FUNC', -sub _textfield { - my($self,$tag,@p) = self_or_default(@_); - my($name,$default,$size,$maxlength,$override,$tabindex,@other) = - rearrange([NAME,[DEFAULT,VALUE,VALUES],SIZE,MAXLENGTH,[OVERRIDE,FORCE],TABINDEX],@p); - - my $current = $override ? $default : - (defined($self->param($name)) ? $self->param($name) : $default); - - $current = defined($current) ? $self->_maybe_escapeHTML($current,1) : ''; - $name = defined($name) ? $self->_maybe_escapeHTML($name) : ''; - my($s) = defined($size) ? qq/ size="$size"/ : ''; - my($m) = defined($maxlength) ? qq/ maxlength="$maxlength"/ : ''; - my($other) = @other ? " @other" : ''; - # this entered at cristy's request to fix problems with file upload fields - # and WebTV -- not sure it won't break stuff - my($value) = $current ne '' ? qq(value="$current") : ''; - $tabindex = $self->element_tab($tabindex); - return $XHTML ? qq() - : qq(); -} -END_OF_FUNC - -#### Method: textfield -# Parameters: -# $name -> Name of the text field -# $default -> Optional default value of the field if not -# already defined. -# $size -> Optional width of field in characaters. -# $maxlength -> Optional maximum number of characters. -# Returns: -# A string containing a field -# -'textfield' => <<'END_OF_FUNC', -sub textfield { - my($self,@p) = self_or_default(@_); - $self->_textfield('text',@p); -} -END_OF_FUNC - - -#### Method: filefield -# Parameters: -# $name -> Name of the file upload field -# $size -> Optional width of field in characaters. -# $maxlength -> Optional maximum number of characters. -# Returns: -# A string containing a field -# -'filefield' => <<'END_OF_FUNC', -sub filefield { - my($self,@p) = self_or_default(@_); - $self->_textfield('file',@p); -} -END_OF_FUNC - - -#### Method: password -# Create a "secret password" entry field -# Parameters: -# $name -> Name of the field -# $default -> Optional default value of the field if not -# already defined. -# $size -> Optional width of field in characters. -# $maxlength -> Optional maximum characters that can be entered. -# Returns: -# A string containing a field -# -'password_field' => <<'END_OF_FUNC', -sub password_field { - my ($self,@p) = self_or_default(@_); - $self->_textfield('password',@p); -} -END_OF_FUNC - -#### Method: textarea -# Parameters: -# $name -> Name of the text field -# $default -> Optional default value of the field if not -# already defined. -# $rows -> Optional number of rows in text area -# $columns -> Optional number of columns in text area -# Returns: -# A string containing a tag -# -'textarea' => <<'END_OF_FUNC', -sub textarea { - my($self,@p) = self_or_default(@_); - my($name,$default,$rows,$cols,$override,$tabindex,@other) = - rearrange([NAME,[DEFAULT,VALUE],ROWS,[COLS,COLUMNS],[OVERRIDE,FORCE],TABINDEX],@p); - - my($current)= $override ? $default : - (defined($self->param($name)) ? $self->param($name) : $default); - - $name = defined($name) ? $self->_maybe_escapeHTML($name) : ''; - $current = defined($current) ? $self->_maybe_escapeHTML($current) : ''; - my($r) = $rows ? qq/ rows="$rows"/ : ''; - my($c) = $cols ? qq/ cols="$cols"/ : ''; - my($other) = @other ? " @other" : ''; - $tabindex = $self->element_tab($tabindex); - return qq{}; -} -END_OF_FUNC - - -#### Method: button -# Create a javascript button. -# Parameters: -# $name -> (optional) Name for the button. (-name) -# $value -> (optional) Value of the button when selected (and visible name) (-value) -# $onclick -> (optional) Text of the JavaScript to run when the button is -# clicked. -# Returns: -# A string containing a tag -#### -'button' => <<'END_OF_FUNC', -sub button { - my($self,@p) = self_or_default(@_); - - my($label,$value,$script,$tabindex,@other) = rearrange([NAME,[VALUE,LABEL], - [ONCLICK,SCRIPT],TABINDEX],@p); - - $label=$self->_maybe_escapeHTML($label); - $value=$self->_maybe_escapeHTML($value,1); - $script=$self->_maybe_escapeHTML($script); - - $script ||= ''; - - my($name) = ''; - $name = qq/ name="$label"/ if $label; - $value = $value || $label; - my($val) = ''; - $val = qq/ value="$value"/ if $value; - $script = qq/ onclick="$script"/ if $script; - my($other) = @other ? " @other" : ''; - $tabindex = $self->element_tab($tabindex); - return $XHTML ? qq() - : qq(); -} -END_OF_FUNC - - -#### Method: submit -# Create a "submit query" button. -# Parameters: -# $name -> (optional) Name for the button. -# $value -> (optional) Value of the button when selected (also doubles as label). -# $label -> (optional) Label printed on the button(also doubles as the value). -# Returns: -# A string containing a tag -#### -'submit' => <<'END_OF_FUNC', -sub submit { - my($self,@p) = self_or_default(@_); - - my($label,$value,$tabindex,@other) = rearrange([NAME,[VALUE,LABEL],TABINDEX],@p); - - $label=$self->_maybe_escapeHTML($label); - $value=$self->_maybe_escapeHTML($value,1); - - my $name = $NOSTICKY ? '' : 'name=".submit" '; - $name = qq/name="$label" / if defined($label); - $value = defined($value) ? $value : $label; - my $val = ''; - $val = qq/value="$value" / if defined($value); - $tabindex = $self->element_tab($tabindex); - my($other) = @other ? "@other " : ''; - return $XHTML ? qq() - : qq(); -} -END_OF_FUNC - - -#### Method: reset -# Create a "reset" button. -# Parameters: -# $name -> (optional) Name for the button. -# Returns: -# A string containing a tag -#### -'reset' => <<'END_OF_FUNC', -sub reset { - my($self,@p) = self_or_default(@_); - my($label,$value,$tabindex,@other) = rearrange(['NAME',['VALUE','LABEL'],TABINDEX],@p); - $label=$self->_maybe_escapeHTML($label); - $value=$self->_maybe_escapeHTML($value,1); - my ($name) = ' name=".reset"'; - $name = qq/ name="$label"/ if defined($label); - $value = defined($value) ? $value : $label; - my($val) = ''; - $val = qq/ value="$value"/ if defined($value); - my($other) = @other ? " @other" : ''; - $tabindex = $self->element_tab($tabindex); - return $XHTML ? qq() - : qq(); -} -END_OF_FUNC - - -#### Method: defaults -# Create a "defaults" button. -# Parameters: -# $name -> (optional) Name for the button. -# Returns: -# A string containing a tag -# -# Note: this button has a special meaning to the initialization script, -# and tells it to ERASE the current query string so that your defaults -# are used again! -#### -'defaults' => <<'END_OF_FUNC', -sub defaults { - my($self,@p) = self_or_default(@_); - - my($label,$tabindex,@other) = rearrange([[NAME,VALUE],TABINDEX],@p); - - $label=$self->_maybe_escapeHTML($label,1); - $label = $label || "Defaults"; - my($value) = qq/ value="$label"/; - my($other) = @other ? " @other" : ''; - $tabindex = $self->element_tab($tabindex); - return $XHTML ? qq() - : qq//; -} -END_OF_FUNC - - -#### Method: comment -# Create an HTML -# Parameters: a string -'comment' => <<'END_OF_FUNC', -sub comment { - my($self,@p) = self_or_CGI(@_); - return ""; -} -END_OF_FUNC - -#### Method: checkbox -# Create a checkbox that is not logically linked to any others. -# The field value is "on" when the button is checked. -# Parameters: -# $name -> Name of the checkbox -# $checked -> (optional) turned on by default if true -# $value -> (optional) value of the checkbox, 'on' by default -# $label -> (optional) a user-readable label printed next to the box. -# Otherwise the checkbox name is used. -# Returns: -# A string containing a field -#### -'checkbox' => <<'END_OF_FUNC', -sub checkbox { - my($self,@p) = self_or_default(@_); - - my($name,$checked,$value,$label,$labelattributes,$override,$tabindex,@other) = - rearrange([NAME,[CHECKED,SELECTED,ON],VALUE,LABEL,LABELATTRIBUTES, - [OVERRIDE,FORCE],TABINDEX],@p); - - $value = defined $value ? $value : 'on'; - - if (!$override && ($self->{'.fieldnames'}->{$name} || - defined $self->param($name))) { - $checked = grep($_ eq $value,$self->param($name)) ? $self->_checked(1) : ''; - } else { - $checked = $self->_checked($checked); - } - my($the_label) = defined $label ? $label : $name; - $name = $self->_maybe_escapeHTML($name); - $value = $self->_maybe_escapeHTML($value,1); - $the_label = $self->_maybe_escapeHTML($the_label); - my($other) = @other ? "@other " : ''; - $tabindex = $self->element_tab($tabindex); - $self->register_parameter($name); - return $XHTML ? CGI::label($labelattributes, - qq{$the_label}) - : qq{$the_label}; -} -END_OF_FUNC - - - -# Escape HTML -'escapeHTML' => <<'END_OF_FUNC', -sub escapeHTML { - # hack to work around earlier hacks - push @_,$_[0] if @_==1 && $_[0] eq 'CGI'; - my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_); - return undef unless defined($toencode); - $toencode =~ s{&}{&}gso; - $toencode =~ s{<}{<}gso; - $toencode =~ s{>}{>}gso; - if ($DTD_PUBLIC_IDENTIFIER =~ /[^X]HTML 3\.2/i) { - # $quot; was accidentally omitted from the HTML 3.2 DTD -- see - # / - # . - $toencode =~ s{"}{"}gso; - } - else { - $toencode =~ s{"}{"}gso; - } - - # Handle bug in some browsers with Latin charsets - if ($self->{'.charset'} - && (uc($self->{'.charset'}) eq 'ISO-8859-1' - || uc($self->{'.charset'}) eq 'WINDOWS-1252')) { - $toencode =~ s{'}{'}gso; - $toencode =~ s{\x8b}{‹}gso; - $toencode =~ s{\x9b}{›}gso; - if (defined $newlinestoo && $newlinestoo) { - $toencode =~ s{\012}{ }gso; - $toencode =~ s{\015}{ }gso; - } - } - return $toencode; -} -END_OF_FUNC - -# unescape HTML -- used internally -'unescapeHTML' => <<'END_OF_FUNC', -sub unescapeHTML { - # hack to work around earlier hacks - push @_,$_[0] if @_==1 && $_[0] eq 'CGI'; - my ($self,$string) = CGI::self_or_default(@_); - return undef unless defined($string); - my $latin = defined $self->{'.charset'} ? $self->{'.charset'} =~ /^(ISO-8859-1|WINDOWS-1252)$/i - : 1; - # thanks to Randal Schwartz for the correct solution to this one - $string=~ s[&([^\s&]*?);]{ - local $_ = $1; - /^amp$/i ? "&" : - /^quot$/i ? '"' : - /^gt$/i ? ">" : - /^lt$/i ? "<" : - /^#(\d+)$/ && $latin ? chr($1) : - /^#x([0-9a-f]+)$/i && $latin ? chr(hex($1)) : - "&$_;" - }gex; - return $string; -} -END_OF_FUNC - -# Internal procedure - don't use -'_tableize' => <<'END_OF_FUNC', -sub _tableize { - my($rows,$columns,$rowheaders,$colheaders,@elements) = @_; - my @rowheaders = $rowheaders ? @$rowheaders : (); - my @colheaders = $colheaders ? @$colheaders : (); - my($result); - - if (defined($columns)) { - $rows = int(0.99 + @elements/$columns) unless defined($rows); - } - if (defined($rows)) { - $columns = int(0.99 + @elements/$rows) unless defined($columns); - } - - # rearrange into a pretty table - $result = ""; - my($row,$column); - unshift(@colheaders,'') if @colheaders && @rowheaders; - $result .= "" if @colheaders; - for (@colheaders) { - $result .= ""; - } - for ($row=0;$row<$rows;$row++) { - $result .= ""; - $result .= "" if @rowheaders; - for ($column=0;$column<$columns;$column++) { - $result .= "" - if defined($elements[$column*$rows + $row]); - } - $result .= ""; - } - $result .= "
    $_
    $rowheaders[$row]" . $elements[$column*$rows + $row] . "
    "; - return $result; -} -END_OF_FUNC - - -#### Method: radio_group -# Create a list of logically-linked radio buttons. -# Parameters: -# $name -> Common name for all the buttons. -# $values -> A pointer to a regular array containing the -# values for each button in the group. -# $default -> (optional) Value of the button to turn on by default. Pass '-' -# to turn _nothing_ on. -# $linebreak -> (optional) Set to true to place linebreaks -# between the buttons. -# $labels -> (optional) -# A pointer to a hash of labels to print next to each checkbox -# in the form $label{'value'}="Long explanatory label". -# Otherwise the provided values are used as the labels. -# Returns: -# An ARRAY containing a series of fields -#### -'radio_group' => <<'END_OF_FUNC', -sub radio_group { - my($self,@p) = self_or_default(@_); - $self->_box_group('radio',@p); -} -END_OF_FUNC - -#### Method: checkbox_group -# Create a list of logically-linked checkboxes. -# Parameters: -# $name -> Common name for all the check boxes -# $values -> A pointer to a regular array containing the -# values for each checkbox in the group. -# $defaults -> (optional) -# 1. If a pointer to a regular array of checkbox values, -# then this will be used to decide which -# checkboxes to turn on by default. -# 2. If a scalar, will be assumed to hold the -# value of a single checkbox in the group to turn on. -# $linebreak -> (optional) Set to true to place linebreaks -# between the buttons. -# $labels -> (optional) -# A pointer to a hash of labels to print next to each checkbox -# in the form $label{'value'}="Long explanatory label". -# Otherwise the provided values are used as the labels. -# Returns: -# An ARRAY containing a series of fields -#### - -'checkbox_group' => <<'END_OF_FUNC', -sub checkbox_group { - my($self,@p) = self_or_default(@_); - $self->_box_group('checkbox',@p); -} -END_OF_FUNC - -'_box_group' => <<'END_OF_FUNC', -sub _box_group { - my $self = shift; - my $box_type = shift; - - my($name,$values,$defaults,$linebreak,$labels,$labelattributes, - $attributes,$rows,$columns,$rowheaders,$colheaders, - $override,$nolabels,$tabindex,$disabled,@other) = - rearrange([NAME,[VALUES,VALUE],[DEFAULT,DEFAULTS],LINEBREAK,LABELS,LABELATTRIBUTES, - ATTRIBUTES,ROWS,[COLUMNS,COLS],[ROWHEADERS,ROWHEADER],[COLHEADERS,COLHEADER], - [OVERRIDE,FORCE],NOLABELS,TABINDEX,DISABLED - ],@_); - - - my($result,$checked,@elements,@values); - - @values = $self->_set_values_and_labels($values,\$labels,$name); - my %checked = $self->previous_or_default($name,$defaults,$override); - - # If no check array is specified, check the first by default - $checked{$values[0]}++ if $box_type eq 'radio' && !%checked; - - $name=$self->_maybe_escapeHTML($name); - - my %tabs = (); - if ($TABINDEX && $tabindex) { - if (!ref $tabindex) { - $self->element_tab($tabindex); - } elsif (ref $tabindex eq 'ARRAY') { - %tabs = map {$_=>$self->element_tab} @$tabindex; - } elsif (ref $tabindex eq 'HASH') { - %tabs = %$tabindex; - } - } - %tabs = map {$_=>$self->element_tab} @values unless %tabs; - my $other = @other ? "@other " : ''; - my $radio_checked; - - # for disabling groups of radio/checkbox buttons - my %disabled; - for (@{$disabled}) { - $disabled{$_}=1; - } - - for (@values) { - my $disable=""; - if ($disabled{$_}) { - $disable="disabled='1'"; - } - - my $checkit = $self->_checked($box_type eq 'radio' ? ($checked{$_} && !$radio_checked++) - : $checked{$_}); - my($break); - if ($linebreak) { - $break = $XHTML ? "
    " : "
    "; - } - else { - $break = ''; - } - my($label)=''; - unless (defined($nolabels) && $nolabels) { - $label = $_; - $label = $labels->{$_} if defined($labels) && defined($labels->{$_}); - $label = $self->_maybe_escapeHTML($label,1); - $label = "$label" if $disabled{$_}; - } - my $attribs = $self->_set_attributes($_, $attributes); - my $tab = $tabs{$_}; - $_=$self->_maybe_escapeHTML($_); - - if ($XHTML) { - push @elements, - CGI::label($labelattributes, - qq($label)).${break}; - } else { - push(@elements,qq/${label}${break}/); - } - } - $self->register_parameter($name); - return wantarray ? @elements : "@elements" - unless defined($columns) || defined($rows); - return _tableize($rows,$columns,$rowheaders,$colheaders,@elements); -} -END_OF_FUNC - - -#### Method: popup_menu -# Create a popup menu. -# Parameters: -# $name -> Name for all the menu -# $values -> A pointer to a regular array containing the -# text of each menu item. -# $default -> (optional) Default item to display -# $labels -> (optional) -# A pointer to a hash of labels to print next to each checkbox -# in the form $label{'value'}="Long explanatory label". -# Otherwise the provided values are used as the labels. -# Returns: -# A string containing the definition of a popup menu. -#### -'popup_menu' => <<'END_OF_FUNC', -sub popup_menu { - my($self,@p) = self_or_default(@_); - - my($name,$values,$default,$labels,$attributes,$override,$tabindex,@other) = - rearrange([NAME,[VALUES,VALUE],[DEFAULT,DEFAULTS],LABELS, - ATTRIBUTES,[OVERRIDE,FORCE],TABINDEX],@p); - my($result,%selected); - - if (!$override && defined($self->param($name))) { - $selected{$self->param($name)}++; - } elsif (defined $default) { - %selected = map {$_=>1} ref($default) eq 'ARRAY' - ? @$default - : $default; - } - $name=$self->_maybe_escapeHTML($name); - my($other) = @other ? " @other" : ''; - - my(@values); - @values = $self->_set_values_and_labels($values,\$labels,$name); - $tabindex = $self->element_tab($tabindex); - $name = q{} if ! defined $name; - $result = qq/"; - return $result; -} -END_OF_FUNC - - -#### Method: optgroup -# Create a optgroup. -# Parameters: -# $name -> Label for the group -# $values -> A pointer to a regular array containing the -# values for each option line in the group. -# $labels -> (optional) -# A pointer to a hash of labels to print next to each item -# in the form $label{'value'}="Long explanatory label". -# Otherwise the provided values are used as the labels. -# $labeled -> (optional) -# A true value indicates the value should be used as the label attribute -# in the option elements. -# The label attribute specifies the option label presented to the user. -# This defaults to the content of the \n/; - for (@values) { - if (/_set_attributes($_, $attributes); - my($label) = $_; - $label = $labels->{$_} if defined($labels) && defined($labels->{$_}); - $label=$self->_maybe_escapeHTML($label); - my($value)=$self->_maybe_escapeHTML($_,1); - $result .= $labeled ? $novals ? "$label\n" - : "$label\n" - : $novals ? "$label\n" - : "$label\n"; - } - } - $result .= ""; - return $result; -} -END_OF_FUNC - - -#### Method: scrolling_list -# Create a scrolling list. -# Parameters: -# $name -> name for the list -# $values -> A pointer to a regular array containing the -# values for each option line in the list. -# $defaults -> (optional) -# 1. If a pointer to a regular array of options, -# then this will be used to decide which -# lines to turn on by default. -# 2. Otherwise holds the value of the single line to turn on. -# $size -> (optional) Size of the list. -# $multiple -> (optional) If set, allow multiple selections. -# $labels -> (optional) -# A pointer to a hash of labels to print next to each checkbox -# in the form $label{'value'}="Long explanatory label". -# Otherwise the provided values are used as the labels. -# Returns: -# A string containing the definition of a scrolling list. -#### -'scrolling_list' => <<'END_OF_FUNC', -sub scrolling_list { - my($self,@p) = self_or_default(@_); - my($name,$values,$defaults,$size,$multiple,$labels,$attributes,$override,$tabindex,@other) - = rearrange([NAME,[VALUES,VALUE],[DEFAULTS,DEFAULT], - SIZE,MULTIPLE,LABELS,ATTRIBUTES,[OVERRIDE,FORCE],TABINDEX],@p); - - my($result,@values); - @values = $self->_set_values_and_labels($values,\$labels,$name); - - $size = $size || scalar(@values); - - my(%selected) = $self->previous_or_default($name,$defaults,$override); - - my($is_multiple) = $multiple ? qq/ multiple="multiple"/ : ''; - my($has_size) = $size ? qq/ size="$size"/: ''; - my($other) = @other ? " @other" : ''; - - $name=$self->_maybe_escapeHTML($name); - $tabindex = $self->element_tab($tabindex); - $result = qq/"; - $self->register_parameter($name); - return $result; -} -END_OF_FUNC - - -#### Method: hidden -# Parameters: -# $name -> Name of the hidden field -# @default -> (optional) Initial values of field (may be an array) -# or -# $default->[initial values of field] -# Returns: -# A string containing a -#### -'hidden' => <<'END_OF_FUNC', -sub hidden { - my($self,@p) = self_or_default(@_); - - # this is the one place where we departed from our standard - # calling scheme, so we have to special-case (darn) - my(@result,@value); - my($name,$default,$override,@other) = - rearrange([NAME,[DEFAULT,VALUE,VALUES],[OVERRIDE,FORCE]],@p); - - my $do_override = 0; - if ( ref($p[0]) || substr($p[0],0,1) eq '-') { - @value = ref($default) ? @{$default} : $default; - $do_override = $override; - } else { - for ($default,$override,@other) { - push(@value,$_) if defined($_); - } - undef @other; - } - - # use previous values if override is not set - my @prev = $self->param($name); - @value = @prev if !$do_override && @prev; - - $name=$self->_maybe_escapeHTML($name); - for (@value) { - $_ = defined($_) ? $self->_maybe_escapeHTML($_,1) : ''; - push @result,$XHTML ? qq() - : qq(); - } - return wantarray ? @result : join('',@result); -} -END_OF_FUNC - - -#### Method: image_button -# Parameters: -# $name -> Name of the button -# $src -> URL of the image source -# $align -> Alignment style (TOP, BOTTOM or MIDDLE) -# Returns: -# A string containing a -#### -'image_button' => <<'END_OF_FUNC', -sub image_button { - my($self,@p) = self_or_default(@_); - - my($name,$src,$alignment,@other) = - rearrange([NAME,SRC,ALIGN],@p); - - my($align) = $alignment ? " align=\L\"$alignment\"" : ''; - my($other) = @other ? " @other" : ''; - $name=$self->_maybe_escapeHTML($name); - return $XHTML ? qq() - : qq//; -} -END_OF_FUNC - - -#### Method: self_url -# Returns a URL containing the current script and all its -# param/value pairs arranged as a query. You can use this -# to create a link that, when selected, will reinvoke the -# script with all its state information preserved. -#### -'self_url' => <<'END_OF_FUNC', -sub self_url { - my($self,@p) = self_or_default(@_); - return $self->url('-path_info'=>1,'-query'=>1,'-full'=>1,@p); -} -END_OF_FUNC - - -# This is provided as a synonym to self_url() for people unfortunate -# enough to have incorporated it into their programs already! -'state' => <<'END_OF_FUNC', -sub state { - &self_url; -} -END_OF_FUNC - - -#### Method: url -# Like self_url, but doesn't return the query string part of -# the URL. -#### -'url' => <<'END_OF_FUNC', -sub url { - my($self,@p) = self_or_default(@_); - my ($relative,$absolute,$full,$path_info,$query,$base,$rewrite) = - rearrange(['RELATIVE','ABSOLUTE','FULL',['PATH','PATH_INFO'],['QUERY','QUERY_STRING'],'BASE','REWRITE'],@p); - my $url = ''; - $full++ if $base || !($relative || $absolute); - $rewrite++ unless defined $rewrite; - - my $path = $self->path_info; - my $script_name = $self->script_name; - my $request_uri = unescape($self->request_uri) || ''; - my $query_str = $self->query_string; - - my $rewrite_in_use = $request_uri && $request_uri !~ /^\Q$script_name/; - - my $uri = $rewrite && $request_uri ? $request_uri : $script_name; - $uri =~ s/\?.*$//s; # remove query string - $uri =~ s/\Q$ENV{PATH_INFO}\E$// if defined $ENV{PATH_INFO}; -# $uri =~ s/\Q$path\E$// if defined $path; # remove path - - if ($full) { - my $protocol = $self->protocol(); - $url = "$protocol://"; - my $vh = http('x_forwarded_host') || http('host') || ''; - $vh =~ s/\:\d+$//; # some clients add the port number (incorrectly). Get rid of it. - - $url .= $vh || server_name(); - - my $port = $self->virtual_port; - - # add the port to the url unless it's the protocol's default port - $url .= ':' . $port unless (lc($protocol) eq 'http' && $port == 80) - or (lc($protocol) eq 'https' && $port == 443); - - return $url if $base; - - $url .= $uri; - } elsif ($relative) { - ($url) = $uri =~ m!([^/]+)$!; - } elsif ($absolute) { - $url = $uri; - } - - $url .= $path if $path_info and defined $path; - $url .= "?$query_str" if $query and $query_str ne ''; - $url ||= ''; - $url =~ s/([^a-zA-Z0-9_.%;&?\/\\:+=~-])/sprintf("%%%02X",ord($1))/eg; - return $url; -} - -END_OF_FUNC - -#### Method: cookie -# Set or read a cookie from the specified name. -# Cookie can then be passed to header(). -# Usual rules apply to the stickiness of -value. -# Parameters: -# -name -> name for this cookie (optional) -# -value -> value of this cookie (scalar, array or hash) -# -path -> paths for which this cookie is valid (optional) -# -domain -> internet domain in which this cookie is valid (optional) -# -secure -> if true, cookie only passed through secure channel (optional) -# -expires -> expiry date in format Wdy, DD-Mon-YYYY HH:MM:SS GMT (optional) -#### -'cookie' => <<'END_OF_FUNC', -sub cookie { - my($self,@p) = self_or_default(@_); - my($name,$value,$path,$domain,$secure,$expires,$httponly) = - rearrange([NAME,[VALUE,VALUES],PATH,DOMAIN,SECURE,EXPIRES,HTTPONLY],@p); - - require CGI::Cookie; - - # if no value is supplied, then we retrieve the - # value of the cookie, if any. For efficiency, we cache the parsed - # cookies in our state variables. - unless ( defined($value) ) { - $self->{'.cookies'} = CGI::Cookie->fetch; - - # If no name is supplied, then retrieve the names of all our cookies. - return () unless $self->{'.cookies'}; - return keys %{$self->{'.cookies'}} unless $name; - return () unless $self->{'.cookies'}->{$name}; - return $self->{'.cookies'}->{$name}->value if defined($name) && $name ne ''; - } - - # If we get here, we're creating a new cookie - return undef unless defined($name) && $name ne ''; # this is an error - - my @param; - push(@param,'-name'=>$name); - push(@param,'-value'=>$value); - push(@param,'-domain'=>$domain) if $domain; - push(@param,'-path'=>$path) if $path; - push(@param,'-expires'=>$expires) if $expires; - push(@param,'-secure'=>$secure) if $secure; - push(@param,'-httponly'=>$httponly) if $httponly; - - return CGI::Cookie->new(@param); -} -END_OF_FUNC - -'parse_keywordlist' => <<'END_OF_FUNC', -sub parse_keywordlist { - my($self,$tosplit) = @_; - $tosplit = unescape($tosplit); # unescape the keywords - $tosplit=~tr/+/ /; # pluses to spaces - my(@keywords) = split(/\s+/,$tosplit); - return @keywords; -} -END_OF_FUNC - -'param_fetch' => <<'END_OF_FUNC', -sub param_fetch { - my($self,@p) = self_or_default(@_); - my($name) = rearrange([NAME],@p); - return [] unless defined $name; - - unless (exists($self->{param}{$name})) { - $self->add_parameter($name); - $self->{param}{$name} = []; - } - - return $self->{param}{$name}; -} -END_OF_FUNC - -############################################### -# OTHER INFORMATION PROVIDED BY THE ENVIRONMENT -############################################### - -#### Method: path_info -# Return the extra virtual path information provided -# after the URL (if any) -#### -'path_info' => <<'END_OF_FUNC', -sub path_info { - my ($self,$info) = self_or_default(@_); - if (defined($info)) { - $info = "/$info" if $info ne '' && substr($info,0,1) ne '/'; - $self->{'.path_info'} = $info; - } elsif (! defined($self->{'.path_info'}) ) { - my (undef,$path_info) = $self->_name_and_path_from_env; - $self->{'.path_info'} = $path_info || ''; - } - return $self->{'.path_info'}; -} -END_OF_FUNC - -# This function returns a potentially modified version of SCRIPT_NAME -# and PATH_INFO. Some HTTP servers do sanitise the paths in those -# variables. It is the case of at least Apache 2. If for instance the -# user requests: /path/./to/script.cgi/x//y/z/../x?y, Apache will set: -# REQUEST_URI=/path/./to/script.cgi/x//y/z/../x?y -# SCRIPT_NAME=/path/to/env.cgi -# PATH_INFO=/x/y/x -# -# This is all fine except that some bogus CGI scripts expect -# PATH_INFO=/http://foo when the user requests -# http://xxx/script.cgi/http://foo -# -# Old versions of this module used to accomodate with those scripts, so -# this is why we do this here to keep those scripts backward compatible. -# Basically, we accomodate with those scripts but within limits, that is -# we only try to preserve the number of / that were provided by the user -# if $REQUEST_URI and "$SCRIPT_NAME$PATH_INFO" only differ by the number -# of consecutive /. -# -# So for instance, in: http://foo/x//y/script.cgi/a//b, we'll return a -# script_name of /x//y/script.cgi and a path_info of /a//b, but in: -# http://foo/./x//z/script.cgi/a/../b//c, we'll return the versions -# possibly sanitised by the HTTP server, so in the case of Apache 2: -# script_name == /foo/x/z/script.cgi and path_info == /b/c. -# -# Future versions of this module may no longer do that, so one should -# avoid relying on the browser, proxy, server, and CGI.pm preserving the -# number of consecutive slashes as no guarantee can be made there. -'_name_and_path_from_env' => <<'END_OF_FUNC', -sub _name_and_path_from_env { - my $self = shift; - my $script_name = $ENV{SCRIPT_NAME} || ''; - my $path_info = $ENV{PATH_INFO} || ''; - my $uri = $self->request_uri || ''; - - $uri =~ s/\?.*//s; - $uri = unescape($uri); - - if ($uri ne "$script_name$path_info") { - my $script_name_pattern = quotemeta($script_name); - my $path_info_pattern = quotemeta($path_info); - $script_name_pattern =~ s{(?:\\/)+}{/+}g; - $path_info_pattern =~ s{(?:\\/)+}{/+}g; - - if ($uri =~ /^($script_name_pattern)($path_info_pattern)$/s) { - # REQUEST_URI and SCRIPT_NAME . PATH_INFO only differ by the - # numer of consecutive slashes, so we can extract the info from - # REQUEST_URI: - ($script_name, $path_info) = ($1, $2); - } - } - return ($script_name,$path_info); -} -END_OF_FUNC - - -#### Method: request_method -# Returns 'POST', 'GET', 'PUT' or 'HEAD' -#### -'request_method' => <<'END_OF_FUNC', -sub request_method { - return (defined $ENV{'REQUEST_METHOD'}) ? $ENV{'REQUEST_METHOD'} : undef; -} -END_OF_FUNC - -#### Method: content_type -# Returns the content_type string -#### -'content_type' => <<'END_OF_FUNC', -sub content_type { - return (defined $ENV{'CONTENT_TYPE'}) ? $ENV{'CONTENT_TYPE'} : undef; -} -END_OF_FUNC - -#### Method: path_translated -# Return the physical path information provided -# by the URL (if any) -#### -'path_translated' => <<'END_OF_FUNC', -sub path_translated { - return (defined $ENV{'PATH_TRANSLATED'}) ? $ENV{'PATH_TRANSLATED'} : undef; -} -END_OF_FUNC - - -#### Method: request_uri -# Return the literal request URI -#### -'request_uri' => <<'END_OF_FUNC', -sub request_uri { - return (defined $ENV{'REQUEST_URI'}) ? $ENV{'REQUEST_URI'} : undef; -} -END_OF_FUNC - - -#### Method: query_string -# Synthesize a query string from our current -# parameters -#### -'query_string' => <<'END_OF_FUNC', -sub query_string { - my($self) = self_or_default(@_); - my($param,$value,@pairs); - for $param ($self->param) { - my($eparam) = escape($param); - for $value ($self->param($param)) { - $value = escape($value); - next unless defined $value; - push(@pairs,"$eparam=$value"); - } - } - for (keys %{$self->{'.fieldnames'}}) { - push(@pairs,".cgifields=".escape("$_")); - } - return join($USE_PARAM_SEMICOLONS ? ';' : '&',@pairs); -} -END_OF_FUNC - - -#### Method: accept -# Without parameters, returns an array of the -# MIME types the browser accepts. -# With a single parameter equal to a MIME -# type, will return undef if the browser won't -# accept it, 1 if the browser accepts it but -# doesn't give a preference, or a floating point -# value between 0.0 and 1.0 if the browser -# declares a quantitative score for it. -# This handles MIME type globs correctly. -#### -'Accept' => <<'END_OF_FUNC', -sub Accept { - my($self,$search) = self_or_CGI(@_); - my(%prefs,$type,$pref,$pat); - - my(@accept) = defined $self->http('accept') - ? split(',',$self->http('accept')) - : (); - - for (@accept) { - ($pref) = /q=(\d\.\d+|\d+)/; - ($type) = m#(\S+/[^;]+)#; - next unless $type; - $prefs{$type}=$pref || 1; - } - - return keys %prefs unless $search; - - # if a search type is provided, we may need to - # perform a pattern matching operation. - # The MIME types use a glob mechanism, which - # is easily translated into a perl pattern match - - # First return the preference for directly supported - # types: - return $prefs{$search} if $prefs{$search}; - - # Didn't get it, so try pattern matching. - for (keys %prefs) { - next unless /\*/; # not a pattern match - ($pat = $_) =~ s/([^\w*])/\\$1/g; # escape meta characters - $pat =~ s/\*/.*/g; # turn it into a pattern - return $prefs{$_} if $search=~/$pat/; - } -} -END_OF_FUNC - - -#### Method: user_agent -# If called with no parameters, returns the user agent. -# If called with one parameter, does a pattern match (case -# insensitive) on the user agent. -#### -'user_agent' => <<'END_OF_FUNC', -sub user_agent { - my($self,$match)=self_or_CGI(@_); - my $user_agent = $self->http('user_agent'); - return $user_agent unless defined $match && $match && $user_agent; - return $user_agent =~ /$match/i; -} -END_OF_FUNC - - -#### Method: raw_cookie -# Returns the magic cookies for the session. -# The cookies are not parsed or altered in any way, i.e. -# cookies are returned exactly as given in the HTTP -# headers. If a cookie name is given, only that cookie's -# value is returned, otherwise the entire raw cookie -# is returned. -#### -'raw_cookie' => <<'END_OF_FUNC', -sub raw_cookie { - my($self,$key) = self_or_CGI(@_); - - require CGI::Cookie; - - if (defined($key)) { - $self->{'.raw_cookies'} = CGI::Cookie->raw_fetch - unless $self->{'.raw_cookies'}; - - return () unless $self->{'.raw_cookies'}; - return () unless $self->{'.raw_cookies'}->{$key}; - return $self->{'.raw_cookies'}->{$key}; - } - return $self->http('cookie') || $ENV{'COOKIE'} || ''; -} -END_OF_FUNC - -#### Method: virtual_host -# Return the name of the virtual_host, which -# is not always the same as the server -###### -'virtual_host' => <<'END_OF_FUNC', -sub virtual_host { - my $vh = http('x_forwarded_host') || http('host') || server_name(); - $vh =~ s/:\d+$//; # get rid of port number - return $vh; -} -END_OF_FUNC - -#### Method: remote_host -# Return the name of the remote host, or its IP -# address if unavailable. If this variable isn't -# defined, it returns "localhost" for debugging -# purposes. -#### -'remote_host' => <<'END_OF_FUNC', -sub remote_host { - return $ENV{'REMOTE_HOST'} || $ENV{'REMOTE_ADDR'} - || 'localhost'; -} -END_OF_FUNC - - -#### Method: remote_addr -# Return the IP addr of the remote host. -#### -'remote_addr' => <<'END_OF_FUNC', -sub remote_addr { - return $ENV{'REMOTE_ADDR'} || '127.0.0.1'; -} -END_OF_FUNC - - -#### Method: script_name -# Return the partial URL to this script for -# self-referencing scripts. Also see -# self_url(), which returns a URL with all state information -# preserved. -#### -'script_name' => <<'END_OF_FUNC', -sub script_name { - my ($self,@p) = self_or_default(@_); - if (@p) { - $self->{'.script_name'} = shift @p; - } elsif (!exists $self->{'.script_name'}) { - my ($script_name,$path_info) = $self->_name_and_path_from_env(); - $self->{'.script_name'} = $script_name; - } - return $self->{'.script_name'}; -} -END_OF_FUNC - - -#### Method: referer -# Return the HTTP_REFERER: useful for generating -# a GO BACK button. -#### -'referer' => <<'END_OF_FUNC', -sub referer { - my($self) = self_or_CGI(@_); - return $self->http('referer'); -} -END_OF_FUNC - - -#### Method: server_name -# Return the name of the server -#### -'server_name' => <<'END_OF_FUNC', -sub server_name { - return $ENV{'SERVER_NAME'} || 'localhost'; -} -END_OF_FUNC - -#### Method: server_software -# Return the name of the server software -#### -'server_software' => <<'END_OF_FUNC', -sub server_software { - return $ENV{'SERVER_SOFTWARE'} || 'cmdline'; -} -END_OF_FUNC - -#### Method: virtual_port -# Return the server port, taking virtual hosts into account -#### -'virtual_port' => <<'END_OF_FUNC', -sub virtual_port { - my($self) = self_or_default(@_); - my $vh = $self->http('x_forwarded_host') || $self->http('host'); - my $protocol = $self->protocol; - if ($vh) { - return ($vh =~ /:(\d+)$/)[0] || ($protocol eq 'https' ? 443 : 80); - } else { - return $self->server_port(); - } -} -END_OF_FUNC - -#### Method: server_port -# Return the tcp/ip port the server is running on -#### -'server_port' => <<'END_OF_FUNC', -sub server_port { - return $ENV{'SERVER_PORT'} || 80; # for debugging -} -END_OF_FUNC - -#### Method: server_protocol -# Return the protocol (usually HTTP/1.0) -#### -'server_protocol' => <<'END_OF_FUNC', -sub server_protocol { - return $ENV{'SERVER_PROTOCOL'} || 'HTTP/1.0'; # for debugging -} -END_OF_FUNC - -#### Method: http -# Return the value of an HTTP variable, or -# the list of variables if none provided -#### -'http' => <<'END_OF_FUNC', -sub http { - my ($self,$parameter) = self_or_CGI(@_); - if ( defined($parameter) ) { - $parameter =~ tr/-a-z/_A-Z/; - if ( $parameter =~ /^HTTP(?:_|$)/ ) { - return $ENV{$parameter}; - } - return $ENV{"HTTP_$parameter"}; - } - return grep { /^HTTP(?:_|$)/ } keys %ENV; -} -END_OF_FUNC - -#### Method: https -# Return the value of HTTPS, or -# the value of an HTTPS variable, or -# the list of variables -#### -'https' => <<'END_OF_FUNC', -sub https { - my ($self,$parameter) = self_or_CGI(@_); - if ( defined($parameter) ) { - $parameter =~ tr/-a-z/_A-Z/; - if ( $parameter =~ /^HTTPS(?:_|$)/ ) { - return $ENV{$parameter}; - } - return $ENV{"HTTPS_$parameter"}; - } - return wantarray - ? grep { /^HTTPS(?:_|$)/ } keys %ENV - : $ENV{'HTTPS'}; -} -END_OF_FUNC - -#### Method: protocol -# Return the protocol (http or https currently) -#### -'protocol' => <<'END_OF_FUNC', -sub protocol { - local($^W)=0; - my $self = shift; - return 'https' if uc($self->https()) eq 'ON'; - return 'https' if $self->server_port == 443; - my $prot = $self->server_protocol; - my($protocol,$version) = split('/',$prot); - return "\L$protocol\E"; -} -END_OF_FUNC - -#### Method: remote_ident -# Return the identity of the remote user -# (but only if his host is running identd) -#### -'remote_ident' => <<'END_OF_FUNC', -sub remote_ident { - return (defined $ENV{'REMOTE_IDENT'}) ? $ENV{'REMOTE_IDENT'} : undef; -} -END_OF_FUNC - - -#### Method: auth_type -# Return the type of use verification/authorization in use, if any. -#### -'auth_type' => <<'END_OF_FUNC', -sub auth_type { - return (defined $ENV{'AUTH_TYPE'}) ? $ENV{'AUTH_TYPE'} : undef; -} -END_OF_FUNC - - -#### Method: remote_user -# Return the authorization name used for user -# verification. -#### -'remote_user' => <<'END_OF_FUNC', -sub remote_user { - return (defined $ENV{'REMOTE_USER'}) ? $ENV{'REMOTE_USER'} : undef; -} -END_OF_FUNC - - -#### Method: user_name -# Try to return the remote user's name by hook or by -# crook -#### -'user_name' => <<'END_OF_FUNC', -sub user_name { - my ($self) = self_or_CGI(@_); - return $self->http('from') || $ENV{'REMOTE_IDENT'} || $ENV{'REMOTE_USER'}; -} -END_OF_FUNC - -#### Method: nosticky -# Set or return the NOSTICKY global flag -#### -'nosticky' => <<'END_OF_FUNC', -sub nosticky { - my ($self,$param) = self_or_CGI(@_); - $CGI::NOSTICKY = $param if defined($param); - return $CGI::NOSTICKY; -} -END_OF_FUNC - -#### Method: nph -# Set or return the NPH global flag -#### -'nph' => <<'END_OF_FUNC', -sub nph { - my ($self,$param) = self_or_CGI(@_); - $CGI::NPH = $param if defined($param); - return $CGI::NPH; -} -END_OF_FUNC - -#### Method: private_tempfiles -# Set or return the private_tempfiles global flag -#### -'private_tempfiles' => <<'END_OF_FUNC', -sub private_tempfiles { - my ($self,$param) = self_or_CGI(@_); - $CGI::PRIVATE_TEMPFILES = $param if defined($param); - return $CGI::PRIVATE_TEMPFILES; -} -END_OF_FUNC -#### Method: close_upload_files -# Set or return the close_upload_files global flag -#### -'close_upload_files' => <<'END_OF_FUNC', -sub close_upload_files { - my ($self,$param) = self_or_CGI(@_); - $CGI::CLOSE_UPLOAD_FILES = $param if defined($param); - return $CGI::CLOSE_UPLOAD_FILES; -} -END_OF_FUNC - - -#### Method: default_dtd -# Set or return the default_dtd global -#### -'default_dtd' => <<'END_OF_FUNC', -sub default_dtd { - my ($self,$param,$param2) = self_or_CGI(@_); - if (defined $param2 && defined $param) { - $CGI::DEFAULT_DTD = [ $param, $param2 ]; - } elsif (defined $param) { - $CGI::DEFAULT_DTD = $param; - } - return $CGI::DEFAULT_DTD; -} -END_OF_FUNC - -# -------------- really private subroutines ----------------- -'_maybe_escapeHTML' => <<'END_OF_FUNC', -sub _maybe_escapeHTML { - # hack to work around earlier hacks - push @_,$_[0] if @_==1 && $_[0] eq 'CGI'; - my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_); - return undef unless defined($toencode); - return $toencode if ref($self) && !$self->{'escape'}; - return $self->escapeHTML($toencode, $newlinestoo); -} -END_OF_FUNC - -'previous_or_default' => <<'END_OF_FUNC', -sub previous_or_default { - my($self,$name,$defaults,$override) = @_; - my(%selected); - - if (!$override && ($self->{'.fieldnames'}->{$name} || - defined($self->param($name)) ) ) { - $selected{$_}++ for $self->param($name); - } elsif (defined($defaults) && ref($defaults) && - (ref($defaults) eq 'ARRAY')) { - $selected{$_}++ for @{$defaults}; - } else { - $selected{$defaults}++ if defined($defaults); - } - - return %selected; -} -END_OF_FUNC - -'register_parameter' => <<'END_OF_FUNC', -sub register_parameter { - my($self,$param) = @_; - $self->{'.parametersToAdd'}->{$param}++; -} -END_OF_FUNC - -'get_fields' => <<'END_OF_FUNC', -sub get_fields { - my($self) = @_; - return $self->CGI::hidden('-name'=>'.cgifields', - '-values'=>[keys %{$self->{'.parametersToAdd'}}], - '-override'=>1); -} -END_OF_FUNC - -'read_from_cmdline' => <<'END_OF_FUNC', -sub read_from_cmdline { - my($input,@words); - my($query_string); - my($subpath); - if ($DEBUG && @ARGV) { - @words = @ARGV; - } elsif ($DEBUG > 1) { - require Text::ParseWords; - print STDERR "(offline mode: enter name=value pairs on standard input; press ^D or ^Z when done)\n"; - chomp(@lines = ); # remove newlines - $input = join(" ",@lines); - @words = &Text::ParseWords::old_shellwords($input); - } - for (@words) { - s/\\=/%3D/g; - s/\\&/%26/g; - } - - if ("@words"=~/=/) { - $query_string = join('&',@words); - } else { - $query_string = join('+',@words); - } - if ($query_string =~ /^(.*?)\?(.*)$/) - { - $query_string = $2; - $subpath = $1; - } - return { 'query_string' => $query_string, 'subpath' => $subpath }; -} -END_OF_FUNC - -##### -# subroutine: read_multipart -# -# Read multipart data and store it into our parameters. -# An interesting feature is that if any of the parts is a file, we -# create a temporary file and open up a filehandle on it so that the -# caller can read from it if necessary. -##### -'read_multipart' => <<'END_OF_FUNC', -sub read_multipart { - my($self,$boundary,$length) = @_; - my($buffer) = $self->new_MultipartBuffer($boundary,$length); - return unless $buffer; - my(%header,$body); - my $filenumber = 0; - while (!$buffer->eof) { - %header = $buffer->readHeader; - - unless (%header) { - $self->cgi_error("400 Bad request (malformed multipart POST)"); - return; - } - - $header{'Content-Disposition'} ||= ''; # quench uninit variable warning - - my($param)= $header{'Content-Disposition'}=~/[\s;]name="([^"]*)"/; - $param .= $TAINTED; - - # See RFC 1867, 2183, 2045 - # NB: File content will be loaded into memory should - # content-disposition parsing fail. - my ($filename) = $header{'Content-Disposition'} - =~/ filename=(("[^"]*")|([a-z\d!\#'\*\+,\.^_\`\{\}\|\~]*))/i; - - $filename ||= ''; # quench uninit variable warning - - $filename =~ s/^"([^"]*)"$/$1/; - # Test for Opera's multiple upload feature - my($multipart) = ( defined( $header{'Content-Type'} ) && - $header{'Content-Type'} =~ /multipart\/mixed/ ) ? - 1 : 0; - - # add this parameter to our list - $self->add_parameter($param); - - # If no filename specified, then just read the data and assign it - # to our parameter list. - if ( ( !defined($filename) || $filename eq '' ) && !$multipart ) { - my($value) = $buffer->readBody; - $value .= $TAINTED; - push(@{$self->{param}{$param}},$value); - next; - } - - my ($tmpfile,$tmp,$filehandle); - UPLOADS: { - # If we get here, then we are dealing with a potentially large - # uploaded form. Save the data to a temporary file, then open - # the file for reading. - - # skip the file if uploads disabled - if ($DISABLE_UPLOADS) { - while (defined($data = $buffer->read)) { } - last UPLOADS; - } - - # set the filename to some recognizable value - if ( ( !defined($filename) || $filename eq '' ) && $multipart ) { - $filename = "multipart/mixed"; - } - - # choose a relatively unpredictable tmpfile sequence number - my $seqno = unpack("%16C*",join('',localtime,grep {defined $_} values %ENV)); - for (my $cnt=10;$cnt>0;$cnt--) { - next unless $tmpfile = CGITempFile->new($seqno); - $tmp = $tmpfile->as_string; - last if defined($filehandle = Fh->new($filename,$tmp,$PRIVATE_TEMPFILES)); - $seqno += int rand(100); - } - die "CGI.pm open of tmpfile $tmp/$filename failed: $!\n" unless defined $filehandle; - $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode - && defined fileno($filehandle); - - # if this is an multipart/mixed attachment, save the header - # together with the body for later parsing with an external - # MIME parser module - if ( $multipart ) { - for ( keys %header ) { - print $filehandle "$_: $header{$_}${CRLF}"; - } - print $filehandle "${CRLF}"; - } - - my ($data); - local($\) = ''; - my $totalbytes = 0; - while (defined($data = $buffer->read)) { - if (defined $self->{'.upload_hook'}) - { - $totalbytes += length($data); - &{$self->{'.upload_hook'}}($filename ,$data, $totalbytes, $self->{'.upload_data'}); - } - print $filehandle $data if ($self->{'use_tempfile'}); - } - - # back up to beginning of file - seek($filehandle,0,0); - - ## Close the filehandle if requested this allows a multipart MIME - ## upload to contain many files, and we won't die due to too many - ## open file handles. The user can access the files using the hash - ## below. - close $filehandle if $CLOSE_UPLOAD_FILES; - $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode; - - # Save some information about the uploaded file where we can get - # at it later. - # Use the typeglob as the key, as this is guaranteed to be - # unique for each filehandle. Don't use the file descriptor as - # this will be re-used for each filehandle if the - # close_upload_files feature is used. - $self->{'.tmpfiles'}->{$$filehandle}= { - hndl => $filehandle, - name => $tmpfile, - info => {%header}, - }; - push(@{$self->{param}{$param}},$filehandle); - } - } -} -END_OF_FUNC - -##### -# subroutine: read_multipart_related -# -# Read multipart/related data and store it into our parameters. The -# first parameter sets the start of the data. The part identified by -# this Content-ID will not be stored as a file upload, but will be -# returned by this method. All other parts will be available as file -# uploads accessible by their Content-ID -##### -'read_multipart_related' => <<'END_OF_FUNC', -sub read_multipart_related { - my($self,$start,$boundary,$length) = @_; - my($buffer) = $self->new_MultipartBuffer($boundary,$length); - return unless $buffer; - my(%header,$body); - my $filenumber = 0; - my $returnvalue; - while (!$buffer->eof) { - %header = $buffer->readHeader; - - unless (%header) { - $self->cgi_error("400 Bad request (malformed multipart POST)"); - return; - } - - my($param) = $header{'Content-ID'}=~/\<([^\>]*)\>/; - $param .= $TAINTED; - - # If this is the start part, then just read the data and assign it - # to our return variable. - if ( $param eq $start ) { - $returnvalue = $buffer->readBody; - $returnvalue .= $TAINTED; - next; - } - - # add this parameter to our list - $self->add_parameter($param); - - my ($tmpfile,$tmp,$filehandle); - UPLOADS: { - # If we get here, then we are dealing with a potentially large - # uploaded form. Save the data to a temporary file, then open - # the file for reading. - - # skip the file if uploads disabled - if ($DISABLE_UPLOADS) { - while (defined($data = $buffer->read)) { } - last UPLOADS; - } - - # choose a relatively unpredictable tmpfile sequence number - my $seqno = unpack("%16C*",join('',localtime,grep {defined $_} values %ENV)); - for (my $cnt=10;$cnt>0;$cnt--) { - next unless $tmpfile = CGITempFile->new($seqno); - $tmp = $tmpfile->as_string; - last if defined($filehandle = Fh->new($param,$tmp,$PRIVATE_TEMPFILES)); - $seqno += int rand(100); - } - die "CGI open of tmpfile: $!\n" unless defined $filehandle; - $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode - && defined fileno($filehandle); - - my ($data); - local($\) = ''; - my $totalbytes; - while (defined($data = $buffer->read)) { - if (defined $self->{'.upload_hook'}) - { - $totalbytes += length($data); - &{$self->{'.upload_hook'}}($param ,$data, $totalbytes, $self->{'.upload_data'}); - } - print $filehandle $data if ($self->{'use_tempfile'}); - } - - # back up to beginning of file - seek($filehandle,0,0); - - ## Close the filehandle if requested this allows a multipart MIME - ## upload to contain many files, and we won't die due to too many - ## open file handles. The user can access the files using the hash - ## below. - close $filehandle if $CLOSE_UPLOAD_FILES; - $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode; - - # Save some information about the uploaded file where we can get - # at it later. - # Use the typeglob as the key, as this is guaranteed to be - # unique for each filehandle. Don't use the file descriptor as - # this will be re-used for each filehandle if the - # close_upload_files feature is used. - $self->{'.tmpfiles'}->{$$filehandle}= { - hndl => $filehandle, - name => $tmpfile, - info => {%header}, - }; - push(@{$self->{param}{$param}},$filehandle); - } - } - return $returnvalue; -} -END_OF_FUNC - - -'upload' =><<'END_OF_FUNC', -sub upload { - my($self,$param_name) = self_or_default(@_); - my @param = grep {ref($_) && defined(fileno($_))} $self->param($param_name); - return unless @param; - return wantarray ? @param : $param[0]; -} -END_OF_FUNC - -'tmpFileName' => <<'END_OF_FUNC', -sub tmpFileName { - my($self,$filename) = self_or_default(@_); - return $self->{'.tmpfiles'}->{$$filename}->{name} ? - $self->{'.tmpfiles'}->{$$filename}->{name}->as_string - : ''; -} -END_OF_FUNC - -'uploadInfo' => <<'END_OF_FUNC', -sub uploadInfo { - my($self,$filename) = self_or_default(@_); - return $self->{'.tmpfiles'}->{$$filename}->{info}; -} -END_OF_FUNC - -# internal routine, don't use -'_set_values_and_labels' => <<'END_OF_FUNC', -sub _set_values_and_labels { - my $self = shift; - my ($v,$l,$n) = @_; - $$l = $v if ref($v) eq 'HASH' && !ref($$l); - return $self->param($n) if !defined($v); - return $v if !ref($v); - return ref($v) eq 'HASH' ? keys %$v : @$v; -} -END_OF_FUNC - -# internal routine, don't use -'_set_attributes' => <<'END_OF_FUNC', -sub _set_attributes { - my $self = shift; - my($element, $attributes) = @_; - return '' unless defined($attributes->{$element}); - $attribs = ' '; - for my $attrib (keys %{$attributes->{$element}}) { - (my $clean_attrib = $attrib) =~ s/^-//; - $attribs .= "@{[lc($clean_attrib)]}=\"$attributes->{$element}{$attrib}\" "; - } - $attribs =~ s/ $//; - return $attribs; -} -END_OF_FUNC - -'_compile_all' => <<'END_OF_FUNC', -sub _compile_all { - for (@_) { - next if defined(&$_); - $AUTOLOAD = "CGI::$_"; - _compile(); - } -} -END_OF_FUNC - -); -END_OF_AUTOLOAD -; - -######################################################### -# Globals and stubs for other packages that we use. -######################################################### - -################### Fh -- lightweight filehandle ############### -package Fh; - -use overload - '""' => \&asString, - 'cmp' => \&compare, - 'fallback'=>1; - -$FH='fh00000'; - -*Fh::AUTOLOAD = \&CGI::AUTOLOAD; - -sub DESTROY { - my $self = shift; - close $self; -} - -$AUTOLOADED_ROUTINES = ''; # prevent -w error -$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; -%SUBS = ( -'asString' => <<'END_OF_FUNC', -sub asString { - my $self = shift; - # get rid of package name - (my $i = $$self) =~ s/^\*(\w+::fh\d{5})+//; - $i =~ s/%(..)/ chr(hex($1)) /eg; - return $i.$CGI::TAINTED; -# BEGIN DEAD CODE -# This was an extremely clever patch that allowed "use strict refs". -# Unfortunately it relied on another bug that caused leaky file descriptors. -# The underlying bug has been fixed, so this no longer works. However -# "strict refs" still works for some reason. -# my $self = shift; -# return ${*{$self}{SCALAR}}; -# END DEAD CODE -} -END_OF_FUNC - -'compare' => <<'END_OF_FUNC', -sub compare { - my $self = shift; - my $value = shift; - return "$self" cmp $value; -} -END_OF_FUNC - -'new' => <<'END_OF_FUNC', -sub new { - my($pack,$name,$file,$delete) = @_; - _setup_symbols(@SAVED_SYMBOLS) if @SAVED_SYMBOLS; - require Fcntl unless defined &Fcntl::O_RDWR; - (my $safename = $name) =~ s/([':%])/ sprintf '%%%02X', ord $1 /eg; - my $fv = ++$FH . $safename; - my $ref = \*{"Fh::$fv"}; - - # Note this same regex is also used elsewhere in the same file for CGITempFile::new - $file =~ m!^([a-zA-Z0-9_ \'\":/.\$\\\+-]+)$! || return; - my $safe = $1; - sysopen($ref,$safe,Fcntl::O_RDWR()|Fcntl::O_CREAT()|Fcntl::O_EXCL(),0600) || return; - unlink($safe) if $delete; - CORE::delete $Fh::{$fv}; - return bless $ref,$pack; -} -END_OF_FUNC - -'handle' => <<'END_OF_FUNC', -sub handle { - my $self = shift; - eval "require IO::Handle" unless IO::Handle->can('new_from_fd'); - return IO::Handle->new_from_fd(fileno $self,"<"); -} -END_OF_FUNC - -); -END_OF_AUTOLOAD - -######################## MultipartBuffer #################### -package MultipartBuffer; - -use constant DEBUG => 0; - -# how many bytes to read at a time. We use -# a 4K buffer by default. -$INITIAL_FILLUNIT = 1024 * 4; -$TIMEOUT = 240*60; # 4 hour timeout for big files -$SPIN_LOOP_MAX = 2000; # bug fix for some Netscape servers -$CRLF=$CGI::CRLF; - -#reuse the autoload function -*MultipartBuffer::AUTOLOAD = \&CGI::AUTOLOAD; - -# avoid autoloader warnings -sub DESTROY {} - -############################################################################### -################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### -############################################################################### -$AUTOLOADED_ROUTINES = ''; # prevent -w error -$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; -%SUBS = ( - -'new' => <<'END_OF_FUNC', -sub new { - my($package,$interface,$boundary,$length) = @_; - $FILLUNIT = $INITIAL_FILLUNIT; - $CGI::DefaultClass->binmode($IN); # if $CGI::needs_binmode; # just do it always - - # If the user types garbage into the file upload field, - # then Netscape passes NOTHING to the server (not good). - # We may hang on this read in that case. So we implement - # a read timeout. If nothing is ready to read - # by then, we return. - - # Netscape seems to be a little bit unreliable - # about providing boundary strings. - my $boundary_read = 0; - if ($boundary) { - - # Under the MIME spec, the boundary consists of the - # characters "--" PLUS the Boundary string - - # BUG: IE 3.01 on the Macintosh uses just the boundary -- not - # the two extra hyphens. We do a special case here on the user-agent!!!! - $boundary = "--$boundary" unless CGI::user_agent('MSIE\s+3\.0[12];\s*Mac|DreamPassport'); - - } else { # otherwise we find it ourselves - my($old); - ($old,$/) = ($/,$CRLF); # read a CRLF-delimited line - $boundary = ; # BUG: This won't work correctly under mod_perl - $length -= length($boundary); - chomp($boundary); # remove the CRLF - $/ = $old; # restore old line separator - $boundary_read++; - } - - my $self = {LENGTH=>$length, - CHUNKED=>!$length, - BOUNDARY=>$boundary, - INTERFACE=>$interface, - BUFFER=>'', - }; - - $FILLUNIT = length($boundary) - if length($boundary) > $FILLUNIT; - - my $retval = bless $self,ref $package || $package; - - # Read the preamble and the topmost (boundary) line plus the CRLF. - unless ($boundary_read) { - while ($self->read(0)) { } - } - die "Malformed multipart POST: data truncated\n" if $self->eof; - - return $retval; -} -END_OF_FUNC - -'readHeader' => <<'END_OF_FUNC', -sub readHeader { - my($self) = @_; - my($end); - my($ok) = 0; - my($bad) = 0; - - local($CRLF) = "\015\012" if $CGI::OS eq 'VMS' || $CGI::EBCDIC; - - do { - $self->fillBuffer($FILLUNIT); - $ok++ if ($end = index($self->{BUFFER},"${CRLF}${CRLF}")) >= 0; - $ok++ if $self->{BUFFER} eq ''; - $bad++ if !$ok && $self->{LENGTH} <= 0; - # this was a bad idea - # $FILLUNIT *= 2 if length($self->{BUFFER}) >= $FILLUNIT; - } until $ok || $bad; - return () if $bad; - - #EBCDIC NOTE: translate header into EBCDIC, but watch out for continuation lines! - - my($header) = substr($self->{BUFFER},0,$end+2); - substr($self->{BUFFER},0,$end+4) = ''; - my %return; - - if ($CGI::EBCDIC) { - warn "untranslated header=$header\n" if DEBUG; - $header = CGI::Util::ascii2ebcdic($header); - warn "translated header=$header\n" if DEBUG; - } - - # See RFC 2045 Appendix A and RFC 822 sections 3.4.8 - # (Folding Long Header Fields), 3.4.3 (Comments) - # and 3.4.5 (Quoted-Strings). - - my $token = '[-\w!\#$%&\'*+.^_\`|{}~]'; - $header=~s/$CRLF\s+/ /og; # merge continuation lines - - while ($header=~/($token+):\s+([^$CRLF]*)/mgox) { - my ($field_name,$field_value) = ($1,$2); - $field_name =~ s/\b(\w)/uc($1)/eg; #canonicalize - $return{$field_name}=$field_value; - } - return %return; -} -END_OF_FUNC - -# This reads and returns the body as a single scalar value. -'readBody' => <<'END_OF_FUNC', -sub readBody { - my($self) = @_; - my($data); - my($returnval)=''; - - #EBCDIC NOTE: want to translate returnval into EBCDIC HERE - - while (defined($data = $self->read)) { - $returnval .= $data; - } - - if ($CGI::EBCDIC) { - warn "untranslated body=$returnval\n" if DEBUG; - $returnval = CGI::Util::ascii2ebcdic($returnval); - warn "translated body=$returnval\n" if DEBUG; - } - return $returnval; -} -END_OF_FUNC - -# This will read $bytes or until the boundary is hit, whichever happens -# first. After the boundary is hit, we return undef. The next read will -# skip over the boundary and begin reading again; -'read' => <<'END_OF_FUNC', -sub read { - my($self,$bytes) = @_; - - # default number of bytes to read - $bytes = $bytes || $FILLUNIT; - - # Fill up our internal buffer in such a way that the boundary - # is never split between reads. - $self->fillBuffer($bytes); - - my $boundary_start = $CGI::EBCDIC ? CGI::Util::ebcdic2ascii($self->{BOUNDARY}) : $self->{BOUNDARY}; - my $boundary_end = $CGI::EBCDIC ? CGI::Util::ebcdic2ascii($self->{BOUNDARY}.'--') : $self->{BOUNDARY}.'--'; - - # Find the boundary in the buffer (it may not be there). - my $start = index($self->{BUFFER},$boundary_start); - - warn "boundary=$self->{BOUNDARY} length=$self->{LENGTH} start=$start\n" if DEBUG; - - # protect against malformed multipart POST operations - die "Malformed multipart POST\n" unless $self->{CHUNKED} || ($start >= 0 || $self->{LENGTH} > 0); - - #EBCDIC NOTE: want to translate boundary search into ASCII here. - - # If the boundary begins the data, then skip past it - # and return undef. - if ($start == 0) { - - # clear us out completely if we've hit the last boundary. - if (index($self->{BUFFER},$boundary_end)==0) { - $self->{BUFFER}=''; - $self->{LENGTH}=0; - return undef; - } - - # just remove the boundary. - substr($self->{BUFFER},0,length($boundary_start))=''; - $self->{BUFFER} =~ s/^\012\015?//; - return undef; - } - - my $bytesToReturn; - if ($start > 0) { # read up to the boundary - $bytesToReturn = $start-2 > $bytes ? $bytes : $start; - } else { # read the requested number of bytes - # leave enough bytes in the buffer to allow us to read - # the boundary. Thanks to Kevin Hendrick for finding - # this one. - $bytesToReturn = $bytes - (length($boundary_start)+1); - } - - my $returnval=substr($self->{BUFFER},0,$bytesToReturn); - substr($self->{BUFFER},0,$bytesToReturn)=''; - - # If we hit the boundary, remove the CRLF from the end. - return ($bytesToReturn==$start) - ? substr($returnval,0,-2) : $returnval; -} -END_OF_FUNC - - -# This fills up our internal buffer in such a way that the -# boundary is never split between reads -'fillBuffer' => <<'END_OF_FUNC', -sub fillBuffer { - my($self,$bytes) = @_; - return unless $self->{CHUNKED} || $self->{LENGTH}; - - my($boundaryLength) = length($self->{BOUNDARY}); - my($bufferLength) = length($self->{BUFFER}); - my($bytesToRead) = $bytes - $bufferLength + $boundaryLength + 2; - $bytesToRead = $self->{LENGTH} if !$self->{CHUNKED} && $self->{LENGTH} < $bytesToRead; - - # Try to read some data. We may hang here if the browser is screwed up. - my $bytesRead = $self->{INTERFACE}->read_from_client(\$self->{BUFFER}, - $bytesToRead, - $bufferLength); - warn "bytesToRead=$bytesToRead, bufferLength=$bufferLength, buffer=$self->{BUFFER}\n" if DEBUG; - $self->{BUFFER} = '' unless defined $self->{BUFFER}; - - # An apparent bug in the Apache server causes the read() - # to return zero bytes repeatedly without blocking if the - # remote user aborts during a file transfer. I don't know how - # they manage this, but the workaround is to abort if we get - # more than SPIN_LOOP_MAX consecutive zero reads. - if ($bytesRead <= 0) { - die "CGI.pm: Server closed socket during multipart read (client aborted?).\n" - if ($self->{ZERO_LOOP_COUNTER}++ >= $SPIN_LOOP_MAX); - } else { - $self->{ZERO_LOOP_COUNTER}=0; - } - - $self->{LENGTH} -= $bytesRead if !$self->{CHUNKED} && $bytesRead; -} -END_OF_FUNC - - -# Return true when we've finished reading -'eof' => <<'END_OF_FUNC' -sub eof { - my($self) = @_; - return 1 if (length($self->{BUFFER}) == 0) - && ($self->{LENGTH} <= 0); - undef; -} -END_OF_FUNC - -); -END_OF_AUTOLOAD - -#################################################################################### -################################## TEMPORARY FILES ################################# -#################################################################################### -package CGITempFile; - -sub find_tempdir { - $SL = $CGI::SL; - $MAC = $CGI::OS eq 'MACINTOSH'; - my ($vol) = $MAC ? MacPerl::Volumes() =~ /:(.*)/ : ""; - unless (defined $TMPDIRECTORY) { - @TEMP=("${SL}usr${SL}tmp","${SL}var${SL}tmp", - "C:${SL}temp","${SL}tmp","${SL}temp", - "${vol}${SL}Temporary Items", - "${SL}WWW_ROOT", "${SL}SYS\$SCRATCH", - "C:${SL}system${SL}temp"); - - if( $CGI::OS eq 'WINDOWS' ){ - # PeterH: These evars may not exist if this is invoked within a service and untainting - # is in effect - with 'use warnings' the undefined array entries causes Perl to die - unshift(@TEMP,$ENV{TEMP}) if defined $ENV{TEMP}; - unshift(@TEMP,$ENV{TMP}) if defined $ENV{TMP}; - unshift(@TEMP,$ENV{WINDIR} . $SL . 'TEMP') if defined $ENV{WINDIR}; - } - - unshift(@TEMP,$ENV{'TMPDIR'}) if defined $ENV{'TMPDIR'}; - - # this feature was supposed to provide per-user tmpfiles, but - # it is problematic. - # unshift(@TEMP,(getpwuid($<))[7].'/tmp') if $CGI::OS eq 'UNIX'; - # Rob: getpwuid() is unfortunately UNIX specific. On brain dead OS'es this - # : can generate a 'getpwuid() not implemented' exception, even though - # : it's never called. Found under DOS/Win with the DJGPP perl port. - # : Refer to getpwuid() only at run-time if we're fortunate and have UNIX. - # unshift(@TEMP,(eval {(getpwuid($>))[7]}).'/tmp') if $CGI::OS eq 'UNIX' and $> != 0; - - for (@TEMP) { - do {$TMPDIRECTORY = $_; last} if -d $_ && -w _; - } - } - $TMPDIRECTORY = $MAC ? "" : "." unless $TMPDIRECTORY; -} - -find_tempdir(); - -$MAXTRIES = 5000; - -# cute feature, but overload implementation broke it -# %OVERLOAD = ('""'=>'as_string'); -*CGITempFile::AUTOLOAD = \&CGI::AUTOLOAD; - -sub DESTROY { - my($self) = @_; - $$self =~ m!^([a-zA-Z0-9_ \'\":/.\$\\~-]+)$! || return; - my $safe = $1; # untaint operation - unlink $safe; # get rid of the file -} - -############################################################################### -################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### -############################################################################### -$AUTOLOADED_ROUTINES = ''; # prevent -w error -$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; -%SUBS = ( - -'new' => <<'END_OF_FUNC', -sub new { - my($package,$sequence) = @_; - my $filename; - unless (-w $TMPDIRECTORY) { - $TMPDIRECTORY = undef; - find_tempdir(); - } - for (my $i = 0; $i < $MAXTRIES; $i++) { - last if ! -f ($filename = sprintf("\%s${SL}CGItemp%d", $TMPDIRECTORY, $sequence++)); - } - # check that it is a more-or-less valid filename - # Note this same regex is also used elsewhere in the same file for Fh::new - return unless $filename =~ m!^([a-zA-Z0-9_ \'\":/.\$\\\+-]+)$!; - # this used to untaint, now it doesn't - # $filename = $1; - return bless \$filename; -} -END_OF_FUNC - -'as_string' => <<'END_OF_FUNC' -sub as_string { - my($self) = @_; - return $$self; -} -END_OF_FUNC - -); -END_OF_AUTOLOAD - -package CGI; - -# We get a whole bunch of warnings about "possibly uninitialized variables" -# when running with the -w switch. Touch them all once to get rid of the -# warnings. This is ugly and I hate it. -if ($^W) { - $CGI::CGI = ''; - $CGI::CGI=<new; - - # Process an HTTP request - @values = $q->param('form_field'); - - $fh = $q->upload('file_field'); - - $riddle = $query->cookie('riddle_name'); - %answers = $query->cookie('answers'); - - # Prepare various HTTP responses - print $q->header(); - print $q->header('application/json'); - - $cookie1 = $q->cookie(-name=>'riddle_name', -value=>"The Sphynx's Question"); - $cookie2 = $q->cookie(-name=>'answers', -value=>\%answers); - print $q->header( - -type => 'image/gif', - -expires => '+3d', - -cookie => [$cookie1,$cookie2] - ); - - print $q->redirect('http://somewhere.else/in/movie/land'); - -=head1 DESCRIPTION - -CGI.pm is a stable, complete and mature solution for processing and preparing -HTTP requests and responses. Major features including processing form -submissions, file uploads, reading and writing cookies, query string generation -and manipulation, and processing and preparing HTTP headers. Some HTML -generation utilities are included as well. - -CGI.pm performs very well in a vanilla CGI.pm environment and also comes -with built-in support for mod_perl and mod_perl2 as well as FastCGI. - -It has the benefit of having developed and refined over 10 years with input -from dozens of contributors and being deployed on thousands of websites. -CGI.pm has been included in the Perl distribution since Perl 5.4, and has -become a de-facto standard. - -=head2 PROGRAMMING STYLE - -There are two styles of programming with CGI.pm, an object-oriented -style and a function-oriented style. In the object-oriented style you -create one or more CGI objects and then use object methods to create -the various elements of the page. Each CGI object starts out with the -list of named parameters that were passed to your CGI script by the -server. You can modify the objects, save them to a file or database -and recreate them. Because each object corresponds to the "state" of -the CGI script, and because each object's parameter list is -independent of the others, this allows you to save the state of the -script and restore it later. - -For example, using the object oriented style, here is how you create -a simple "Hello World" HTML page: - - #!/usr/local/bin/perl -w - use CGI; # load CGI routines - $q = CGI->new; # create new CGI object - print $q->header, # create the HTTP header - $q->start_html('hello world'), # start the HTML - $q->h1('hello world'), # level 1 header - $q->end_html; # end the HTML - -In the function-oriented style, there is one default CGI object that -you rarely deal with directly. Instead you just call functions to -retrieve CGI parameters, create HTML tags, manage cookies, and so -on. This provides you with a cleaner programming interface, but -limits you to using one CGI object at a time. The following example -prints the same page, but uses the function-oriented interface. -The main differences are that we now need to import a set of functions -into our name space (usually the "standard" functions), and we don't -need to create the CGI object. - - #!/usr/local/bin/perl - use CGI qw/:standard/; # load standard CGI routines - print header, # create the HTTP header - start_html('hello world'), # start the HTML - h1('hello world'), # level 1 header - end_html; # end the HTML - -The examples in this document mainly use the object-oriented style. -See HOW TO IMPORT FUNCTIONS for important information on -function-oriented programming in CGI.pm - -=head2 CALLING CGI.PM ROUTINES - -Most CGI.pm routines accept several arguments, sometimes as many as 20 -optional ones! To simplify this interface, all routines use a named -argument calling style that looks like this: - - print $q->header(-type=>'image/gif',-expires=>'+3d'); - -Each argument name is preceded by a dash. Neither case nor order -matters in the argument list. -type, -Type, and -TYPE are all -acceptable. In fact, only the first argument needs to begin with a -dash. If a dash is present in the first argument, CGI.pm assumes -dashes for the subsequent ones. - -Several routines are commonly called with just one argument. In the -case of these routines you can provide the single argument without an -argument name. header() happens to be one of these routines. In this -case, the single argument is the document type. - - print $q->header('text/html'); - -Other such routines are documented below. - -Sometimes named arguments expect a scalar, sometimes a reference to an -array, and sometimes a reference to a hash. Often, you can pass any -type of argument and the routine will do whatever is most appropriate. -For example, the param() routine is used to set a CGI parameter to a -single or a multi-valued value. The two cases are shown below: - - $q->param(-name=>'veggie',-value=>'tomato'); - $q->param(-name=>'veggie',-value=>['tomato','tomahto','potato','potahto']); - -A large number of routines in CGI.pm actually aren't specifically -defined in the module, but are generated automatically as needed. -These are the "HTML shortcuts," routines that generate HTML tags for -use in dynamically-generated pages. HTML tags have both attributes -(the attribute="value" pairs within the tag itself) and contents (the -part between the opening and closing pairs.) To distinguish between -attributes and contents, CGI.pm uses the convention of passing HTML -attributes as a hash reference as the first argument, and the -contents, if any, as any subsequent arguments. It works out like -this: - - Code Generated HTML - ---- -------------- - h1()

    - h1('some','contents');

    some contents

    - h1({-align=>left});

    - h1({-align=>left},'contents');

    contents

    - -HTML tags are described in more detail later. - -Many newcomers to CGI.pm are puzzled by the difference between the -calling conventions for the HTML shortcuts, which require curly braces -around the HTML tag attributes, and the calling conventions for other -routines, which manage to generate attributes without the curly -brackets. Don't be confused. As a convenience the curly braces are -optional in all but the HTML shortcuts. If you like, you can use -curly braces when calling any routine that takes named arguments. For -example: - - print $q->header( {-type=>'image/gif',-expires=>'+3d'} ); - -If you use the B<-w> switch, you will be warned that some CGI.pm argument -names conflict with built-in Perl functions. The most frequent of -these is the -values argument, used to create multi-valued menus, -radio button clusters and the like. To get around this warning, you -have several choices: - -=over 4 - -=item 1. - -Use another name for the argument, if one is available. -For example, -value is an alias for -values. - -=item 2. - -Change the capitalization, e.g. -Values - -=item 3. - -Put quotes around the argument name, e.g. '-values' - -=back - -Many routines will do something useful with a named argument that it -doesn't recognize. For example, you can produce non-standard HTTP -header fields by providing them as named arguments: - - print $q->header(-type => 'text/html', - -cost => 'Three smackers', - -annoyance_level => 'high', - -complaints_to => 'bit bucket'); - -This will produce the following nonstandard HTTP header: - - HTTP/1.0 200 OK - Cost: Three smackers - Annoyance-level: high - Complaints-to: bit bucket - Content-type: text/html - -Notice the way that underscores are translated automatically into -hyphens. HTML-generating routines perform a different type of -translation. - -This feature allows you to keep up with the rapidly changing HTTP and -HTML "standards". - -=head2 CREATING A NEW QUERY OBJECT (OBJECT-ORIENTED STYLE): - - $query = CGI->new; - -This will parse the input (from POST, GET and DELETE methods) and store -it into a perl5 object called $query. - -Any filehandles from file uploads will have their position reset to -the beginning of the file. - -=head2 CREATING A NEW QUERY OBJECT FROM AN INPUT FILE - - $query = CGI->new(INPUTFILE); - -If you provide a file handle to the new() method, it will read -parameters from the file (or STDIN, or whatever). The file can be in -any of the forms describing below under debugging (i.e. a series of -newline delimited TAG=VALUE pairs will work). Conveniently, this type -of file is created by the save() method (see below). Multiple records -can be saved and restored. - -Perl purists will be pleased to know that this syntax accepts -references to file handles, or even references to filehandle globs, -which is the "official" way to pass a filehandle: - - $query = CGI->new(\*STDIN); - -You can also initialize the CGI object with a FileHandle or IO::File -object. - -If you are using the function-oriented interface and want to -initialize CGI state from a file handle, the way to do this is with -B. This will (re)initialize the -default CGI object from the indicated file handle. - - open (IN,"test.in") || die; - restore_parameters(IN); - close IN; - -You can also initialize the query object from a hash -reference: - - $query = CGI->new( {'dinosaur'=>'barney', - 'song'=>'I love you', - 'friends'=>[qw/Jessica George Nancy/]} - ); - -or from a properly formatted, URL-escaped query string: - - $query = CGI->new('dinosaur=barney&color=purple'); - -or from a previously existing CGI object (currently this clones the -parameter list, but none of the other object-specific fields, such as -autoescaping): - - $old_query = CGI->new; - $new_query = CGI->new($old_query); - -To create an empty query, initialize it from an empty string or hash: - - $empty_query = CGI->new(""); - - -or- - - $empty_query = CGI->new({}); - -=head2 FETCHING A LIST OF KEYWORDS FROM THE QUERY: - - @keywords = $query->keywords - -If the script was invoked as the result of an search, the -parsed keywords can be obtained as an array using the keywords() method. - -=head2 FETCHING THE NAMES OF ALL THE PARAMETERS PASSED TO YOUR SCRIPT: - - @names = $query->param - -If the script was invoked with a parameter list -(e.g. "name1=value1&name2=value2&name3=value3"), the param() method -will return the parameter names as a list. If the script was invoked -as an script and contains a string without ampersands -(e.g. "value1+value2+value3") , there will be a single parameter named -"keywords" containing the "+"-delimited keywords. - -NOTE: As of version 1.5, the array of parameter names returned will -be in the same order as they were submitted by the browser. -Usually this order is the same as the order in which the -parameters are defined in the form (however, this isn't part -of the spec, and so isn't guaranteed). - -=head2 FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER: - - @values = $query->param('foo'); - - -or- - - $value = $query->param('foo'); - -Pass the param() method a single argument to fetch the value of the -named parameter. If the parameter is multivalued (e.g. from multiple -selections in a scrolling list), you can ask to receive an array. Otherwise -the method will return a single value. - -If a value is not given in the query string, as in the queries -"name1=&name2=", it will be returned as an empty string. - - -If the parameter does not exist at all, then param() will return undef -in a scalar context, and the empty list in a list context. - - -=head2 SETTING THE VALUE(S) OF A NAMED PARAMETER: - - $query->param('foo','an','array','of','values'); - -This sets the value for the named parameter 'foo' to an array of -values. This is one way to change the value of a field AFTER -the script has been invoked once before. (Another way is with -the -override parameter accepted by all methods that generate -form elements.) - -param() also recognizes a named parameter style of calling described -in more detail later: - - $query->param(-name=>'foo',-values=>['an','array','of','values']); - - -or- - - $query->param(-name=>'foo',-value=>'the value'); - -=head2 APPENDING ADDITIONAL VALUES TO A NAMED PARAMETER: - - $query->append(-name=>'foo',-values=>['yet','more','values']); - -This adds a value or list of values to the named parameter. The -values are appended to the end of the parameter if it already exists. -Otherwise the parameter is created. Note that this method only -recognizes the named argument calling syntax. - -=head2 IMPORTING ALL PARAMETERS INTO A NAMESPACE: - - $query->import_names('R'); - -This creates a series of variables in the 'R' namespace. For example, -$R::foo, @R:foo. For keyword lists, a variable @R::keywords will appear. -If no namespace is given, this method will assume 'Q'. -WARNING: don't import anything into 'main'; this is a major security -risk!!!! - -NOTE 1: Variable names are transformed as necessary into legal Perl -variable names. All non-legal characters are transformed into -underscores. If you need to keep the original names, you should use -the param() method instead to access CGI variables by name. - -NOTE 2: In older versions, this method was called B. As of version 2.20, -this name has been removed completely to avoid conflict with the built-in -Perl module B operator. - -=head2 DELETING A PARAMETER COMPLETELY: - - $query->delete('foo','bar','baz'); - -This completely clears a list of parameters. It sometimes useful for -resetting parameters that you don't want passed down between script -invocations. - -If you are using the function call interface, use "Delete()" instead -to avoid conflicts with Perl's built-in delete operator. - -=head2 DELETING ALL PARAMETERS: - - $query->delete_all(); - -This clears the CGI object completely. It might be useful to ensure -that all the defaults are taken when you create a fill-out form. - -Use Delete_all() instead if you are using the function call interface. - -=head2 HANDLING NON-URLENCODED ARGUMENTS - - -If POSTed data is not of type application/x-www-form-urlencoded or -multipart/form-data, then the POSTed data will not be processed, but -instead be returned as-is in a parameter named POSTDATA. To retrieve -it, use code like this: - - my $data = $query->param('POSTDATA'); - -Likewise if PUTed data can be retrieved with code like this: - - my $data = $query->param('PUTDATA'); - -(If you don't know what the preceding means, don't worry about it. It -only affects people trying to use CGI for XML processing and other -specialized tasks.) - - -=head2 DIRECT ACCESS TO THE PARAMETER LIST: - - $q->param_fetch('address')->[1] = '1313 Mockingbird Lane'; - unshift @{$q->param_fetch(-name=>'address')},'George Munster'; - -If you need access to the parameter list in a way that isn't covered -by the methods given in the previous sections, you can obtain a direct -reference to it by -calling the B method with the name of the parameter. This -will return an array reference to the named parameter, which you then -can manipulate in any way you like. - -You can also use a named argument style using the B<-name> argument. - -=head2 FETCHING THE PARAMETER LIST AS A HASH: - - $params = $q->Vars; - print $params->{'address'}; - @foo = split("\0",$params->{'foo'}); - %params = $q->Vars; - - use CGI ':cgi-lib'; - $params = Vars; - -Many people want to fetch the entire parameter list as a hash in which -the keys are the names of the CGI parameters, and the values are the -parameters' values. The Vars() method does this. Called in a scalar -context, it returns the parameter list as a tied hash reference. -Changing a key changes the value of the parameter in the underlying -CGI parameter list. Called in a list context, it returns the -parameter list as an ordinary hash. This allows you to read the -contents of the parameter list, but not to change it. - -When using this, the thing you must watch out for are multivalued CGI -parameters. Because a hash cannot distinguish between scalar and -list context, multivalued parameters will be returned as a packed -string, separated by the "\0" (null) character. You must split this -packed string in order to get at the individual values. This is the -convention introduced long ago by Steve Brenner in his cgi-lib.pl -module for Perl version 4. - -If you wish to use Vars() as a function, import the I<:cgi-lib> set of -function calls (also see the section on CGI-LIB compatibility). - -=head2 SAVING THE STATE OF THE SCRIPT TO A FILE: - - $query->save(\*FILEHANDLE) - -This will write the current state of the form to the provided -filehandle. You can read it back in by providing a filehandle -to the new() method. Note that the filehandle can be a file, a pipe, -or whatever! - -The format of the saved file is: - - NAME1=VALUE1 - NAME1=VALUE1' - NAME2=VALUE2 - NAME3=VALUE3 - = - -Both name and value are URL escaped. Multi-valued CGI parameters are -represented as repeated names. A session record is delimited by a -single = symbol. You can write out multiple records and read them -back in with several calls to B. You can do this across several -sessions by opening the file in append mode, allowing you to create -primitive guest books, or to keep a history of users' queries. Here's -a short example of creating multiple session records: - - use CGI; - - open (OUT,'>>','test.out') || die; - $records = 5; - for (0..$records) { - my $q = CGI->new; - $q->param(-name=>'counter',-value=>$_); - $q->save(\*OUT); - } - close OUT; - - # reopen for reading - open (IN,'<','test.out') || die; - while (!eof(IN)) { - my $q = CGI->new(\*IN); - print $q->param('counter'),"\n"; - } - -The file format used for save/restore is identical to that used by the -Whitehead Genome Center's data exchange format "Boulderio", and can be -manipulated and even databased using Boulderio utilities. See - - http://stein.cshl.org/boulder/ - -for further details. - -If you wish to use this method from the function-oriented (non-OO) -interface, the exported name for this method is B. - -=head2 RETRIEVING CGI ERRORS - -Errors can occur while processing user input, particularly when -processing uploaded files. When these errors occur, CGI will stop -processing and return an empty parameter list. You can test for -the existence and nature of errors using the I function. -The error messages are formatted as HTTP status codes. You can either -incorporate the error text into an HTML page, or use it as the value -of the HTTP status: - - my $error = $q->cgi_error; - if ($error) { - print $q->header(-status=>$error), - $q->start_html('Problems'), - $q->h2('Request not processed'), - $q->strong($error); - exit 0; - } - -When using the function-oriented interface (see the next section), -errors may only occur the first time you call I. Be ready -for this! - -=head2 USING THE FUNCTION-ORIENTED INTERFACE - -To use the function-oriented interface, you must specify which CGI.pm -routines or sets of routines to import into your script's namespace. -There is a small overhead associated with this importation, but it -isn't much. - - use CGI ; - -The listed methods will be imported into the current package; you can -call them directly without creating a CGI object first. This example -shows how to import the B and B -methods, and then use them directly: - - use CGI 'param','header'; - print header('text/plain'); - $zipcode = param('zipcode'); - -More frequently, you'll import common sets of functions by referring -to the groups by name. All function sets are preceded with a ":" -character as in ":html3" (for tags defined in the HTML 3 standard). - -Here is a list of the function sets you can import: - -=over 4 - -=item B<:cgi> - -Import all CGI-handling methods, such as B, B -and the like. - -=item B<:form> - -Import all fill-out form generating methods, such as B. - -=item B<:html2> - -Import all methods that generate HTML 2.0 standard elements. - -=item B<:html3> - -Import all methods that generate HTML 3.0 elements (such as -, and ). - -=item B<:html4> - -Import all methods that generate HTML 4 elements (such as -, and ). - -=item B<:netscape> - -Import the , and
    tags. - -=item B<:html> - -Import all HTML-generating shortcuts (i.e. 'html2', 'html3', 'html4' and 'netscape') - -=item B<:standard> - -Import "standard" features, 'html2', 'html3', 'html4', 'form' and 'cgi'. - -=item B<:all> - -Import all the available methods. For the full list, see the CGI.pm -code, where the variable %EXPORT_TAGS is defined. - -=back - -If you import a function name that is not part of CGI.pm, the module -will treat it as a new HTML tag and generate the appropriate -subroutine. You can then use it like any other HTML tag. This is to -provide for the rapidly-evolving HTML "standard." For example, say -Microsoft comes out with a new tag called (which causes the -user's desktop to be flooded with a rotating gradient fill until his -machine reboots). You don't need to wait for a new version of CGI.pm -to start using it immediately: - - use CGI qw/:standard :html3 gradient/; - print gradient({-start=>'red',-end=>'blue'}); - -Note that in the interests of execution speed CGI.pm does B use -the standard L syntax for specifying load symbols. This may -change in the future. - -If you import any of the state-maintaining CGI or form-generating -methods, a default CGI object will be created and initialized -automatically the first time you use any of the methods that require -one to be present. This includes B, B, -B and the like. (If you need direct access to the CGI -object, you can find it in the global variable B<$CGI::Q>). By -importing CGI.pm methods, you can create visually elegant scripts: - - use CGI qw/:standard/; - print - header, - start_html('Simple Script'), - h1('Simple Script'), - start_form, - "What's your name? ",textfield('name'),p, - "What's the combination?", - checkbox_group(-name=>'words', - -values=>['eenie','meenie','minie','moe'], - -defaults=>['eenie','moe']),p, - "What's your favorite color?", - popup_menu(-name=>'color', - -values=>['red','green','blue','chartreuse']),p, - submit, - end_form, - hr,"\n"; - - if (param) { - print - "Your name is ",em(param('name')),p, - "The keywords are: ",em(join(", ",param('words'))),p, - "Your favorite color is ",em(param('color')),".\n"; - } - print end_html; - -=head2 PRAGMAS - -In addition to the function sets, there are a number of pragmas that -you can import. Pragmas, which are always preceded by a hyphen, -change the way that CGI.pm functions in various ways. Pragmas, -function sets, and individual functions can all be imported in the -same use() line. For example, the following use statement imports the -standard set of functions and enables debugging mode (pragma --debug): - - use CGI qw/:standard -debug/; - -The current list of pragmas is as follows: - -=over 4 - -=item -any - -When you I, then any method that the query object -doesn't recognize will be interpreted as a new HTML tag. This allows -you to support the next I HTML -extension. This lets you go wild with new and unsupported tags: - - use CGI qw(-any); - $q=CGI->new; - print $q->gradient({speed=>'fast',start=>'red',end=>'blue'}); - -Since using any causes any mistyped method name -to be interpreted as an HTML tag, use it with care or not at -all. - -=item -compile - -This causes the indicated autoloaded methods to be compiled up front, -rather than deferred to later. This is useful for scripts that run -for an extended period of time under FastCGI or mod_perl, and for -those destined to be crunched by Malcolm Beattie's Perl compiler. Use -it in conjunction with the methods or method families you plan to use. - - use CGI qw(-compile :standard :html3); - -or even - - use CGI qw(-compile :all); - -Note that using the -compile pragma in this way will always have -the effect of importing the compiled functions into the current -namespace. If you want to compile without importing use the -compile() method instead: - - use CGI(); - CGI->compile(); - -This is particularly useful in a mod_perl environment, in which you -might want to precompile all CGI routines in a startup script, and -then import the functions individually in each mod_perl script. - -=item -nosticky - -By default the CGI module implements a state-preserving behavior -called "sticky" fields. The way this works is that if you are -regenerating a form, the methods that generate the form field values -will interrogate param() to see if similarly-named parameters are -present in the query string. If they find a like-named parameter, they -will use it to set their default values. - -Sometimes this isn't what you want. The B<-nosticky> pragma prevents -this behavior. You can also selectively change the sticky behavior in -each element that you generate. - -=item -tabindex - -Automatically add tab index attributes to each form field. With this -option turned off, you can still add tab indexes manually by passing a --tabindex option to each field-generating method. - -=item -no_undef_params - -This keeps CGI.pm from including undef params in the parameter list. - -=item -no_xhtml - -By default, CGI.pm versions 2.69 and higher emit XHTML -(http://www.w3.org/TR/xhtml1/). The -no_xhtml pragma disables this -feature. Thanks to Michalis Kabrianis for this -feature. - -If start_html()'s -dtd parameter specifies an HTML 2.0, -3.2, 4.0 or 4.01 DTD, -XHTML will automatically be disabled without needing to use this -pragma. - -=item -utf8 - -This makes CGI.pm treat all parameters as UTF-8 strings. Use this with -care, as it will interfere with the processing of binary uploads. It -is better to manually select which fields are expected to return utf-8 -strings and convert them using code like this: - - use Encode; - my $arg = decode utf8=>param('foo'); - -=item -nph - -This makes CGI.pm produce a header appropriate for an NPH (no -parsed header) script. You may need to do other things as well -to tell the server that the script is NPH. See the discussion -of NPH scripts below. - -=item -newstyle_urls - -Separate the name=value pairs in CGI parameter query strings with -semicolons rather than ampersands. For example: - - ?name=fred;age=24;favorite_color=3 - -Semicolon-delimited query strings are always accepted, and will be emitted by -self_url() and query_string(). newstyle_urls became the default in version -2.64. - -=item -oldstyle_urls - -Separate the name=value pairs in CGI parameter query strings with -ampersands rather than semicolons. This is no longer the default. - -=item -autoload - -This overrides the autoloader so that any function in your program -that is not recognized is referred to CGI.pm for possible evaluation. -This allows you to use all the CGI.pm functions without adding them to -your symbol table, which is of concern for mod_perl users who are -worried about memory consumption. I when -I<-autoload> is in effect, you cannot use "poetry mode" -(functions without the parenthesis). Use I rather -than I
    , or add something like I -to the top of your script. - -=item -no_debug - -This turns off the command-line processing features. If you want to -run a CGI.pm script from the command line to produce HTML, and you -don't want it to read CGI parameters from the command line or STDIN, -then use this pragma: - - use CGI qw(-no_debug :standard); - -=item -debug - -This turns on full debugging. In addition to reading CGI arguments -from the command-line processing, CGI.pm will pause and try to read -arguments from STDIN, producing the message "(offline mode: enter -name=value pairs on standard input)" features. - -See the section on debugging for more details. - -=item -private_tempfiles - -CGI.pm can process uploaded file. Ordinarily it spools the uploaded -file to a temporary directory, then deletes the file when done. -However, this opens the risk of eavesdropping as described in the file -upload section. Another CGI script author could peek at this data -during the upload, even if it is confidential information. On Unix -systems, the -private_tempfiles pragma will cause the temporary file -to be unlinked as soon as it is opened and before any data is written -into it, reducing, but not eliminating the risk of eavesdropping -(there is still a potential race condition). To make life harder for -the attacker, the program chooses tempfile names by calculating a 32 -bit checksum of the incoming HTTP headers. - -To ensure that the temporary file cannot be read by other CGI scripts, -use suEXEC or a CGI wrapper program to run your script. The temporary -file is created with mode 0600 (neither world nor group readable). - -The temporary directory is selected using the following algorithm: - - 1. if $CGITempFile::TMPDIRECTORY is already set, use that - - 2. if the environment variable TMPDIR exists, use the location - indicated. - - 3. Otherwise try the locations /usr/tmp, /var/tmp, C:\temp, - /tmp, /temp, ::Temporary Items, and \WWW_ROOT. - -Each of these locations is checked that it is a directory and is -writable. If not, the algorithm tries the next choice. - -=back - -=head2 SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS - -Many of the methods generate HTML tags. As described below, tag -functions automatically generate both the opening and closing tags. -For example: - - print h1('Level 1 Header'); - -produces - -

    Level 1 Header

    - -There will be some times when you want to produce the start and end -tags yourself. In this case, you can use the form start_I -and end_I, as in: - - print start_h1,'Level 1 Header',end_h1; - -With a few exceptions (described below), start_I and -end_I functions are not generated automatically when you -I. However, you can specify the tags you want to generate -I functions for by putting an asterisk in front of their -name, or, alternatively, requesting either "start_I" or -"end_I" in the import list. - -Example: - - use CGI qw/:standard *table start_ul/; - -In this example, the following functions are generated in addition to -the standard ones: - -=over 4 - -=item 1. start_table() (generates a
    tag) - -=item 2. end_table() (generates a
    tag) - -=item 3. start_ul() (generates a
      tag) - -=item 4. end_ul() (generates a
    tag) - -=back - -=head1 GENERATING DYNAMIC DOCUMENTS - -Most of CGI.pm's functions deal with creating documents on the fly. -Generally you will produce the HTTP header first, followed by the -document itself. CGI.pm provides functions for generating HTTP -headers of various types as well as for generating HTML. For creating -GIF images, see the GD.pm module. - -Each of these functions produces a fragment of HTML or HTTP which you -can print out directly so that it displays in the browser window, -append to a string, or save to a file for later use. - -=head2 CREATING A STANDARD HTTP HEADER: - -Normally the first thing you will do in any CGI script is print out an -HTTP header. This tells the browser what type of document to expect, -and gives other optional information, such as the language, expiration -date, and whether to cache the document. The header can also be -manipulated for special purposes, such as server push and pay per view -pages. - - print header; - - -or- - - print header('image/gif'); - - -or- - - print header('text/html','204 No response'); - - -or- - - print header(-type=>'image/gif', - -nph=>1, - -status=>'402 Payment required', - -expires=>'+3d', - -cookie=>$cookie, - -charset=>'utf-7', - -attachment=>'foo.gif', - -Cost=>'$2.00'); - -header() returns the Content-type: header. You can provide your own -MIME type if you choose, otherwise it defaults to text/html. An -optional second parameter specifies the status code and a human-readable -message. For example, you can specify 204, "No response" to create a -script that tells the browser to do nothing at all. Note that RFC 2616 expects -the human-readable phase to be there as well as the numeric status code. - -The last example shows the named argument style for passing arguments -to the CGI methods using named parameters. Recognized parameters are -B<-type>, B<-status>, B<-expires>, and B<-cookie>. Any other named -parameters will be stripped of their initial hyphens and turned into -header fields, allowing you to specify any HTTP header you desire. -Internal underscores will be turned into hyphens: - - print header(-Content_length=>3002); - -Most browsers will not cache the output from CGI scripts. Every time -the browser reloads the page, the script is invoked anew. You can -change this behavior with the B<-expires> parameter. When you specify -an absolute or relative expiration interval with this parameter, some -browsers and proxy servers will cache the script's output until the -indicated expiration date. The following forms are all valid for the --expires field: - - +30s 30 seconds from now - +10m ten minutes from now - +1h one hour from now - -1d yesterday (i.e. "ASAP!") - now immediately - +3M in three months - +10y in ten years time - Thursday, 25-Apr-1999 00:40:33 GMT at the indicated time & date - -The B<-cookie> parameter generates a header that tells the browser to provide -a "magic cookie" during all subsequent transactions with your script. -Some cookies have a special format that includes interesting attributes -such as expiration time. Use the cookie() method to create and retrieve -session cookies. - -The B<-nph> parameter, if set to a true value, will issue the correct -headers to work with a NPH (no-parse-header) script. This is important -to use with certain servers that expect all their scripts to be NPH. - -The B<-charset> parameter can be used to control the character set -sent to the browser. If not provided, defaults to ISO-8859-1. As a -side effect, this sets the charset() method as well. - -The B<-attachment> parameter can be used to turn the page into an -attachment. Instead of displaying the page, some browsers will prompt -the user to save it to disk. The value of the argument is the -suggested name for the saved file. In order for this to work, you may -have to set the B<-type> to "application/octet-stream". - -The B<-p3p> parameter will add a P3P tag to the outgoing header. The -parameter can be an arrayref or a space-delimited string of P3P tags. -For example: - - print header(-p3p=>[qw(CAO DSP LAW CURa)]); - print header(-p3p=>'CAO DSP LAW CURa'); - -In either case, the outgoing header will be formatted as: - - P3P: policyref="/w3c/p3p.xml" cp="CAO DSP LAW CURa" - -CGI.pm will accept valid multi-line headers when each line is separated with a -CRLF value ("\r\n" on most platforms) followed by at least one space. For example: - - print header( -ingredients => "ham\r\n\seggs\r\n\sbacon" ); - -Invalid multi-line header input will trigger in an exception. When multi-line headers -are received, CGI.pm will always output them back as a single line, according to the -folding rules of RFC 2616: the newlines will be removed, while the white space remains. - -=head2 GENERATING A REDIRECTION HEADER - - print $q->redirect('http://somewhere.else/in/movie/land'); - -Sometimes you don't want to produce a document yourself, but simply -redirect the browser elsewhere, perhaps choosing a URL based on the -time of day or the identity of the user. - -The redirect() method redirects the browser to a different URL. If -you use redirection like this, you should B print out a header as -well. - -You should always use full URLs (including the http: or ftp: part) in -redirection requests. Relative URLs will not work correctly. - -You can also use named arguments: - - print $q->redirect( - -uri=>'http://somewhere.else/in/movie/land', - -nph=>1, - -status=>'301 Moved Permanently'); - -All names arguments recognized by header() are also recognized by -redirect(). However, most HTTP headers, including those generated by --cookie and -target, are ignored by the browser. - -The B<-nph> parameter, if set to a true value, will issue the correct -headers to work with a NPH (no-parse-header) script. This is important -to use with certain servers, such as Microsoft IIS, which -expect all their scripts to be NPH. - -The B<-status> parameter will set the status of the redirect. HTTP -defines three different possible redirection status codes: - - 301 Moved Permanently - 302 Found - 303 See Other - -The default if not specified is 302, which means "moved temporarily." -You may change the status to another status code if you wish. Be -advised that changing the status to anything other than 301, 302 or -303 will probably break redirection. - -Note that the human-readable phrase is also expected to be present to conform -with RFC 2616, section 6.1. - -=head2 CREATING THE HTML DOCUMENT HEADER - - print start_html(-title=>'Secrets of the Pyramids', - -author=>'fred@capricorn.org', - -base=>'true', - -target=>'_blank', - -meta=>{'keywords'=>'pharaoh secret mummy', - 'copyright'=>'copyright 1996 King Tut'}, - -style=>{'src'=>'/styles/style1.css'}, - -BGCOLOR=>'blue'); - -The start_html() routine creates the top of the -page, along with a lot of optional information that controls the -page's appearance and behavior. - -This method returns a canned HTML header and the opening tag. -All parameters are optional. In the named parameter form, recognized -parameters are -title, -author, -base, -xbase, -dtd, -lang and -target -(see below for the explanation). Any additional parameters you -provide, such as the unofficial BGCOLOR attribute, are added -to the tag. Additional parameters must be proceeded by a -hyphen. - -The argument B<-xbase> allows you to provide an HREF for the tag -different from the current location, as in - - -xbase=>"http://home.mcom.com/" - -All relative links will be interpreted relative to this tag. - -The argument B<-target> allows you to provide a default target frame -for all the links and fill-out forms on the page. B - - -target=>"answer_window" - -All relative links will be interpreted relative to this tag. -You add arbitrary meta information to the header with the B<-meta> -argument. This argument expects a reference to a hash -containing name/value pairs of meta information. These will be turned -into a series of header tags that look something like this: - - - - -To create an HTTP-EQUIV type of tag, use B<-head>, described -below. - -The B<-style> argument is used to incorporate cascading stylesheets -into your code. See the section on CASCADING STYLESHEETS for more -information. - -The B<-lang> argument is used to incorporate a language attribute into -the tag. For example: - - print $q->start_html(-lang=>'fr-CA'); - -The default if not specified is "en-US" for US English, unless the --dtd parameter specifies an HTML 2.0 or 3.2 DTD, in which case the -lang attribute is left off. You can force the lang attribute to left -off in other cases by passing an empty string (-lang=>''). - -The B<-encoding> argument can be used to specify the character set for -XHTML. It defaults to iso-8859-1 if not specified. - -The B<-dtd> argument can be used to specify a public DTD identifier string. For example: - - -dtd => '-//W3C//DTD HTML 4.01 Transitional//EN') - -Alternatively, it can take public and system DTD identifiers as an array: - - dtd => [ '-//W3C//DTD HTML 4.01 Transitional//EN', 'http://www.w3.org/TR/html4/loose.dtd' ] - -For the public DTD identifier to be considered, it must be valid. Otherwise it -will be replaced by the default DTD. If the public DTD contains 'XHTML', CGI.pm -will emit XML. - -The B<-declare_xml> argument, when used in conjunction with XHTML, -will put a declaration at the top of the HTML header. The sole -purpose of this declaration is to declare the character set -encoding. In the absence of -declare_xml, the output HTML will contain -a tag that specifies the encoding, allowing the HTML to pass -most validators. The default for -declare_xml is false. - -You can place other arbitrary HTML elements to the section with the -B<-head> tag. For example, to place a element in the -head section, use this: - - print start_html(-head=>Link({-rel=>'shortcut icon', - -href=>'favicon.ico'})); - -To incorporate multiple HTML elements into the section, just pass an -array reference: - - print start_html(-head=>[ - Link({-rel=>'next', - -href=>'http://www.capricorn.com/s2.html'}), - Link({-rel=>'previous', - -href=>'http://www.capricorn.com/s1.html'}) - ] - ); - -And here's how to create an HTTP-EQUIV tag: - - print start_html(-head=>meta({-http_equiv => 'Content-Type', - -content => 'text/html'})) - - -JAVASCRIPTING: The B<-script>, B<-noScript>, B<-onLoad>, -B<-onMouseOver>, B<-onMouseOut> and B<-onUnload> parameters are used -to add JavaScript calls to your pages. B<-script> should -point to a block of text containing JavaScript function definitions. -This block will be placed within a \n"; - warningsToBrowser(1); # re-enable warnings - -Note: In this respect warningsToBrowser() differs fundamentally from -fatalsToBrowser(), which you should never call yourself! - -=head1 OVERRIDING THE NAME OF THE PROGRAM - -CGI::Carp includes the name of the program that generated the error or -warning in the messages written to the log and the browser window. -Sometimes, Perl can get confused about what the actual name of the -executed program was. In these cases, you can override the program -name that CGI::Carp will use for all messages. - -The quick way to do that is to tell CGI::Carp the name of the program -in its use statement. You can do that by adding -"name=cgi_carp_log_name" to your "use" statement. For example: - - use CGI::Carp qw(name=cgi_carp_log_name); - -. If you want to change the program name partway through the program, -you can use the C function instead. It is not -exported by default, you must import it explicitly by saying - - use CGI::Carp qw(set_progname); - -Once you've done that, you can change the logged name of the program -at any time by calling - - set_progname(new_program_name); - -You can set the program back to the default by calling - - set_progname(undef); - -Note that this override doesn't happen until after the program has -compiled, so any compile-time errors will still show up with the -non-overridden program name - -=head1 CHANGE LOG - -3.51 Added $CGI::Carp::TO_BROWSER - -1.29 Patch from Peter Whaite to fix the unfixable problem of CGI::Carp - not behaving correctly in an eval() context. - -1.05 carpout() added and minor corrections by Marc Hedlund - on 11/26/95. - -1.06 fatalsToBrowser() no longer aborts for fatal errors within - eval() statements. - -1.08 set_message() added and carpout() expanded to allow for FileHandle - objects. - -1.09 set_message() now allows users to pass a code REFERENCE for - really custom error messages. croak and carp are now - exported by default. Thanks to Gunther Birznieks for the - patches. - -1.10 Patch from Chris Dean (ctdean@cogit.com) to allow - module to run correctly under mod_perl. - -1.11 Changed order of > and < escapes. - -1.12 Changed die() on line 217 to CORE::die to avoid B<-w> warning. - -1.13 Added cluck() to make the module orthogonal with Carp. - More mod_perl related fixes. - -1.20 Patch from Ilmari Karonen (perl@itz.pp.sci.fi): Added - warningsToBrowser(). Replaced tags with
     in
    -     fatalsToBrowser() output.
    -
    -1.23 ineval() now checks both $^S and inspects the message for the "eval" pattern
    -     (hack alert!) in order to accommodate various combinations of Perl and
    -     mod_perl.
    -
    -1.24 Patch from Scott Gifford (sgifford@suspectclass.com): Add support
    -     for overriding program name.
    -
    -1.26 Replaced CORE::GLOBAL::die with the evil $SIG{__DIE__} because the
    -     former isn't working in some people's hands.  There is no such thing
    -     as reliable exception handling in Perl.
    -
    -1.27 Replaced tell STDOUT with bytes=tell STDOUT.
    -
    -=head1 AUTHORS
    -
    -Copyright 1995-2002, Lincoln D. Stein.  All rights reserved.  
    -
    -This library is free software; you can redistribute it and/or modify
    -it under the same terms as Perl itself.
    -
    -=head1 SEE ALSO
    -
    -L, L, L, L,
    -L, L, L.
    -
    -=cut
    -
    -require 5.000;
    -use Exporter;
    -#use Carp;
    -BEGIN { 
    -  require Carp; 
    -  *CORE::GLOBAL::die = \&CGI::Carp::die;
    -}
    -
    -use File::Spec;
    -
    -@ISA = qw(Exporter);
    -@EXPORT = qw(confess croak carp);
    -@EXPORT_OK = qw(carpout fatalsToBrowser warningsToBrowser wrap set_message set_die_handler set_progname cluck ^name= die);
    -
    -$main::SIG{__WARN__}=\&CGI::Carp::warn;
    -
    -$CGI::Carp::VERSION     = '3.64';
    -$CGI::Carp::CUSTOM_MSG  = undef;
    -$CGI::Carp::DIE_HANDLER = undef;
    -$CGI::Carp::TO_BROWSER  = 1;
    -
    -
    -# fancy import routine detects and handles 'errorWrap' specially.
    -sub import {
    -    my $pkg = shift;
    -    my(%routines);
    -    my(@name);
    -    if (@name=grep(/^name=/,@_))
    -      {
    -        my($n) = (split(/=/,$name[0]))[1];
    -        set_progname($n);
    -        @_=grep(!/^name=/,@_);
    -      }
    -
    -    grep($routines{$_}++,@_,@EXPORT);
    -    $WRAP++ if $routines{'fatalsToBrowser'} || $routines{'wrap'};
    -    $WARN++ if $routines{'warningsToBrowser'};
    -    my($oldlevel) = $Exporter::ExportLevel;
    -    $Exporter::ExportLevel = 1;
    -    Exporter::import($pkg,keys %routines);
    -    $Exporter::ExportLevel = $oldlevel;
    -    $main::SIG{__DIE__} =\&CGI::Carp::die if $routines{'fatalsToBrowser'};
    -#    $pkg->export('CORE::GLOBAL','die');
    -}
    -
    -# These are the originals
    -sub realwarn { CORE::warn(@_); }
    -sub realdie { CORE::die(@_); }
    -
    -sub id {
    -    my $level = shift;
    -    my($pack,$file,$line,$sub) = caller($level);
    -    my($dev,$dirs,$id) = File::Spec->splitpath($file);
    -    return ($file,$line,$id);
    -}
    -
    -sub stamp {
    -    my $time = scalar(localtime);
    -    my $frame = 0;
    -    my ($id,$pack,$file,$dev,$dirs);
    -    if (defined($CGI::Carp::PROGNAME)) {
    -        $id = $CGI::Carp::PROGNAME;
    -    } else {
    -        do {
    -  	  $id = $file;
    -	  ($pack,$file) = caller($frame++);
    -        } until !$file;
    -    }
    -    ($dev,$dirs,$id) = File::Spec->splitpath($id);
    -    return "[$time] $id: ";
    -}
    -
    -sub set_progname {
    -    $CGI::Carp::PROGNAME = shift;
    -    return $CGI::Carp::PROGNAME;
    -}
    -
    -
    -sub warn {
    -    my $message = shift;
    -    my($file,$line,$id) = id(1);
    -    $message .= " at $file line $line.\n" unless $message=~/\n$/;
    -    _warn($message) if $WARN;
    -    my $stamp = stamp;
    -    $message=~s/^/$stamp/gm;
    -    realwarn $message;
    -}
    -
    -sub _warn {
    -    my $msg = shift;
    -    if ($EMIT_WARNINGS) {
    -	# We need to mangle the message a bit to make it a valid HTML
    -	# comment.  This is done by substituting similar-looking ISO
    -	# 8859-1 characters for <, > and -.  This is a hack.
    -	$msg =~ tr/<>-/\253\273\255/;
    -	chomp $msg;
    -	print STDOUT "\n";
    -    } else {
    -	push @WARNINGS, $msg;
    -    }
    -}
    -
    -
    -# The mod_perl package Apache::Registry loads CGI programs by calling
    -# eval.  These evals don't count when looking at the stack backtrace.
    -sub _longmess {
    -    my $message = Carp::longmess();
    -    $message =~ s,eval[^\n]+(ModPerl|Apache)/(?:Registry|Dispatch)\w*\.pm.*,,s
    -        if exists $ENV{MOD_PERL};
    -    return $message;
    -}
    -
    -sub ineval {
    -  (exists $ENV{MOD_PERL} ? 0 : $^S) || _longmess() =~ /eval [\{\']/m
    -}
    -
    -sub die {
    -    # if no argument is passed, propagate $@ like
    -    # the real die
    -  my ($arg,@rest) = @_ ? @_ 
    -                  : $@ ? "$@\t...propagated" 
    -                  :      "Died"
    -                  ;
    -
    -  &$DIE_HANDLER($arg,@rest) if $DIE_HANDLER;
    -
    -  # the "$arg" is done on purpose!
    -  # if called as die( $object, 'string' ),
    -  # all is stringified, just like with
    -  # the real 'die'
    -  $arg = join '' => "$arg", @rest if @rest;
    -
    -  my($file,$line,$id) = id(1);
    -
    -  $arg .= " at $file line $line.\n" unless ref $arg or $arg=~/\n$/;
    -
    -  realdie $arg           if ineval();
    -  &fatalsToBrowser($arg) if ($WRAP and $CGI::Carp::TO_BROWSER);
    -
    -  $arg=~s/^/ stamp() /gme if $arg =~ /\n$/ or not exists $ENV{MOD_PERL};
    -
    -  $arg .= "\n" unless $arg =~ /\n$/;
    -
    -  realdie $arg;
    -}
    -
    -sub set_message {
    -    $CGI::Carp::CUSTOM_MSG = shift;
    -    return $CGI::Carp::CUSTOM_MSG;
    -}
    -
    -sub set_die_handler {
    -
    -    my ($handler) = shift;
    -    
    -    #setting SIG{__DIE__} here is necessary to catch runtime
    -    #errors which are not called by literally saying "die",
    -    #such as the line "undef->explode();". however, doing this
    -    #will interfere with fatalsToBrowser, which also sets 
    -    #SIG{__DIE__} in the import() function above (or the 
    -    #import() function above may interfere with this). for
    -    #this reason, you should choose to either set the die
    -    #handler here, or use fatalsToBrowser, not both. 
    -    $main::SIG{__DIE__} = $handler;
    -    
    -    $CGI::Carp::DIE_HANDLER = $handler; 
    -    
    -    return $CGI::Carp::DIE_HANDLER;
    -}
    -
    -sub confess { CGI::Carp::die Carp::longmess @_; }
    -sub croak   { CGI::Carp::die Carp::shortmess @_; }
    -sub carp    { CGI::Carp::warn Carp::shortmess @_; }
    -sub cluck   { CGI::Carp::warn Carp::longmess @_; }
    -
    -# We have to be ready to accept a filehandle as a reference
    -# or a string.
    -sub carpout {
    -    my($in) = @_;
    -    my($no) = fileno(to_filehandle($in));
    -    realdie("Invalid filehandle $in\n") unless defined $no;
    -    
    -    open(SAVEERR, ">&STDERR");
    -    open(STDERR, ">&$no") or 
    -	( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) );
    -}
    -
    -sub warningsToBrowser {
    -    $EMIT_WARNINGS = @_ ? shift : 1;
    -    _warn(shift @WARNINGS) while $EMIT_WARNINGS and @WARNINGS;
    -}
    -
    -# headers
    -sub fatalsToBrowser {
    -  my $msg = shift;
    -
    -  $msg = "$msg" if ref $msg;
    -
    -  $msg=~s/&/&/g;
    -  $msg=~s/>/>/g;
    -  $msg=~s/$ENV{SERVER_ADMIN})] :
    -      "this site's webmaster";
    -  my ($outer_message) = <Software error:
    -
    $msg
    -

    -$outer_message -

    -END - ; - - if ($mod_perl) { - my $r; - if ($ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) { - $mod_perl = 2; - require Apache2::RequestRec; - require Apache2::RequestIO; - require Apache2::RequestUtil; - require APR::Pool; - require ModPerl::Util; - require Apache2::Response; - $r = Apache2::RequestUtil->request; - } - else { - $r = Apache->request; - } - # If bytes have already been sent, then - # we print the message out directly. - # Otherwise we make a custom error - # handler to produce the doc for us. - if ($r->bytes_sent) { - $r->print($mess); - $mod_perl == 2 ? ModPerl::Util::exit(0) : $r->exit; - } else { - # MSIE won't display a custom 500 response unless it is >512 bytes! - if ($ENV{HTTP_USER_AGENT} =~ /MSIE/) { - $mess = "\n$mess"; - } - $r->custom_response(500,$mess); - } - } else { - my $bytes_written = eval{tell STDOUT}; - if (defined $bytes_written && $bytes_written > 0) { - print STDOUT $mess; - } - else { - print STDOUT "Status: 500\n"; - print STDOUT "Content-type: text/html\n\n"; - print STDOUT $mess; - } - } - - warningsToBrowser(1); # emit warnings before dying -} - -# Cut and paste from CGI.pm so that we don't have the overhead of -# always loading the entire CGI module. -sub to_filehandle { - my $thingy = shift; - return undef unless $thingy; - return $thingy if UNIVERSAL::isa($thingy,'GLOB'); - return $thingy if UNIVERSAL::isa($thingy,'FileHandle'); - if (!ref($thingy)) { - my $caller = 1; - while (my $package = caller($caller++)) { - my($tmp) = $thingy=~/[\':]/ ? $thingy : "$package\:\:$thingy"; - return $tmp if defined(fileno($tmp)); - } - } - return undef; -} - -1; diff --git a/Master/tlpkg/tlperl/lib/CGI/Cookie.pm b/Master/tlpkg/tlperl/lib/CGI/Cookie.pm deleted file mode 100644 index 5cc2dc20038..00000000000 --- a/Master/tlpkg/tlperl/lib/CGI/Cookie.pm +++ /dev/null @@ -1,541 +0,0 @@ -package CGI::Cookie; - -use strict; -use warnings; - -use if $] >= 5.019, 'deprecate'; - -# See the bottom of this file for the POD documentation. Search for the -# string '=head'. - -# You can run this file through either pod2man or pod2html to produce pretty -# documentation in manual or html file format (these utilities are part of the -# Perl 5 distribution). - -# Copyright 1995-1999, Lincoln D. Stein. All rights reserved. -# It may be used and modified freely, but I do request that this copyright -# notice remain attached to the file. You may modify this module as you -# wish, but if you redistribute a modified version, please attach a note -# listing the modifications you have made. - -our $VERSION='1.31'; - -use CGI::Util qw(rearrange unescape escape); -use overload '""' => \&as_string, 'cmp' => \&compare, 'fallback' => 1; - -my $PERLEX = 0; -# Turn on special checking for ActiveState's PerlEx -$PERLEX++ if defined($ENV{'GATEWAY_INTERFACE'}) && $ENV{'GATEWAY_INTERFACE'} =~ /^CGI-PerlEx/; - -# Turn on special checking for mod_perl -# PerlEx::DBI tries to fool DBI by setting MOD_PERL -my $MOD_PERL = 0; -if (exists $ENV{MOD_PERL} && ! $PERLEX) { - if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) { - $MOD_PERL = 2; - require Apache2::RequestUtil; - require APR::Table; - } else { - $MOD_PERL = 1; - require Apache; - } -} - -# fetch a list of cookies from the environment and -# return as a hash. the cookies are parsed as normal -# escaped URL data. -sub fetch { - my $class = shift; - my $raw_cookie = get_raw_cookie(@_) or return; - return $class->parse($raw_cookie); -} - -# Fetch a list of cookies from the environment or the incoming headers and -# return as a hash. The cookie values are not unescaped or altered in any way. - sub raw_fetch { - my $class = shift; - my $raw_cookie = get_raw_cookie(@_) or return; - my %results; - my($key,$value); - - my @pairs = split("[;,] ?",$raw_cookie); - for my $pair ( @pairs ) { - $pair =~ s/^\s+|\s+$//g; # trim leading trailing whitespace - my ( $key, $value ) = split "=", $pair; - - $value = defined $value ? $value : ''; - $results{$key} = $value; - } - return wantarray ? %results : \%results; -} - -sub get_raw_cookie { - my $r = shift; - $r ||= eval { $MOD_PERL == 2 ? - Apache2::RequestUtil->request() : - Apache->request } if $MOD_PERL; - - return $r->headers_in->{'Cookie'} if $r; - - die "Run $r->subprocess_env; before calling fetch()" - if $MOD_PERL and !exists $ENV{REQUEST_METHOD}; - - return $ENV{HTTP_COOKIE} || $ENV{COOKIE}; -} - - -sub parse { - my ($self,$raw_cookie) = @_; - return wantarray ? () : {} unless $raw_cookie; - - my %results; - - my @pairs = split("[;,] ?",$raw_cookie); - for (@pairs) { - s/^\s+//; - s/\s+$//; - - my($key,$value) = split("=",$_,2); - - # Some foreign cookies are not in name=value format, so ignore - # them. - next if !defined($value); - my @values = (); - if ($value ne '') { - @values = map unescape($_),split(/[&;]/,$value.'&dmy'); - pop @values; - } - $key = unescape($key); - # A bug in Netscape can cause several cookies with same name to - # appear. The FIRST one in HTTP_COOKIE is the most recent version. - $results{$key} ||= $self->new(-name=>$key,-value=>\@values); - } - return wantarray ? %results : \%results; -} - -sub new { - my ( $class, @params ) = @_; - $class = ref( $class ) || $class; - # Ignore mod_perl request object--compatibility with Apache::Cookie. - shift if ref $params[0] - && eval { $params[0]->isa('Apache::Request::Req') || $params[0]->isa('Apache') }; - my ( $name, $value, $path, $domain, $secure, $expires, $max_age, $httponly ) - = rearrange( - [ - 'NAME', [ 'VALUE', 'VALUES' ], - 'PATH', 'DOMAIN', - 'SECURE', 'EXPIRES', - 'MAX-AGE','HTTPONLY' - ], - @params - ); - return undef unless defined $name and defined $value; - my $self = {}; - bless $self, $class; - $self->name( $name ); - $self->value( $value ); - $path ||= "/"; - $self->path( $path ) if defined $path; - $self->domain( $domain ) if defined $domain; - $self->secure( $secure ) if defined $secure; - $self->expires( $expires ) if defined $expires; - $self->max_age($expires) if defined $max_age; - $self->httponly( $httponly ) if defined $httponly; - return $self; -} - -sub as_string { - my $self = shift; - return "" unless $self->name; - - no warnings; # some things may be undefined, that's OK. - - my $name = escape( $self->name ); - my $value = join "&", map { escape($_) } $self->value; - my @cookie = ( "$name=$value" ); - - push @cookie,"domain=".$self->domain if $self->domain; - push @cookie,"path=".$self->path if $self->path; - push @cookie,"expires=".$self->expires if $self->expires; - push @cookie,"max-age=".$self->max_age if $self->max_age; - push @cookie,"secure" if $self->secure; - push @cookie,"HttpOnly" if $self->httponly; - - return join "; ", @cookie; -} - -sub compare { - my ( $self, $value ) = @_; - return "$self" cmp $value; -} - -sub bake { - my ($self, $r) = @_; - - $r ||= eval { - $MOD_PERL == 2 - ? Apache2::RequestUtil->request() - : Apache->request - } if $MOD_PERL; - if ($r) { - $r->headers_out->add('Set-Cookie' => $self->as_string); - } else { - require CGI; - print CGI::header(-cookie => $self); - } - -} - -# accessors -sub name { - my ( $self, $name ) = @_; - $self->{'name'} = $name if defined $name; - return $self->{'name'}; -} - -sub value { - my ( $self, $value ) = @_; - if ( defined $value ) { - my @values - = ref $value eq 'ARRAY' ? @$value - : ref $value eq 'HASH' ? %$value - : ( $value ); - $self->{'value'} = [@values]; - } - return wantarray ? @{ $self->{'value'} } : $self->{'value'}->[0]; -} - -sub domain { - my ( $self, $domain ) = @_; - $self->{'domain'} = lc $domain if defined $domain; - return $self->{'domain'}; -} - -sub secure { - my ( $self, $secure ) = @_; - $self->{'secure'} = $secure if defined $secure; - return $self->{'secure'}; -} - -sub expires { - my ( $self, $expires ) = @_; - $self->{'expires'} = CGI::Util::expires($expires,'cookie') if defined $expires; - return $self->{'expires'}; -} - -sub max_age { - my ( $self, $max_age ) = @_; - $self->{'max-age'} = CGI::Util::expire_calc($max_age)-time() if defined $max_age; - return $self->{'max-age'}; -} - -sub path { - my ( $self, $path ) = @_; - $self->{'path'} = $path if defined $path; - return $self->{'path'}; -} - - -sub httponly { # HttpOnly - my ( $self, $httponly ) = @_; - $self->{'httponly'} = $httponly if defined $httponly; - return $self->{'httponly'}; -} - -1; - -=head1 NAME - -CGI::Cookie - Interface to HTTP Cookies - -=head1 SYNOPSIS - - use CGI qw/:standard/; - use CGI::Cookie; - - # Create new cookies and send them - $cookie1 = CGI::Cookie->new(-name=>'ID',-value=>123456); - $cookie2 = CGI::Cookie->new(-name=>'preferences', - -value=>{ font => Helvetica, - size => 12 } - ); - print header(-cookie=>[$cookie1,$cookie2]); - - # fetch existing cookies - %cookies = CGI::Cookie->fetch; - $id = $cookies{'ID'}->value; - - # create cookies returned from an external source - %cookies = CGI::Cookie->parse($ENV{COOKIE}); - -=head1 DESCRIPTION - -CGI::Cookie is an interface to HTTP/1.1 cookies, an -innovation that allows Web servers to store persistent information on -the browser's side of the connection. Although CGI::Cookie is -intended to be used in conjunction with CGI.pm (and is in fact used by -it internally), you can use this module independently. - -For full information on cookies see - - http://tools.ietf.org/html/rfc2109 - http://tools.ietf.org/html/rfc2965 - http://tools.ietf.org/html/draft-ietf-httpstate-cookie - -=head1 USING CGI::Cookie - -CGI::Cookie is object oriented. Each cookie object has a name and a -value. The name is any scalar value. The value is any scalar or -array value (associative arrays are also allowed). Cookies also have -several optional attributes, including: - -=over 4 - -=item B<1. expiration date> - -The expiration date tells the browser how long to hang on to the -cookie. If the cookie specifies an expiration date in the future, the -browser will store the cookie information in a disk file and return it -to the server every time the user reconnects (until the expiration -date is reached). If the cookie species an expiration date in the -past, the browser will remove the cookie from the disk file. If the -expiration date is not specified, the cookie will persist only until -the user quits the browser. - -=item B<2. domain> - -This is a partial or complete domain name for which the cookie is -valid. The browser will return the cookie to any host that matches -the partial domain name. For example, if you specify a domain name -of ".capricorn.com", then the browser will return the cookie to -Web servers running on any of the machines "www.capricorn.com", -"ftp.capricorn.com", "feckless.capricorn.com", etc. Domain names -must contain at least two periods to prevent attempts to match -on top level domains like ".edu". If no domain is specified, then -the browser will only return the cookie to servers on the host the -cookie originated from. - -=item B<3. path> - -If you provide a cookie path attribute, the browser will check it -against your script's URL before returning the cookie. For example, -if you specify the path "/cgi-bin", then the cookie will be returned -to each of the scripts "/cgi-bin/tally.pl", "/cgi-bin/order.pl", and -"/cgi-bin/customer_service/complain.pl", but not to the script -"/cgi-private/site_admin.pl". By default, the path is set to "/", so -that all scripts at your site will receive the cookie. - -=item B<4. secure flag> - -If the "secure" attribute is set, the cookie will only be sent to your -script if the CGI request is occurring on a secure channel, such as SSL. - -=item B<5. httponly flag> - -If the "httponly" attribute is set, the cookie will only be accessible -through HTTP Requests. This cookie will be inaccessible via JavaScript -(to prevent XSS attacks). - -This feature is supported by nearly all modern browsers. - -See these URLs for more information: - - http://msdn.microsoft.com/en-us/library/ms533046.aspx - http://www.browserscope.org/?category=security&v=top - -=back - -=head2 Creating New Cookies - - my $c = CGI::Cookie->new(-name => 'foo', - -value => 'bar', - -expires => '+3M', - -domain => '.capricorn.com', - -path => '/cgi-bin/database', - -secure => 1 - ); - -Create cookies from scratch with the B method. The B<-name> and -B<-value> parameters are required. The name must be a scalar value. -The value can be a scalar, an array reference, or a hash reference. -(At some point in the future cookies will support one of the Perl -object serialization protocols for full generality). - -B<-expires> accepts any of the relative or absolute date formats -recognized by CGI.pm, for example "+3M" for three months in the -future. See CGI.pm's documentation for details. - -B<-max-age> accepts the same data formats as B<< -expires >>, but sets a -relative value instead of an absolute like B<< -expires >>. This is intended to be -more secure since a clock could be changed to fake an absolute time. In -practice, as of 2011, C<< -max-age >> still does not enjoy the widespread support -that C<< -expires >> has. You can set both, and browsers that support -C<< -max-age >> should ignore the C<< Expires >> header. The drawback -to this approach is the bit of bandwidth for sending an extra header on each cookie. - -B<-domain> points to a domain name or to a fully qualified host name. -If not specified, the cookie will be returned only to the Web server -that created it. - -B<-path> points to a partial URL on the current server. The cookie -will be returned to all URLs beginning with the specified path. If -not specified, it defaults to '/', which returns the cookie to all -pages at your site. - -B<-secure> if set to a true value instructs the browser to return the -cookie only when a cryptographic protocol is in use. - -B<-httponly> if set to a true value, the cookie will not be accessible -via JavaScript. - -For compatibility with Apache::Cookie, you may optionally pass in -a mod_perl request object as the first argument to C. It will -simply be ignored: - - my $c = CGI::Cookie->new($r, - -name => 'foo', - -value => ['bar','baz']); - -=head2 Sending the Cookie to the Browser - -The simplest way to send a cookie to the browser is by calling the bake() -method: - - $c->bake; - -This will print the Set-Cookie HTTP header to STDOUT using CGI.pm. CGI.pm -will be loaded for this purpose if it is not already. Otherwise CGI.pm is not -required or used by this module. - -Under mod_perl, pass in an Apache request object: - - $c->bake($r); - -If you want to set the cookie yourself, Within a CGI script you can send -a cookie to the browser by creating one or more Set-Cookie: fields in the -HTTP header. Here is a typical sequence: - - my $c = CGI::Cookie->new(-name => 'foo', - -value => ['bar','baz'], - -expires => '+3M'); - - print "Set-Cookie: $c\n"; - print "Content-Type: text/html\n\n"; - -To send more than one cookie, create several Set-Cookie: fields. - -If you are using CGI.pm, you send cookies by providing a -cookie -argument to the header() method: - - print header(-cookie=>$c); - -Mod_perl users can set cookies using the request object's header_out() -method: - - $r->headers_out->set('Set-Cookie' => $c); - -Internally, Cookie overloads the "" operator to call its as_string() -method when incorporated into the HTTP header. as_string() turns the -Cookie's internal representation into an RFC-compliant text -representation. You may call as_string() yourself if you prefer: - - print "Set-Cookie: ",$c->as_string,"\n"; - -=head2 Recovering Previous Cookies - - %cookies = CGI::Cookie->fetch; - -B returns an associative array consisting of all cookies -returned by the browser. The keys of the array are the cookie names. You -can iterate through the cookies this way: - - %cookies = CGI::Cookie->fetch; - for (keys %cookies) { - do_something($cookies{$_}); - } - -In a scalar context, fetch() returns a hash reference, which may be more -efficient if you are manipulating multiple cookies. - -CGI.pm uses the URL escaping methods to save and restore reserved characters -in its cookies. If you are trying to retrieve a cookie set by a foreign server, -this escaping method may trip you up. Use raw_fetch() instead, which has the -same semantics as fetch(), but performs no unescaping. - -You may also retrieve cookies that were stored in some external -form using the parse() class method: - - $COOKIES = `cat /usr/tmp/Cookie_stash`; - %cookies = CGI::Cookie->parse($COOKIES); - -If you are in a mod_perl environment, you can save some overhead by -passing the request object to fetch() like this: - - CGI::Cookie->fetch($r); - -If the value passed to parse() is undefined, an empty array will returned in list -context, and an empty hashref will be returned in scalar context. - -=head2 Manipulating Cookies - -Cookie objects have a series of accessor methods to get and set cookie -attributes. Each accessor has a similar syntax. Called without -arguments, the accessor returns the current value of the attribute. -Called with an argument, the accessor changes the attribute and -returns its new value. - -=over 4 - -=item B - -Get or set the cookie's name. Example: - - $name = $c->name; - $new_name = $c->name('fred'); - -=item B - -Get or set the cookie's value. Example: - - $value = $c->value; - @new_value = $c->value(['a','b','c','d']); - -B is context sensitive. In a list context it will return -the current value of the cookie as an array. In a scalar context it -will return the B value of a multivalued cookie. - -=item B - -Get or set the cookie's domain. - -=item B - -Get or set the cookie's path. - -=item B - -Get or set the cookie's expiration time. - -=back - - -=head1 AUTHOR INFORMATION - -Copyright 1997-1998, Lincoln D. Stein. All rights reserved. - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -Address bug reports and comments to: lstein@cshl.org - -=head1 BUGS - -This section intentionally left blank. - -=head1 SEE ALSO - -L, L - -L, L - -=cut diff --git a/Master/tlpkg/tlperl/lib/CGI/Fast.pm b/Master/tlpkg/tlperl/lib/CGI/Fast.pm deleted file mode 100644 index 01f7359c1c2..00000000000 --- a/Master/tlpkg/tlperl/lib/CGI/Fast.pm +++ /dev/null @@ -1,221 +0,0 @@ -package CGI::Fast; -use strict; -use if $] >= 5.019, 'deprecate'; - -# A way to say "use warnings" that's compatible with even older perls. -# making it local will not affect the code that loads this module -# and since we're not in a BLOCK, warnings are enabled until the EOF -local $^W = 1; - -# See the bottom of this file for the POD documentation. Search for the -# string '=head'. - -# You can run this file through either pod2man or pod2html to produce pretty -# documentation in manual or html file format (these utilities are part of the -# Perl 5 distribution). - -# Copyright 1995,1996, Lincoln D. Stein. All rights reserved. -# It may be used and modified freely, but I do request that this copyright -# notice remain attached to the file. You may modify this module as you -# wish, but if you redistribute a modified version, please attach a note -# listing the modifications you have made. - -$CGI::Fast::VERSION='1.10'; - -use CGI; -use FCGI; -# use vars works like "our", but is compatible with older Perls. -use vars qw( - @ISA - $ignore -); -@ISA = ('CGI'); - -# workaround for known bug in libfcgi -while (($ignore) = each %ENV) { } - -# override the initialization behavior so that -# state is NOT maintained between invocations -sub save_request { - # no-op -} - -# If ENV{FCGI_SOCKET_PATH} is specified, we maintain a FCGI Request handle -# in this package variable. -use vars qw($Ext_Request); -BEGIN { - # If ENV{FCGI_SOCKET_PATH} is given, explicitly open the socket. - if ($ENV{FCGI_SOCKET_PATH}) { - my $path = $ENV{FCGI_SOCKET_PATH}; - my $backlog = $ENV{FCGI_LISTEN_QUEUE} || 100; - my $socket = FCGI::OpenSocket( $path, $backlog ); - $Ext_Request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, - \%ENV, $socket, 1 ); - } - else { - $Ext_Request = FCGI::Request(); - } -} - -sub new { - my ($self, $initializer, @param) = @_; - unless (defined $initializer) { - return undef unless $Ext_Request->Accept() >= 0; - } - CGI->_reset_globals; - $self->_setup_symbols(@CGI::SAVED_SYMBOLS) if @CGI::SAVED_SYMBOLS; - return $CGI::Q = $self->SUPER::new($initializer, @param); -} - -1; - -=head1 NAME - -CGI::Fast - CGI Interface for Fast CGI - -=head1 SYNOPSIS - - use CGI::Fast qw(:standard); - $COUNTER = 0; - while (new CGI::Fast) { - print header; - print start_html("Fast CGI Rocks"); - print - h1("Fast CGI Rocks"), - "Invocation number ",b($COUNTER++), - " PID ",b($$),".", - hr; - print end_html; - } - -=head1 DESCRIPTION - -CGI::Fast is a subclass of the CGI object created by CGI.pm. It is -specialized to work well FCGI module, which greatly speeds up CGI -scripts by turning them into persistently running server processes. -Scripts that perform time-consuming initialization processes, such as -loading large modules or opening persistent database connections, will -see large performance improvements. - -=head1 OTHER PIECES OF THE PUZZLE - -In order to use CGI::Fast you'll need the FCGI module. See -http://www.cpan.org/ for details. - -=head1 WRITING FASTCGI PERL SCRIPTS - -FastCGI scripts are persistent: one or more copies of the script -are started up when the server initializes, and stay around until -the server exits or they die a natural death. After performing -whatever one-time initialization it needs, the script enters a -loop waiting for incoming connections, processing the request, and -waiting some more. - -A typical FastCGI script will look like this: - - #!/usr/bin/perl - use CGI::Fast; - &do_some_initialization(); - while ($q = new CGI::Fast) { - &process_request($q); - } - -Each time there's a new request, CGI::Fast returns a -CGI object to your loop. The rest of the time your script -waits in the call to new(). When the server requests that -your script be terminated, new() will return undef. You can -of course exit earlier if you choose. A new version of the -script will be respawned to take its place (this may be -necessary in order to avoid Perl memory leaks in long-running -scripts). - -CGI.pm's default CGI object mode also works. Just modify the loop -this way: - - while (new CGI::Fast) { - &process_request; - } - -Calls to header(), start_form(), etc. will all operate on the -current request. - -=head1 INSTALLING FASTCGI SCRIPTS - -See the FastCGI developer's kit documentation for full details. On -the Apache server, the following line must be added to srm.conf: - - AddType application/x-httpd-fcgi .fcgi - -FastCGI scripts must end in the extension .fcgi. For each script you -install, you must add something like the following to srm.conf: - - FastCgiServer /usr/etc/httpd/fcgi-bin/file_upload.fcgi -processes 2 - -This instructs Apache to launch two copies of file_upload.fcgi at -startup time. - -=head1 USING FASTCGI SCRIPTS AS CGI SCRIPTS - -Any script that works correctly as a FastCGI script will also work -correctly when installed as a vanilla CGI script. However it will -not see any performance benefit. - -=head1 EXTERNAL FASTCGI SERVER INVOCATION - -FastCGI supports a TCP/IP transport mechanism which allows FastCGI scripts to run -external to the webserver, perhaps on a remote machine. To configure the -webserver to connect to an external FastCGI server, you would add the following -to your srm.conf: - - FastCgiExternalServer /usr/etc/httpd/fcgi-bin/file_upload.fcgi -host sputnik:8888 - -Two environment variables affect how the C object is created, -allowing C to be used as an external FastCGI server. (See C -documentation for C for more information.) - -=over - -=item FCGI_SOCKET_PATH - -The address (TCP/IP) or path (UNIX Domain) of the socket the external FastCGI -script to which bind an listen for incoming connections from the web server. - -=item FCGI_LISTEN_QUEUE - -Maximum length of the queue of pending connections. - -=back - -For example: - - #!/usr/local/bin/perl # must be a FastCGI version of perl! - use CGI::Fast; - &do_some_initialization(); - $ENV{FCGI_SOCKET_PATH} = "sputnik:8888"; - $ENV{FCGI_LISTEN_QUEUE} = 100; - while ($q = new CGI::Fast) { - &process_request($q); - } - -=head1 CAVEATS - -I haven't tested this very much. - -=head1 AUTHOR INFORMATION - -Copyright 1996-1998, Lincoln D. Stein. All rights reserved. - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -Address bug reports and comments to: lstein@cshl.org - -=head1 BUGS - -This section intentionally left blank. - -=head1 SEE ALSO - -L, L - -=cut diff --git a/Master/tlpkg/tlperl/lib/CGI/Pretty.pm b/Master/tlpkg/tlperl/lib/CGI/Pretty.pm deleted file mode 100644 index acded21e6d8..00000000000 --- a/Master/tlpkg/tlperl/lib/CGI/Pretty.pm +++ /dev/null @@ -1,313 +0,0 @@ -package CGI::Pretty; - -# See the bottom of this file for the POD documentation. Search for the -# string '=head'. - -# You can run this file through either pod2man or pod2html to produce pretty -# documentation in manual or html file format (these utilities are part of the -# Perl 5 distribution). - -use strict; -use if $] >= 5.019, 'deprecate'; -use CGI (); - -$CGI::Pretty::VERSION = '3.64'; -$CGI::DefaultClass = __PACKAGE__; -$CGI::Pretty::AutoloadClass = 'CGI'; -@CGI::Pretty::ISA = qw( CGI ); - -initialize_globals(); - -sub _prettyPrint { - my $input = shift; - return if !$$input; - return if !$CGI::Pretty::LINEBREAK || !$CGI::Pretty::INDENT; - -# print STDERR "'", $$input, "'\n"; - - foreach my $i ( @CGI::Pretty::AS_IS ) { - if ( $$input =~ m{}si ) { - my ( $a, $b, $c ) = $$input =~ m{(.*)(<$i[\s/>].*?)(.*)}si; - next if !$b; - $a ||= ""; - $c ||= ""; - - _prettyPrint( \$a ) if $a; - _prettyPrint( \$c ) if $c; - - $b ||= ""; - $$input = "$a$b$c"; - return; - } - } - $$input =~ s/$CGI::Pretty::LINEBREAK/$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT/g; -} - -sub comment { - my($self,@p) = CGI::self_or_CGI(@_); - - my $s = "@p"; - $s =~ s/$CGI::Pretty::LINEBREAK/$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT/g if $CGI::Pretty::LINEBREAK; - - return $self->SUPER::comment( "$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT$s$CGI::Pretty::LINEBREAK" ) . $CGI::Pretty::LINEBREAK; -} - -sub _make_tag_func { - my ($self,$tagname) = @_; - - # As Lincoln as noted, the last else clause is VERY hairy, and it - # took me a while to figure out what I was trying to do. - # What it does is look for tags that shouldn't be indented (e.g. PRE) - # and makes sure that when we nest tags, those tags don't get - # indented. - # For an example, try print td( pre( "hello\nworld" ) ); - # If we didn't care about stuff like that, the code would be - # MUCH simpler. BTW: I won't claim to be a regular expression - # guru, so if anybody wants to contribute something that would - # be quicker, easier to read, etc, I would be more than - # willing to put it in - Brian - - my $func = qq" - sub $tagname {"; - - $func .= q' - shift if $_[0] && - (ref($_[0]) && - (substr(ref($_[0]),0,3) eq "CGI" || - UNIVERSAL::isa($_[0],"CGI"))); - my($attr) = ""; - if (ref($_[0]) && ref($_[0]) eq "HASH") { - my(@attr) = make_attributes(shift()||undef,1); - $attr = " @attr" if @attr; - }'; - - if ($tagname=~/start_(\w+)/i) { - $func .= qq! - return "<\L$1\E\$attr>\$CGI::Pretty::LINEBREAK";} !; - } elsif ($tagname=~/end_(\w+)/i) { - $func .= qq! - return "<\L/$1\E>\$CGI::Pretty::LINEBREAK"; } !; - } else { - $func .= qq# - return ( \$CGI::XHTML ? "<\L$tagname\E\$attr />" : "<\L$tagname\E\$attr>" ) . - \$CGI::Pretty::LINEBREAK unless \@_; - my(\$tag,\$untag) = ("<\L$tagname\E\$attr>","\E"); - - my \%ASIS = map { lc("\$_") => 1 } \@CGI::Pretty::AS_IS; - my \@args; - if ( \$CGI::Pretty::LINEBREAK || \$CGI::Pretty::INDENT ) { - if(ref(\$_[0]) eq 'ARRAY') { - \@args = \@{\$_[0]} - } else { - foreach (\@_) { - \$args[0] .= \$_; - \$args[0] .= \$CGI::Pretty::LINEBREAK if \$args[0] !~ /\$CGI::Pretty::LINEBREAK\$/ && 0; - chomp \$args[0] if exists \$ASIS{ "\L$tagname\E" }; - - \$args[0] .= \$" if \$args[0] !~ /\$CGI::Pretty::LINEBREAK\$/ && 1; - } - chop \$args[0] unless \$" eq ""; - } - } - else { - \@args = ref(\$_[0]) eq 'ARRAY' ? \@{\$_[0]} : "\@_"; - } - - my \@result; - if ( exists \$ASIS{ "\L$tagname\E" } ) { - \@result = map { "\$tag\$_\$untag" } \@args; - } - else { - \@result = map { - chomp; - my \$tmp = \$_; - CGI::Pretty::_prettyPrint( \\\$tmp ); - \$tag . \$CGI::Pretty::LINEBREAK . - \$CGI::Pretty::INDENT . \$tmp . \$CGI::Pretty::LINEBREAK . - \$untag . \$CGI::Pretty::LINEBREAK - } \@args; - } - if (\$CGI::Pretty::LINEBREAK || \$CGI::Pretty::INDENT) { - return join ("", \@result); - } else { - return "\@result"; - } - }#; - } - - return $func; -} - -sub start_html { - return CGI::start_html( @_ ) . $CGI::Pretty::LINEBREAK; -} - -sub end_html { - return CGI::end_html( @_ ) . $CGI::Pretty::LINEBREAK; -} - -sub new { - my $class = shift; - my $this = $class->SUPER::new( @_ ); - - if ($CGI::MOD_PERL) { - if ($CGI::MOD_PERL == 1) { - my $r = Apache->request; - $r->register_cleanup(\&CGI::Pretty::_reset_globals); - } - else { - my $r = Apache2::RequestUtil->request; - $r->pool->cleanup_register(\&CGI::Pretty::_reset_globals); - } - } - $class->_reset_globals if $CGI::PERLEX; - - return bless $this, $class; -} - -sub initialize_globals { - # This is the string used for indentation of tags - $CGI::Pretty::INDENT = "\t"; - - # This is the string used for separation between tags - $CGI::Pretty::LINEBREAK = $/; - - # These tags are not prettify'd. - # When this list is updated, also update the docs. - @CGI::Pretty::AS_IS = qw( a pre code script textarea td ); - - 1; -} -sub _reset_globals { initialize_globals(); } - -# ugly, but quick fix -sub import { - my $self = shift; - no strict 'refs'; - ${ "$self\::AutoloadClass" } = 'CGI'; - - # This causes modules to clash. - undef %CGI::EXPORT; - undef %CGI::EXPORT; - - $self->_setup_symbols(@_); - my ($callpack, $callfile, $callline) = caller; - - # To allow overriding, search through the packages - # Till we find one in which the correct subroutine is defined. - my @packages = ($self,@{"$self\:\:ISA"}); - foreach my $sym (keys %CGI::EXPORT) { - my $pck; - my $def = ${"$self\:\:AutoloadClass"} || $CGI::DefaultClass; - foreach $pck (@packages) { - if (defined(&{"$pck\:\:$sym"})) { - $def = $pck; - last; - } - } - *{"${callpack}::$sym"} = \&{"$def\:\:$sym"}; - } -} - -1; - -=head1 NAME - -CGI::Pretty - module to produce nicely formatted HTML code - -=head1 SYNOPSIS - - use CGI::Pretty qw( :html3 ); - - # Print a table with a single data element - print table( TR( td( "foo" ) ) ); - -=head1 DESCRIPTION - -CGI::Pretty is a module that derives from CGI. It's sole function is to -allow users of CGI to output nicely formatted HTML code. - -When using the CGI module, the following code: - print table( TR( td( "foo" ) ) ); - -produces the following output: -
    foo
    - -If a user were to create a table consisting of many rows and many columns, -the resultant HTML code would be quite difficult to read since it has no -carriage returns or indentation. - -CGI::Pretty fixes this problem. What it does is add a carriage -return and indentation to the HTML code so that one can easily read -it. - - print table( TR( td( "foo" ) ) ); - -now produces the following output: - - - - -
    foo
    - -=head2 Recommendation for when to use CGI::Pretty - -CGI::Pretty is far slower than using CGI.pm directly. A benchmark showed that -it could be about 10 times slower. Adding newlines and spaces may alter the -rendered appearance of HTML. Also, the extra newlines and spaces also make the -file size larger, making the files take longer to download. - -With all those considerations, it is recommended that CGI::Pretty be used -primarily for debugging. - -=head2 Tags that won't be formatted - -The following tags are not formatted: ,
    , , ";
    +                    $self->html_javascript . '">';
         }
         $bodyid = $self->backlink ? ' id="_podtop_"' : '';
         $self->{'scratch'} .= <<"HTML";
    diff --git a/Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm b/Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm
    index 47496e2577f..a0f50a20fb2 100644
    --- a/Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm
    +++ b/Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm
    @@ -5,7 +5,7 @@ use strict;
     use Carp ();
     use Pod::Simple ();
     use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);
    -$VERSION = '3.28';
    +$VERSION = '3.29';
     BEGIN {
       @ISA = ('Pod::Simple');
       *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;
    @@ -125,19 +125,6 @@ The older (and possibly obsolete) libraries L, L
     
     TODO: An example or two of =extend, then point to Pod::Simple::Subclassing
     
    -
    -=head1 ASK ME!
    -
    -If you actually want to use Pod as a format that you want to render to
    -XML (particularly if to an XML instance with more elements than normal
    -Pod has), please email me (C) and I'll probably have
    -some recommendations.
    -
    -For reasons of concision and energetic laziness, some methods and
    -options in this module (and the dozen modules it depends on) are
    -undocumented; but one of those undocumented bits might be just what
    -you're looking for.
    -
     =head1 SEE ALSO
     
     L, L, L
    diff --git a/Master/tlpkg/tlperl/lib/Pod/Usage.pm b/Master/tlpkg/tlperl/lib/Pod/Usage.pm
    index f0dd8350f12..bb8e60f05b0 100644
    --- a/Master/tlpkg/tlperl/lib/Pod/Usage.pm
    +++ b/Master/tlpkg/tlperl/lib/Pod/Usage.pm
    @@ -11,7 +11,7 @@ package Pod::Usage;
     use strict;
     
     use vars qw($VERSION @ISA @EXPORT);
    -$VERSION = '1.63';  ## Current version of this package
    +$VERSION = '1.64';  ## Current version of this package
     require  5.006;    ## requires this Perl version or later
     
     #use diagnostics;
    @@ -360,7 +360,7 @@ __END__
     
     =head1 NAME
     
    -Pod::Usage, pod2usage() - print a usage message from embedded pod documentation
    +Pod::Usage - print a usage message from embedded pod documentation
     
     =head1 SYNOPSIS
     
    @@ -594,13 +594,15 @@ use them by default if you don't expressly tell it to do otherwise.  The
     ability of B to accept a single number or a string makes it
     convenient to use as an innocent looking error message handling function:
     
    +    use strict;
         use Pod::Usage;
         use Getopt::Long;
     
         ## Parse options
    -    GetOptions("help", "man", "flag1")  ||  pod2usage(2);
    -    pod2usage(1)  if ($opt_help);
    -    pod2usage(-verbose => 2)  if ($opt_man);
    +    my %opt;
    +    GetOptions(\%opt, "help|?", "man", "flag1")  ||  pod2usage(2);
    +    pod2usage(1)  if ($opt{help});
    +    pod2usage(-exitval => 0, -verbose => 2)  if ($opt{man});
     
         ## Check for too many filenames
         pod2usage("$0: Too many files given.\n")  if (@ARGV > 1);
    @@ -609,23 +611,35 @@ Some user's however may feel that the above "economy of expression" is
     not particularly readable nor consistent and may instead choose to do
     something more like the following:
     
    -    use Pod::Usage;
    -    use Getopt::Long;
    +    use strict;
    +    use Pod::Usage qw(pod2usage);
    +    use Getopt::Long qw(GetOptions);
     
         ## Parse options
    -    GetOptions("help", "man", "flag1")  ||  pod2usage(-verbose => 0);
    -    pod2usage(-verbose => 1)  if ($opt_help);
    -    pod2usage(-verbose => 2)  if ($opt_man);
    +    my %opt;
    +    GetOptions(\%opt, "help|?", "man", "flag1")  ||
    +      pod2usage(-verbose => 0);
    +
    +    pod2usage(-verbose => 1)  if ($opt{help});
    +    pod2usage(-verbose => 2)  if ($opt{man});
     
         ## Check for too many filenames
         pod2usage(-verbose => 2, -message => "$0: Too many files given.\n")
    -        if (@ARGV > 1);
    +      if (@ARGV > 1);
    +
     
     As with all things in Perl, I, and
     B adheres to this philosophy.  If you are interested in
     seeing a number of different ways to invoke B (although by no
     means exhaustive), please refer to L<"EXAMPLES">.
     
    +=head2 Scripts
    +
    +The Pod::Usage distribution comes with a script pod2usage which offers
    +a command line interface to the functionality of Pod::Usage. See
    +L.
    +
    +
     =head1 EXAMPLES
     
     Each of the following invocations of C will print just the
    @@ -709,8 +723,9 @@ provide a means of printing their complete documentation to C
     uses B in combination with B to do all of these
     things:
     
    -    use Getopt::Long;
    -    use Pod::Usage;
    +    use strict;
    +    use Getopt::Long qw(GetOptions);
    +    use Pod::Usage qw(pod2usage);
     
         my $man = 0;
         my $help = 0;
    @@ -723,6 +738,7 @@ things:
         ## If no arguments were given, then allow STDIN to be used only
         ## if it's not connected to a terminal (otherwise print usage)
         pod2usage("$0: No files given.")  if ((@ARGV == 0) && (-t STDIN));
    +
         __END__
     
         =head1 NAME
    @@ -739,7 +755,7 @@ things:
     
         =head1 OPTIONS
     
    -    =over 8
    +    =over 4
     
         =item B<-help>
     
    diff --git a/Master/tlpkg/tlperl/lib/SDBM_File.pm b/Master/tlpkg/tlperl/lib/SDBM_File.pm
    index 0410bef32d8..707a9f8bf29 100644
    --- a/Master/tlpkg/tlperl/lib/SDBM_File.pm
    +++ b/Master/tlpkg/tlperl/lib/SDBM_File.pm
    @@ -7,7 +7,7 @@ require Tie::Hash;
     require XSLoader;
     
     our @ISA = qw(Tie::Hash);
    -our $VERSION = "1.11";
    +our $VERSION = "1.13";
     
     our @EXPORT_OK = qw(PAGFEXT DIRFEXT PAIRMAX);
     use Exporter "import";
    diff --git a/Master/tlpkg/tlperl/lib/Safe.pm b/Master/tlpkg/tlperl/lib/Safe.pm
    index 4db116dff5f..d78fcc54f68 100644
    --- a/Master/tlpkg/tlperl/lib/Safe.pm
    +++ b/Master/tlpkg/tlperl/lib/Safe.pm
    @@ -3,7 +3,7 @@ package Safe;
     use 5.003_11;
     use Scalar::Util qw(reftype refaddr);
     
    -$Safe::VERSION = "2.37";
    +$Safe::VERSION = "2.39";
     
     # *** Don't declare any lexicals above this point ***
     #
    @@ -362,9 +362,15 @@ sub reval {
         my $evalsub = lexless_anon_sub($root, $strict, $expr);
         # propagate context
         my $sg = sub_generation();
    -    my @subret = (wantarray)
    +    my @subret;
    +    if (defined wantarray) {
    +        @subret = (wantarray)
                    ?        Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub)
                    : scalar Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub);
    +    }
    +    else {
    +        Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub);
    +    }
         _clean_stash($root.'::') if $sg != sub_generation();
         $obj->wrap_code_refs_within(@subret);
         return (wantarray) ? @subret : $subret[0];
    diff --git a/Master/tlpkg/tlperl/lib/Scalar/Util.pm b/Master/tlpkg/tlperl/lib/Scalar/Util.pm
    index 4ab67f9aa07..3f17d13b838 100644
    --- a/Master/tlpkg/tlperl/lib/Scalar/Util.pm
    +++ b/Master/tlpkg/tlperl/lib/Scalar/Util.pm
    @@ -14,9 +14,10 @@ our @ISA       = qw(Exporter);
     our @EXPORT_OK = qw(
       blessed refaddr reftype weaken unweaken isweak
     
    -  dualvar isdual isvstring looks_like_number openhandle readonly set_prototype tainted
    +  dualvar isdual isvstring looks_like_number openhandle readonly set_prototype
    +  tainted
     );
    -our $VERSION    = "1.38";
    +our $VERSION    = "1.41";
     $VERSION   = eval $VERSION;
     
     our @EXPORT_FAIL;
    @@ -45,6 +46,13 @@ sub export_fail {
       @_;
     }
     
    +# set_prototype has been moved to Sub::Util with a different interface
    +sub set_prototype(&$)
    +{
    +  my ( $code, $proto ) = @_;
    +  return Sub::Util::set_prototype( $proto, $code );
    +}
    +
     1;
     
     __END__
    @@ -75,7 +83,9 @@ By default C does not export any subroutines.
     
     The following functions all perform some useful activity on reference values.
     
    -=head2 $pkg = blessed( $ref )
    +=head2 blessed
    +
    +    my $pkg = blessed( $ref );
     
     If C<$ref> is a blessed reference the name of the package that it is blessed
     into is returned. Otherwise C is returned.
    @@ -92,7 +102,9 @@ into is returned. Otherwise C is returned.
     Take care when using this function simply as a truth test (such as in
     C) because the package name C<"0"> is defined yet false.
     
    -=head2 $addr = refaddr( $ref )
    +=head2 refaddr
    +
    +    my $addr = refaddr( $ref );
     
     If C<$ref> is reference the internal memory address of the referenced value is
     returned as a plain integer. Otherwise C is returned.
    @@ -104,7 +116,9 @@ returned as a plain integer. Otherwise C is returned.
         $obj  = bless {}, "Foo";
         $addr = refaddr $obj;               # eg 88123488
     
    -=head2 $type = reftype( $ref )
    +=head2 reftype
    +
    +    my $type = reftype( $ref );
     
     If C<$ref> is a reference the basic Perl type of the variable referenced is
     returned as a plain string (such as C or C). Otherwise C
    @@ -117,9 +131,11 @@ is returned.
         $obj  = bless {}, "Foo";
         $type = reftype $obj;               # HASH
     
    -=head2 weaken( REF )
    +=head2 weaken
     
    -The lvalue C will be turned into a weak reference. This means that it
    +    weaken( $ref );
    +
    +The lvalue C<$ref> will be turned into a weak reference. This means that it
     will not hold a reference count on the object it references. Also when the
     reference count on that object reaches zero, the reference will be set to
     undef. This function mutates the lvalue passed as its argument and returns no
    @@ -154,12 +170,16 @@ references to objects will be strong, causing the remaining objects to never be
     destroyed because there is now always a strong reference to them in the @object
     array.
     
    -=head2 unweaken( REF )
    +=head2 unweaken
    +
    +    unweaken( $ref );
    +
    +I
     
     The lvalue C will be turned from a weak reference back into a normal
     (strong) reference again. This function mutates the lvalue passed as its
     argument and returns no value. This undoes the action performed by
    -C.
    +L.
     
     This function is slightly neater and more convenient than the
     otherwise-equivalent code
    @@ -171,7 +191,9 @@ otherwise-equivalent code
     (because in particular, simply assigning a weak reference back to itself does
     not work to unweaken it; C<$REF = $REF> does not work).
     
    -=head2 $weak = isweak( $ref )
    +=head2 isweak
    +
    +    my $weak = isweak( $ref );
     
     Returns true if C<$ref> is a weak reference.
     
    @@ -187,7 +209,9 @@ B: Copying a weak reference creates a normal, strong, reference.
     
     =head1 OTHER FUNCTIONS
     
    -=head2 $var = dualvar( $num, $string )
    +=head2 dualvar
    +
    +    my $var = dualvar( $num, $string );
     
     Returns a scalar that has the value C<$num> in a numeric context and the value
     C<$string> in a string context.
    @@ -196,7 +220,11 @@ C<$string> in a string context.
         $num = $foo + 2;                    # 12
         $str = $foo . " world";             # Hello world
     
    -=head2 $dual = isdual( $var )
    +=head2 isdual
    +
    +    my $dual = isdual( $var );
    +
    +I
     
     If C<$var> is a scalar that has both numeric and string values, the result is
     true.
    @@ -224,7 +252,9 @@ You can capture its numeric and string content using:
         $err = dualvar $!, $!;
         $dual = isdual($err);               # true
     
    -=head2 $vstring = isvstring( $var )
    +=head2 isvstring
    +
    +    my $vstring = isvstring( $var );
     
     If C<$var> is a scalar which was coded as a vstring the result is true.
     
    @@ -232,12 +262,16 @@ If C<$var> is a scalar which was coded as a vstring the result is true.
         $fmt  = isvstring($vs) ? "%vd" : "%s"; #true
         printf($fmt,$vs);
     
    -=head2 $isnum = looks_like_number( $var )
    +=head2 looks_like_number
    +
    +    my $isnum = looks_like_number( $var );
     
     Returns true if perl thinks C<$var> is a number. See
     L.
     
    -=head2 $fh = openhandle( $fh )
    +=head2 openhandle
    +
    +    my $fh = openhandle( $fh );
     
     Returns C<$fh> itself if C<$fh> may be used as a filehandle and is open, or is
     is a tied handle. Otherwise C is returned.
    @@ -247,7 +281,9 @@ is a tied handle. Otherwise C is returned.
         $fh = openhandle(*NOTOPEN);         # undef
         $fh = openhandle("scalar");         # undef
     
    -=head2 $ro = readonly( $var )
    +=head2 readonly
    +
    +    my $ro = readonly( $var );
     
     Returns true if C<$var> is readonly.
     
    @@ -256,14 +292,18 @@ Returns true if C<$var> is readonly.
         $readonly = foo($bar);              # false
         $readonly = foo(0);                 # true
     
    -=head2 $code = set_prototype( $code, $prototype )
    +=head2 set_prototype
    +
    +    my $code = set_prototype( $code, $prototype );
     
     Sets the prototype of the function given by the C<$code> reference, or deletes
     it if C<$prototype> is C. Returns the C<$code> reference itself.
     
         set_prototype \&foo, '$$';
     
    -=head2 $t = tainted( $var )
    +=head2 tainted
    +
    +    my $t = tainted( $var );
     
     Return true if C<$var> is tainted.
     
    @@ -279,12 +319,12 @@ Module use may give one of the following errors during import.
     =item Weak references are not implemented in the version of perl
     
     The version of perl that you are using does not implement weak references, to
    -use C or C you will need to use a newer release of perl.
    +use L or L you will need to use a newer release of perl.
     
     =item Vstrings are not implemented in the version of perl
     
     The version of perl that you are using does not implement Vstrings, to use
    -C you will need to use a newer release of perl.
    +L you will need to use a newer release of perl.
     
     =item C is only available with the XS version of Scalar::Util
     
    @@ -312,10 +352,15 @@ Copyright (c) 1997-2007 Graham Barr . All rights reserved.
     This program is free software; you can redistribute it and/or modify it
     under the same terms as Perl itself.
     
    -Except weaken and isweak which are
    +Additionally L and L which are
     
     Copyright (c) 1999 Tuomas J. Lukka . All rights reserved.
     This program is free software; you can redistribute it and/or modify it
     under the same terms as perl itself.
     
    +Copyright (C) 2004, 2008  Matthijs van Duin.  All rights reserved.
    +Copyright (C) 2014 cPanel Inc.  All rights reserved.
    +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/lib/SelfLoader.pm b/Master/tlpkg/tlperl/lib/SelfLoader.pm
    index 53a0dbfcabc..586dc57621f 100644
    --- a/Master/tlpkg/tlperl/lib/SelfLoader.pm
    +++ b/Master/tlpkg/tlperl/lib/SelfLoader.pm
    @@ -2,7 +2,7 @@ package SelfLoader;
     use 5.008;
     use strict;
     use IO::Handle;
    -our $VERSION = "1.21";
    +our $VERSION = "1.22";
     
     # The following bit of eval-magic is necessary to make this work on
     # perls < 5.009005.
    @@ -100,17 +100,25 @@ sub _load_stubs {
         # Protect: fork() shares the file pointer between the parent and the kid
         if(sysseek($fh, tell($fh), 0)) {
           open my $nfh, '<&', $fh or croak "reopen: $!";# dup() the fd
    -      close $fh or die "close: $!";                 # autocloses, but be paranoid
    +      close $fh or die "close: $!";                 # autocloses, but be
    +                                                    # paranoid
           open $fh, '<&', $nfh or croak "reopen2: $!";  # dup() the fd "back"
    -      close $nfh or die "close after reopen: $!";   # autocloses, but be paranoid
    +      close $nfh or die "close after reopen: $!";   # autocloses, but be
    +                                                    # paranoid
           $fh->untaint;
         }
         $Cache{"${currpack}::) and $line !~ m/^__END__/) {
    -	if ($line =~ m/^\s*sub\s+([\w:]+)\s*((?:\([\\\$\@\%\&\*\;]*\))?(?:$AttrList)?)/) {
    -            push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype));
    +	if ($line =~ m/ ^\s*                        # indentation
    +	                sub\s+([\w:]+)\s*           # 'sub' and sub name
    +	                (
    +	                 (?:\([\\\$\@\%\&\*\;]*\))? # optional prototype sigils
    +	                 (?:$AttrList)?             # optional attribute list
    +	                )/x) {
    +            push(@stubs, $self->_add_to_cache($name, $currpack,
    +                                              \@lines, $protoype));
                 $protoype = $2;
                 @lines = ($line);
                 if (index($1,'::') == -1) {         # simple sub name
    @@ -127,7 +135,8 @@ sub _load_stubs {
                     }
                 }
             } elsif ($line =~ m/^package\s+([\w:]+)/) { # A package declared
    -            push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype));
    +            push(@stubs, $self->_add_to_cache($name, $currpack,
    +                                              \@lines, $protoype));
                 $self->_package_defined($line);
                 $name = '';
                 @lines = ();
    @@ -165,7 +174,9 @@ sub _add_to_cache {
         return () unless $fullname;
         carp("Redefining sub $fullname")
           if exists $Cache{$fullname};
    -    $Cache{$fullname} = join('', "\n\#line 1 \"sub $fullname\"\npackage $pack; ", @$lines);
    +    $Cache{$fullname} = join('',
    +                             "\n\#line 1 \"sub $fullname\"\npackage $pack; ",
    +                             @$lines);
         #$Cache{$fullname} = join('', "package $pack; ",@$lines);
         print STDERR "SelfLoader cached $fullname: $Cache{$fullname}" if DEBUG;
         # return stub to be eval'd
    @@ -407,7 +418,7 @@ This package has the same copyright and license as the perl core:
         Kit, in the file named "Artistic".  If not, I'll be glad to provide one.
     
         You should also have received a copy of the GNU General Public License
    -    along with this program in the file named "Copying". If not, write to the 
    +    along with this program in the file named "Copying". If not, write to the
         Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
         MA 02110-1301, USA or visit their web page on the internet at
         http://www.gnu.org/copyleft/gpl.html.
    diff --git a/Master/tlpkg/tlperl/lib/Storable.pm b/Master/tlpkg/tlperl/lib/Storable.pm
    index 7d8a01198d5..bd0632f832d 100644
    --- a/Master/tlpkg/tlperl/lib/Storable.pm
    +++ b/Master/tlpkg/tlperl/lib/Storable.pm
    @@ -1,7 +1,7 @@
     #
     #  Copyright (c) 1995-2001, Raphael Manfredi
    -#  Copyright (c) 2002-2013 by the Perl 5 Porters
    -#  
    +#  Copyright (c) 2002-2014 by the Perl 5 Porters
    +#
     #  You may redistribute only under the same terms as Perl 5, as specified
     #  in the README file that comes with the distribution.
     #
    @@ -22,7 +22,7 @@ package Storable; @ISA = qw(Exporter);
     
     use vars qw($canonical $forgive_me $VERSION);
     
    -$VERSION = '2.49_01';
    +$VERSION = '2.53_01';
     
     BEGIN {
         if (eval { local $SIG{__DIE__}; require Log::Agent; 1 }) {
    @@ -241,7 +241,8 @@ sub _store {
     	if ($use_locking) {
     		open(FILE, ">>$file") || logcroak "can't write into $file: $!";
     		unless (&CAN_FLOCK) {
    -			logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
    +			logcarp
    +				"Storable::lock_store: fcntl/flock emulation broken on $^O";
     			return undef;
     		}
     		flock(FILE, LOCK_EX) ||
    @@ -372,7 +373,8 @@ sub _retrieve {
     	my $da = $@;							# Could be from exception handler
     	if ($use_locking) {
     		unless (&CAN_FLOCK) {
    -			logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
    +			logcarp
    +				"Storable::lock_store: fcntl/flock emulation broken on $^O";
     			return undef;
     		}
     		flock(FILE, LOCK_SH) || logcroak "can't get shared lock on $file: $!";
    @@ -1212,8 +1214,10 @@ the bill.
     
     =head1 AUTHOR
     
    -Storable was written by Raphael Manfredi FRaphael_Manfredi@pobox.comE>
    -Maintenance is now done by the perl5-porters Fperl5-porters@perl.orgE>
    +Storable was written by Raphael Manfredi
    +FRaphael_Manfredi@pobox.comE>
    +Maintenance is now done by the perl5-porters
    +Fperl5-porters@perl.orgE>
     
     Please e-mail us with problems, bug fixes, comments and complaints,
     although if you have compliments you should send them to Raphael.
    diff --git a/Master/tlpkg/tlperl/lib/Sub/Util.pm b/Master/tlpkg/tlperl/lib/Sub/Util.pm
    new file mode 100644
    index 00000000000..e40cf2205e6
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Sub/Util.pm
    @@ -0,0 +1,149 @@
    +# Copyright (c) 2014 Paul Evans . All rights reserved.
    +# This program is free software; you can redistribute it and/or
    +# modify it under the same terms as Perl itself.
    +
    +package Sub::Util;
    +
    +use strict;
    +use warnings;
    +
    +require Exporter;
    +require List::Util; # as it has the XS
    +
    +our @ISA = qw( Exporter );
    +our @EXPORT_OK = qw(
    +  prototype set_prototype
    +  subname set_subname
    +);
    +
    +our $VERSION    = "1.41";
    +$VERSION   = eval $VERSION;
    +
    +=head1 NAME
    +
    +Sub::Util - A selection of utility subroutines for subs and CODE references
    +
    +=head1 SYNOPSIS
    +
    +    use Sub::Util qw( prototype set_prototype subname set_subname );
    +
    +=head1 DESCRIPTION
    +
    +C contains a selection of utility subroutines that are useful for
    +operating on subs and CODE references.
    +
    +The rationale for inclusion in this module is that the function performs some
    +work for which an XS implementation is essential because it cannot be
    +implemented in Pure Perl, and which is sufficiently-widely used across CPAN
    +that its popularity warrants inclusion in a core module, which this is.
    +
    +=cut
    +
    +=head1 FUNCTIONS
    +
    +=cut
    +
    +=head2 prototype
    +
    +    my $proto = prototype( $code )
    +
    +I
    +
    +Returns the prototype of the given C<$code> reference, if it has one, as a
    +string. This is the same as the C operator; it is included
    +here simply for symmetry and completeness with the other functions.
    +
    +=cut
    +
    +sub prototype
    +{
    +  my ( $code ) = @_;
    +  return CORE::prototype( $code );
    +}
    +
    +=head2 set_prototype
    +
    +    my $code = set_prototype $prototype, $code;
    +
    +I
    +
    +Sets the prototype of the function given by the C<$code> reference, or deletes
    +it if C<$prototype> is C. Returns the C<$code> reference itself.
    +
    +I: This function takes arguments in a different order to the previous
    +copy of the code from C. This is to match the order of
    +C, and other potential additions in this file. This order has
    +been chosen as it allows a neat and simple chaining of other
    +C functions as might become available, such as:
    +
    + my $code =
    +    set_subname   name_here =>
    +    set_prototype '&@'      =>
    +    set_attribute ':lvalue' =>
    +       sub { ...... };
    +
    +=cut
    +
    +=head2 subname
    +
    +    my $name = subname( $code )
    +
    +I
    +
    +Returns the name of the given C<$code> reference, if it has one. Normal named
    +subs will give a fully-qualified name consisting of the package and the
    +localname separated by C<::>. Anonymous code references will give C<__ANON__>
    +as the localname. If a name has been set using L, this name will
    +be returned instead.
    +
    +This function was inspired by C from L. The
    +remaining functions that C implements can easily be emulated
    +using regexp operations, such as
    +
    + sub get_code_info { return (subname $_[0]) =~ m/^(.+)::(.+?)$/ }
    + sub sub_name      { return (get_code_info $_[0])[0] }
    + sub stash_name    { return (get_code_info $_[0])[1] }
    +
    +I: This function is B the same as
    +C; it returns the existing name of the sub rather than
    +changing it. To set or change a name, see instead L.
    +
    +=cut
    +
    +=head2 set_subname
    +
    +    my $code = set_subname $name, $code;
    +
    +I
    +
    +Sets the name of the function given by the C<$code> reference. Returns the
    +C<$code> reference itself. If the C<$name> is unqualified, the package of the
    +caller is used to qualify it.
    +
    +This is useful for applying names to anonymous CODE references so that stack
    +traces and similar situations, to give a useful name rather than having the
    +default of C<__ANON__>. Note that this name is only used for this situation;
    +the C will not install it into the symbol table; you will have to
    +do that yourself if required.
    +
    +However, since the name is not used by perl except as the return value of
    +C, for stack traces or similar, there is no actual requirement that
    +the name be syntactically valid as a perl function name. This could be used to
    +attach extra information that could be useful in debugging stack traces.
    +
    +This function was copied from C and renamed to the naming
    +convention of this module.
    +
    +=cut
    +
    +=head1 AUTHOR
    +
    +The general structure of this module was written by Paul Evans
    +.
    +
    +The XS implementation of L was copied from L by
    +Matthijs van Duin 
    +
    +=cut
    +
    +1;
    diff --git a/Master/tlpkg/tlperl/lib/Sys/Hostname.pm b/Master/tlpkg/tlperl/lib/Sys/Hostname.pm
    index 1d2e47210a7..42e9293c3fa 100644
    --- a/Master/tlpkg/tlperl/lib/Sys/Hostname.pm
    +++ b/Master/tlpkg/tlperl/lib/Sys/Hostname.pm
    @@ -14,7 +14,7 @@ our $VERSION;
     our $host;
     
     BEGIN {
    -    $VERSION = '1.18';
    +    $VERSION = '1.20';
         {
     	local $SIG{__DIE__};
     	eval {
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Base.pm b/Master/tlpkg/tlperl/lib/TAP/Base.pm
    index 02f8b5e48ce..61c567f570b 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Base.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Base.pm
    @@ -12,11 +12,11 @@ and L
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     use constant GOT_TIME_HIRES => do {
         eval 'use Time::HiRes qw(time);';
    @@ -121,4 +121,13 @@ Return true if the time returned by get_time is high resolution (i.e. if Time::H
     
     sub time_is_hires { return GOT_TIME_HIRES }
     
    +=head3 C
    +
    +Return array reference of the four-element list of CPU seconds,
    +as with L.
    +
    +=cut
    +
    +sub get_times { return [ times() ] }
    +
     1;
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm
    index 1bb357d9bd0..a5a78d1cbe1 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm
    @@ -58,11 +58,11 @@ TAP::Formatter::Base - Base class for harness output delegates
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm
    index d22752e12ee..76937b01a0f 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm
    @@ -71,11 +71,11 @@ TAP::Formatter::Color - Run Perl test scripts with color
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm
    index 5ac9fa1a16e..01f1a541655 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm
    @@ -11,11 +11,11 @@ TAP::Formatter::Console - Harness output delegate for default console output
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/ParallelSession.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/ParallelSession.pm
    index f9cd7af5964..9c4b9cf2564 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/ParallelSession.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/ParallelSession.pm
    @@ -41,11 +41,11 @@ TAP::Formatter::Console::ParallelSession - Harness output delegate for parallel
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/Session.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/Session.pm
    index 16ce97153d9..672a0834cd1 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/Session.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/Session.pm
    @@ -26,11 +26,11 @@ TAP::Formatter::Console::Session - Harness output delegate for default console o
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    @@ -185,19 +185,7 @@ sub _closures {
                     $self->_output_test_failure($parser);
                 }
                 else {
    -                my $time_report = '';
    -                if ( $formatter->timer ) {
    -                    my $start_time = $parser->start_time;
    -                    my $end_time   = $parser->end_time;
    -                    if ( defined $start_time and defined $end_time ) {
    -                        my $elapsed = $end_time - $start_time;
    -                        $time_report
    -                          = $self->time_is_hires
    -                          ? sprintf( ' %8d ms', $elapsed * 1000 )
    -                          : sprintf( ' %8s s', $elapsed || '<1' );
    -                    }
    -                }
    -
    +                my $time_report = $self->time_report($formatter, $parser);
                     $formatter->_output( $self->_make_ok_line($time_report) );
                 }
             },
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm
    index 2e72d914ba8..8ee90fc1739 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm
    @@ -13,11 +13,11 @@ TAP::Formatter::File - Harness output delegate for file output
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    @@ -30,7 +30,7 @@ This provides file orientated output formatting for TAP::Harness.
     
     =head2 C<< open_test >>
     
    -See L
    +See L
     
     =cut
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm
    index 4719f22b1b6..2a92d6082ca 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm
    @@ -10,11 +10,11 @@ TAP::Formatter::File::Session - Harness output delegate for file output
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    @@ -85,19 +85,7 @@ sub close_test {
             $self->_output_test_failure($parser);
         }
         else {
    -        my $time_report = '';
    -        if ( $formatter->timer ) {
    -            my $start_time = $parser->start_time;
    -            my $end_time   = $parser->end_time;
    -            if ( defined $start_time and defined $end_time ) {
    -                my $elapsed = $end_time - $start_time;
    -                $time_report
    -                  = $self->time_is_hires
    -                  ? sprintf( ' %8d ms', $elapsed * 1000 )
    -                  : sprintf( ' %8s s', $elapsed || '<1' );
    -            }
    -        }
    -
    +        my $time_report = $self->time_report($formatter, $parser);
             $formatter->_output( $pretty
                   . ( $self->{results} ? "\n" . $self->{results} : "" )
                   . $self->_make_ok_line($time_report) );
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm b/Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm
    index 120b4953c36..089c1e6729d 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm
    @@ -23,11 +23,11 @@ TAP::Formatter::Session - Abstract base class for harness output delegate
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 METHODS
     
    @@ -99,6 +99,11 @@ Called to close a test session.
     Called by C to clear the line showing test progress, or the parallel
     test ruler, prior to printing the final test result.
     
    +=head3 C
    +
    +Return a formatted string about the elapsed (wall-clock) time
    +and about the consumed CPU time.
    +
     =cut
     
     sub header { }
    @@ -183,4 +188,33 @@ sub _make_ok_line {
         return "ok$suffix\n";
     }
     
    +sub time_report {
    +    my ( $self, $formatter, $parser ) = @_;
    +
    +    my @time_report;
    +    if ( $formatter->timer ) {
    +        my $start_time = $parser->start_time;
    +        my $end_time   = $parser->end_time;
    +        if ( defined $start_time and defined $end_time ) {
    +            my $elapsed = $end_time - $start_time;
    +            push @time_report,
    +              $self->time_is_hires
    +                ? sprintf( ' %8d ms', $elapsed * 1000 )
    +                : sprintf( ' %8s s', $elapsed || '<1' );
    +        }
    +        my $start_times = $parser->start_times();
    +        my $end_times   = $parser->end_times();
    +        my $usr  = $end_times->[0] - $start_times->[0];
    +        my $sys  = $end_times->[1] - $start_times->[1];
    +        my $cusr = $end_times->[2] - $start_times->[2];
    +        my $csys = $end_times->[3] - $start_times->[3];
    +        push @time_report,
    +          sprintf('(%5.2f usr %5.2f sys + %5.2f cusr %5.2f csys = %5.2f CPU)',
    +                  $usr, $sys, $cusr, $csys,
    +                  $usr + $sys + $cusr + $csys);
    +    }
    +
    +    return "@time_report";
    +}
    +
     1;
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Harness.pm b/Master/tlpkg/tlperl/lib/TAP/Harness.pm
    index 53d8d18bea6..d9ede6b96ae 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Harness.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Harness.pm
    @@ -16,11 +16,11 @@ TAP::Harness - Run test scripts with statistics
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     $ENV{HARNESS_ACTIVE}  = 1;
     $ENV{HARNESS_VERSION} = $VERSION;
    @@ -81,6 +81,7 @@ BEGIN {
             test_args         => sub { shift; shift },
             ignore_exit       => sub { shift; shift },
             rules             => sub { shift; shift },
    +        rulesfile         => sub { shift; shift },
             sources           => sub { shift; shift },
             version           => sub { shift; shift },
             trap              => sub { shift; shift },
    @@ -328,8 +329,12 @@ run only one test at a time.
     =item * C
     
     A reference to a hash of rules that control which tests may be executed in
    -parallel. If no rules are declared, all tests are eligible for being run in
    -parallel. Here some simple examples. For the full details of the data structure
    +parallel. If no rules are declared and L is available,
    +C attempts to load rules from a YAML file specified by the
    +C parameter. If no rules file exists, the default is for all
    +tests to be eligible to be run in parallel.
    +
    +Here some simple examples. For the full details of the data structure
     and the related glob-style pattern matching, see
     L.
     
    @@ -338,6 +343,10 @@ L.
             par => 't/p*.t'
         });
     
    +    # Equivalent YAML file
    +    ---
    +    par: t/p*.t
    +
         # Run all tests in parallel, except those starting with "p"
         $harness->rules({
             seq => [
    @@ -346,6 +355,12 @@ L.
                    ],
         });
     
    +    # Equivalent YAML file
    +    ---
    +    seq:
    +        - seq: t/p*.t
    +        - par: **
    +
         # Run some  startup tests in sequence, then some parallel tests than some
         # teardown tests in sequence.
         $harness->rules({
    @@ -357,8 +372,25 @@ L.
     
         });
     
    +    # Equivalent YAML file
    +    ---
    +    seq:
    +        - seq: t/startup/*.t
    +        - par:
    +            - t/a/*.t
    +            - t/b/*.t
    +            - t/c/*.t
    +        - seq: t/shutdown/*.t
    +
     This is an experimental feature and the interface may change.
     
    +=item * C
    +
    +This specifies where to find a YAML file of test scheduling rules.  If not
    +provided, it looks for a default file to use.  It first checks for a file given
    +in the C environment variable, then it checks for
    +F and then F.
    +
     =item * C
     
     A filehandle for catching standard output.
    @@ -415,6 +447,10 @@ Any keys for which the value is C will be ignored.
     
             $self->jobs(1) unless defined $self->jobs;
     
    +        if ( ! defined $self->rules ) {
    +            $self->_maybe_load_rulesfile;
    +        }
    +
             local $default_class{formatter_class} = 'TAP::Formatter::File'
               unless -t ( $arg_for{stdout} || \*STDOUT ) && !$ENV{HARNESS_NOTTY};
     
    @@ -445,6 +481,29 @@ Any keys for which the value is C will be ignored.
     
             return $self;
         }
    +
    +    sub _maybe_load_rulesfile {
    +        my ($self) = @_;
    +
    +        my ($rulesfile) =   defined $self->rulesfile ? $self->rulesfile :
    +                            defined($ENV{HARNESS_RULESFILE}) ? $ENV{HARNESS_RULESFILE} :
    +                            grep { -r } qw(./testrules.yml t/testrules.yml);
    +
    +        if ( defined $rulesfile && -r $rulesfile ) {
    +            if ( ! eval { require CPAN::Meta::YAML; 1} ) {
    +               warn "CPAN::Meta::YAML required to process $rulesfile" ;
    +               return;
    +            }
    +            my $layer = $] lt "5.008" ? "" : ":encoding(UTF-8)";
    +            open my $fh, "<$layer", $rulesfile
    +                or die "Couldn't open $rulesfile: $!";
    +            my $yaml_text = do { local $/; <$fh> };
    +            my $yaml = CPAN::Meta::YAML->read_string($yaml_text)
    +                or die CPAN::Meta::YAML->errstr;
    +            $self->rules( $yaml->[0] );
    +        }
    +        return;
    +    }
     }
     
     ##############################################################################
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm b/Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm
    index 1a9d7196c40..c565b13bd0d 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm
    @@ -7,7 +7,7 @@ use constant IS_VMS => ( $^O eq 'VMS' );
     use TAP::Object;
     use Text::ParseWords qw/shellwords/;
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     # Get the parts of @INC which are changed from the stock list AND
     # preserve reordering of stock directories.
    @@ -91,7 +91,7 @@ sub create {
             ignore_exit => $ENV{HARNESS_IGNORE_EXIT} || 0,
         );
     
    -    my $class = $ENV{HARNESS_SUBCLASS} || 'TAP::Harness';
    +    my $class = delete $input{harness_class} || $ENV{HARNESS_SUBCLASS} || 'TAP::Harness';
         if ( defined( my $env_opt = $ENV{HARNESS_OPTIONS} ) ) {
             for my $opt ( split /:/, $env_opt ) {
                 if ( $opt =~ /^j(\d*)$/ ) {
    @@ -126,24 +126,90 @@ TAP::Harness::Env - Parsing harness related environmental variables where approp
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =head1 SYNOPSIS
     
    - my ($class, $args) = get_test_arguments();
    - require_module($class);
    - $class->new($args);
    + my $harness = TAP::Harness::Env->create(\%extra_args)
     
     =head1 DESCRIPTION
     
    -This module implements the environmental variables that L for use with TAP::Harness.
    +This module implements the environmental variables that L uses with TAP::Harness, and instantiates the appropriate class with the appropriate arguments.
     
    -=head1 FUNCTIONS
    +=head1 METHODS
     
     =over 4
     
    -=item * get_test_options( \%args )
    +=item * create( \%args )
     
    -This function reads the environment and generates an appropriate argument hash from it. If given any arguments, there will override the environmental defaults. It will return of C<$class> and C<$args>.
    +This function reads the environment and generates an appropriate argument hash from it. If given any arguments in C<%extra_args>, these will override the environmental defaults. In accepts C (which defaults to C), and any argument the harness class accepts.
    +
    +=back
    +
    +=head1 ENVIRONMENTAL VARIABLES
    +
    +=over 4
    +
    +=item C
    +
    +Setting this adds perl command line switches to each test file run.
    +
    +For example, C will turn on taint mode.
    +C will run C for
    +each test.
    +
    +=item C
    +
    +If true, C will output the verbose results of running
    +its tests.
    +
    +=item C
    +
    +Specifies a TAP::Harness subclass to be used in place of TAP::Harness.
    +
    +=item C
    +
    +Provide additional options to the harness. Currently supported options are:
    +
    +=over
    +
    +=item C<< j >>
    +
    +Run  (default 9) parallel jobs.
    +
    +=item C<< c >>
    +
    +Try to color output. See L.
    +
    +=item C<< a >>
    +
    +Will use L as the harness class, and save the TAP to
    +C
    +
    +=item C<< fPackage-With-Dashes >>
    +
    +Set the formatter_class of the harness being run. Since the C
    +is seperated by C<:>, we use C<-> instead.
    +
    +=back
    +
    +Multiple options may be separated by colons:
    +
    +    HARNESS_OPTIONS=j9:c make test
    +
    +=item C
    +
    +Setting this to true will make the harness display the number of
    +milliseconds each test took.  You can also use F's C<--timer>
    +switch.
    +
    +=item C
    +
    +Attempt to produce color output.
    +
    +=item C
    +
    +If set to a true value instruct C to ignore exit and wait
    +status from test scripts.
     
     =back
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Object.pm b/Master/tlpkg/tlperl/lib/TAP/Object.pm
    index 21c53dc06a8..84dfe88c2af 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Object.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Object.pm
    @@ -9,11 +9,11 @@ TAP::Object - Base class that provides common functionality to all C mod
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser.pm b/Master/tlpkg/tlperl/lib/TAP/Parser.pm
    index 1ebb0db969c..22222c2482e 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser.pm
    @@ -27,11 +27,11 @@ TAP::Parser - Parse L output
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     my $DEFAULT_TAP_VERSION = 12;
     my $MAX_TAP_VERSION     = 13;
    @@ -60,6 +60,8 @@ BEGIN {    # making accessors
               in_todo
               start_time
               end_time
    +          start_times
    +          end_times
               skip_all
               grammar_class
               result_factory_class
    @@ -1007,11 +1009,20 @@ were skipped.
     
     =head3 C
     
    -Returns the time when the Parser was created.
    +Returns the wall-clock time when the Parser was created.
     
     =head3 C
     
    -Returns the time when the end of TAP input was seen.
    +Returns the wall-clock time when the end of TAP input was seen.
    +
    +=head3 C
    +
    +Returns the CPU times (like L when the Parser was created.
    +
    +=head3 C
    +
    +Returns the CPU times (like L when the end of TAP
    +input was seen.
     
     =head3 C
     
    @@ -1374,6 +1385,7 @@ sub _iter {
         my $state_table = $self->_make_state_table;
     
         $self->start_time( $self->get_time );
    +    $self->start_times( $self->get_times );
     
         # Make next_state closure
         my $next_state = sub {
    @@ -1466,6 +1478,7 @@ sub _finish {
         my $self = shift;
     
         $self->end_time( $self->get_time );
    +    $self->end_times( $self->get_times );
     
         # Avoid leaks
         $self->_iterator(undef);
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm
    index ee4befd3fa3..5745245072a 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm
    @@ -12,11 +12,11 @@ TAP::Parser::Aggregator - Aggregate TAP::Parser results
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm
    index fe1b9adba2e..1a0be3c7e80 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm
    @@ -14,11 +14,11 @@ TAP::Parser::Grammar - A grammar for the Test Anything Protocol.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm
    index 886f5f4656b..114aba6bd4f 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Iterator - Base class for TAP source iterators
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm
    index 929b1004585..650adbfa45c 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Iterator::Array - Iterator for array-based TAP sources
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Process.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Process.pm
    index aaf6b6cf61a..923de9aa4d4 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Process.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Process.pm
    @@ -16,11 +16,11 @@ TAP::Parser::Iterator::Process - Iterator for process-based TAP sources
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm
    index 9181fc7ae79..bd6a8b75423 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Iterator::Stream - Iterator for filehandle-based TAP sources
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm
    index 8b75724fd8e..d4e29ffa3b4 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm
    @@ -16,11 +16,11 @@ TAP::Parser::IteratorFactory - Figures out which SourceHandler objects to use fo
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm
    index 65cd46de13e..d002272ac1e 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm
    @@ -17,11 +17,11 @@ TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm
    index eaad1d2f41b..efbcfe8ee23 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm
    @@ -24,11 +24,11 @@ TAP::Parser::Result - Base class for TAP::Parser output objects
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm
    index 2ae35d6e603..c3749864c92 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Bailout - Bailout result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm
    index d69ec5189c2..bd0f78ad897 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Comment - Comment result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm
    index d85243c9766..900874a8966 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Plan - Plan result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm
    index 1479e8836cd..b7b6a43399f 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Pragma - TAP pragma token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm
    index 749f26cbe2b..57219cbea73 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Test - Test result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm
    index 3e1a6112271..8bfeb6c933a 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Unknown - Unknown result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm
    index 8b08e33d063..68789b502db 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::Version - TAP syntax version token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm
    index a6f86e3c46d..0775e4a12a5 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm
    @@ -11,11 +11,11 @@ TAP::Parser::Result::YAML - YAML result token.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm
    index 65d31d25367..12ecb1cc3a6 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm
    @@ -29,11 +29,11 @@ TAP::Parser::ResultFactory - Factory for creating TAP::Parser output objects
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head2 DESCRIPTION
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm
    index 7c5cedf7edc..ed3ef5135f3 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm
    @@ -13,11 +13,11 @@ TAP::Parser::Scheduler - Schedule tests during parallel testing
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    @@ -100,7 +100,7 @@ Here are some examples:
     
     =head3 Rules resolution
     
    -=over4
    +=over 4
     
     =item * By default, all tests are eligible to be run in parallel. Specifying any of your own rules removes this one.
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm
    index 6375a7b8786..ae0b59b9c71 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm
    @@ -10,11 +10,11 @@ TAP::Parser::Scheduler::Job - A single testing job.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Spinner.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Spinner.pm
    index f590ea58f04..a739164aa6c 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Spinner.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Spinner.pm
    @@ -10,11 +10,11 @@ TAP::Parser::Scheduler::Spinner - A no-op job.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm
    index 0e2da09f644..27f6e53315e 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm
    @@ -14,11 +14,11 @@ TAP::Parser::Source - a TAP source & meta data about it
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm
    index dc257e0ed9f..a2e943b9096 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm
    @@ -12,11 +12,11 @@ TAP::Parser::SourceHandler - Base class for different TAP source handlers
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Executable.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Executable.pm
    index 5522625d317..3e0bd6e1d5b 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Executable.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Executable.pm
    @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::Executable - Stream output from an executable TAP so
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/File.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/File.pm
    index b48660fc782..cb117c66365 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/File.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/File.pm
    @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::File - Stream TAP from a text file.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Handle.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Handle.pm
    index 944fb2a9b37..d113845e7b1 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Handle.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Handle.pm
    @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::Handle - Stream TAP from an IO::Handle or a GLOB.
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Perl.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Perl.pm
    index 1a1867b922d..4dc3afbb479 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Perl.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Perl.pm
    @@ -21,11 +21,11 @@ TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm
    index 627a1e1311a..8574e27ab7c 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm
    @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::RawTAP - Stream output from raw TAP in a scalar/arra
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm
    index 8a61a4bfd92..a79f7280237 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm
    @@ -5,7 +5,7 @@ use warnings;
     
     use base 'TAP::Object';
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     # TODO:
     #   Handle blessed object syntax
    @@ -269,7 +269,7 @@ TAP::Parser::YAMLish::Reader - Read YAMLish data from iterator
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm b/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm
    index 811c190d124..9d68a1824f9 100644
    --- a/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm
    +++ b/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm
    @@ -5,7 +5,7 @@ use warnings;
     
     use base 'TAP::Object';
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     my $ESCAPE_CHAR = qr{ [ \x00-\x1f \" ] }x;
     my $ESCAPE_KEY  = qr{ (?: ^\W ) | $ESCAPE_CHAR }x;
    @@ -146,7 +146,7 @@ TAP::Parser::YAMLish::Writer - Write YAMLish data
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =head1 SYNOPSIS
     
    diff --git a/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm b/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm
    index 17183666607..2101a871257 100644
    --- a/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm
    +++ b/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm
    @@ -1,7 +1,7 @@
     # Term::ANSIColor -- Color screen output using ANSI escape sequences.
     #
     # Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2008, 2009, 2010,
    -#     2011, 2012, 2013 Russ Allbery 
    +#     2011, 2012, 2013, 2014 Russ Allbery 
     # Copyright 1996 Zenin
     # Copyright 2012 Kurt Starsinic 
     #
    @@ -40,7 +40,7 @@ our $AUTOLOAD;
     # against circular module loading (not that we load any modules, but
     # consistency is good).
     BEGIN {
    -    $VERSION = '4.02';
    +    $VERSION = '4.03';
     
         # All of the basic supported constants, used in %EXPORT_TAGS.
         my @colorlist = qw(
    @@ -60,14 +60,13 @@ BEGIN {
         );
     
         # 256-color constants, used in %EXPORT_TAGS.
    -    ## no critic (ValuesAndExpressions::ProhibitMagicNumbers)
         my @colorlist256 = (
             (map { ("ANSI$_", "ON_ANSI$_") } 0 .. 15),
             (map { ("GREY$_", "ON_GREY$_") } 0 .. 23),
         );
         for my $r (0 .. 5) {
             for my $g (0 .. 5) {
    -            push @colorlist256, map { ("RGB$r$g$_", "ON_RGB$r$g$_") } 0 .. 5;
    +            push(@colorlist256, map { ("RGB$r$g$_", "ON_RGB$r$g$_") } 0 .. 5);
             }
         }
     
    @@ -144,7 +143,6 @@ our %ATTRIBUTES = (
     
     # Generating the 256-color codes involves a lot of codes and offsets that are
     # not helped by turning them into constants.
    -## no critic (ValuesAndExpressions::ProhibitMagicNumbers)
     
     # The first 16 256-color codes are duplicates of the 16 ANSI colors,
     # included for completeness.
    @@ -172,8 +170,6 @@ for my $n (0 .. 23) {
         $ATTRIBUTES{"on_grey$n"} = "48;5;$code";
     }
     
    -## use critic (ValuesAndExpressions::ProhibitMagicNumbers)
    -
     # Reverse lookup.  Alphabetically first name for a sequence is preferred.
     our %ATTRIBUTES_R;
     for my $attr (reverse sort keys %ATTRIBUTES) {
    @@ -244,14 +240,14 @@ sub AUTOLOAD {
     
         # Check if we were called with something that doesn't look like an
         # attribute.
    -    if (!$attr || !defined $ATTRIBUTES{ lc $attr }) {
    +    if (!($attr && defined($ATTRIBUTES{ lc $attr }))) {
             croak("undefined subroutine &$AUTOLOAD called");
         }
     
         # If colors are disabled, just return the input.  Do this without
         # installing a sub for (marginal, unbenchmarked) speed.
         if ($ENV{ANSI_COLORS_DISABLED}) {
    -        return join q{}, @_;
    +        return join(q{}, @_);
         }
     
         # We've untainted the name of the sub.
    @@ -273,13 +269,13 @@ sub AUTOLOAD {
         my $eval_result = eval qq{
             sub $AUTOLOAD {
                 if (\$ENV{ANSI_COLORS_DISABLED}) {
    -                return join q{}, \@_;
    +                return join(q{}, \@_);
                 } elsif (\$AUTOLOCAL && \@_) {
                     return PUSHCOLOR('$escape') . join(q{}, \@_) . POPCOLOR;
                 } elsif (\$AUTORESET && \@_) {
                     return '$escape' . join(q{}, \@_) . "\e[0m";
                 } else {
    -                return '$escape' . join q{}, \@_;
    +                return '$escape' . join(q{}, \@_);
                 }
             }
             1;
    @@ -309,7 +305,7 @@ sub AUTOLOAD {
     # Returns: The text passed in
     sub PUSHCOLOR {
         my (@text) = @_;
    -    my $text = join q{}, @text;
    +    my $text = join(q{}, @text);
     
         # Extract any number of color-setting escape sequences from the start of
         # the string.
    @@ -324,7 +320,7 @@ sub PUSHCOLOR {
         }
     
         # Push the color onto the stack.
    -    push @COLORSTACK, $color;
    +    push(@COLORSTACK, $color);
         return $text;
     }
     
    @@ -336,9 +332,9 @@ sub PUSHCOLOR {
     # Returns: The concatenation of @text prepended with the new stack color
     sub POPCOLOR {
         my (@text) = @_;
    -    pop @COLORSTACK;
    +    pop(@COLORSTACK);
         if (@COLORSTACK) {
    -        return $COLORSTACK[-1] . join q{}, @text;
    +        return $COLORSTACK[-1] . join(q{}, @text);
         } else {
             return RESET(@text);
         }
    @@ -353,7 +349,7 @@ sub POPCOLOR {
     # Returns: The concatenation of the text and the proper color reset sequence.
     sub LOCALCOLOR {
         my (@text) = @_;
    -    return PUSHCOLOR(join q{}, @text) . POPCOLOR();
    +    return PUSHCOLOR(join(q{}, @text)) . POPCOLOR();
     }
     
     ##############################################################################
    @@ -379,10 +375,10 @@ sub color {
         # Build the attribute string from semicolon-separated numbers.
         my $attribute = q{};
         for my $code (@codes) {
    -        $code = lc $code;
    -        if (defined $ATTRIBUTES{$code}) {
    +        $code = lc($code);
    +        if (defined($ATTRIBUTES{$code})) {
                 $attribute .= $ATTRIBUTES{$code} . q{;};
    -        } elsif (defined $ALIASES{$code}) {
    +        } elsif (defined($ALIASES{$code})) {
                 $attribute .= $ALIASES{$code} . q{;};
             } else {
                 croak("Invalid attribute name $code");
    @@ -390,7 +386,7 @@ sub color {
         }
     
         # We added one too many semicolons for simplicity.  Remove the last one.
    -    chop $attribute;
    +    chop($attribute);
     
         # Return undef if there were no attributes.
         return ($attribute ne q{}) ? "\e[${attribute}m" : undef;
    @@ -416,12 +412,12 @@ sub uncolor {
             $escape =~ s{ \A \e\[ }{}xms;
             $escape =~ s{ m \z }   {}xms;
             my ($attrs) = $escape =~ m{ \A ((?:\d+;)* \d*) \z }xms;
    -        if (!defined $attrs) {
    +        if (!defined($attrs)) {
                 croak("Bad escape sequence $escape");
             }
     
             # Pull off 256-color codes (38;5;n or 48;5;n) as a unit.
    -        push @nums, $attrs =~ m{ ( 0*[34]8;0*5;\d+ | \d+ ) (?: ; | \z ) }xmsg;
    +        push(@nums, $attrs =~ m{ ( 0*[34]8;0*5;\d+ | \d+ ) (?: ; | \z ) }xmsg);
         }
     
         # Now, walk the list of numbers and convert them to attribute names.
    @@ -430,10 +426,10 @@ sub uncolor {
         for my $num (@nums) {
             $num =~ s{ ( \A | ; ) 0+ (\d) }{$1$2}xmsg;
             my $name = $ATTRIBUTES_R{$num};
    -        if (!defined $name) {
    +        if (!defined($name)) {
                 croak("No name for escape sequence $num");
             }
    -        push @result, $name;
    +        push(@result, $name);
         }
     
         # Return the attribute names.
    @@ -461,7 +457,7 @@ sub colored {
         my ($string, @codes);
         if (ref($first) && ref($first) eq 'ARRAY') {
             @codes = @{$first};
    -        $string = join q{}, @rest;
    +        $string = join(q{}, @rest);
         } else {
             $string = $first;
             @codes  = @rest;
    @@ -477,11 +473,11 @@ sub colored {
     
         # If $EACHLINE is defined, split the string on line boundaries, suppress
         # empty segments, and then colorize each of the line sections.
    -    if (defined $EACHLINE) {
    +    if (defined($EACHLINE)) {
             my @text = map { ($_ ne $EACHLINE) ? $attr . $_ . "\e[0m" : $_ }
               grep { length($_) > 0 }
    -          split m{ (\Q$EACHLINE\E) }xms, $string;
    -        return join q{}, @text;
    +          split(m{ (\Q$EACHLINE\E) }xms, $string);
    +        return join(q{}, @text);
         } else {
             return $attr . $string . "\e[0m";
         }
    @@ -498,7 +494,7 @@ sub colored {
     #          standard color name as an alias, or an unknown standard color name
     sub coloralias {
         my ($alias, $color) = @_;
    -    if (!defined $color) {
    +    if (!defined($color)) {
             if (!exists $ALIASES{$alias}) {
                 return;
             } else {
    @@ -529,7 +525,7 @@ sub colorstrip {
         for my $string (@string) {
             $string =~ s{ \e\[ [\d;]* m }{}xmsg;
         }
    -    return wantarray ? @string : join q{}, @string;
    +    return wantarray ? @string : join(q{}, @string);
     }
     
     # Given a list of color attributes (arguments for color, for instance), return
    @@ -540,9 +536,9 @@ sub colorstrip {
     # Returns: True if all the attributes are valid, false otherwise.
     sub colorvalid {
         my (@codes) = @_;
    -    @codes = map { split q{ }, lc $_ } @codes;
    +    @codes = map { split(q{ }, lc($_)) } @codes;
         for my $code (@codes) {
    -        if (!defined $ATTRIBUTES{$code} && !defined $ALIASES{$code}) {
    +        if (!defined($ATTRIBUTES{$code}) && !defined($ALIASES{$code})) {
                 return;
             }
         }
    @@ -562,24 +558,25 @@ __END__
     Term::ANSIColor - Color screen output using ANSI escape sequences
     
     =for stopwords
    -cyan colorize namespace runtime TMTOWTDI cmd.exe 4nt.exe command.com NT
    -ESC Delvare SSH OpenSSH aixterm ECMA-048 Fraktur overlining Zenin
    -reimplemented Allbery PUSHCOLOR POPCOLOR LOCALCOLOR openmethods.com
    -grey ATTR urxvt mistyped prepending Bareword filehandle Cygwin Starsinic
    -aterm rxvt CPAN RGB Solarized Whitespace alphanumerics undef
    +cyan colorize namespace runtime TMTOWTDI cmd.exe cmd.exe. 4nt.exe. 4nt.exe
    +command.com NT ESC Delvare SSH OpenSSH aixterm ECMA-048 Fraktur overlining
    +Zenin reimplemented Allbery PUSHCOLOR POPCOLOR LOCALCOLOR openmethods.com
    +openmethods.com. grey ATTR urxvt mistyped prepending Bareword filehandle
    +Cygwin Starsinic aterm rxvt CPAN RGB Solarized Whitespace alphanumerics
    +undef
     
     =head1 SYNOPSIS
     
         use Term::ANSIColor;
    -    print color 'bold blue';
    +    print color('bold blue');
         print "This text is bold blue.\n";
    -    print color 'reset';
    +    print color('reset');
         print "This text is normal.\n";
         print colored("Yellow on magenta.", 'yellow on_magenta'), "\n";
         print "This text is normal.\n";
    -    print colored ['yellow on_magenta'], 'Yellow on magenta.', "\n";
    -    print colored ['red on_bright_yellow'], 'Red on bright yellow.', "\n";
    -    print colored ['bright_red on_black'], 'Bright red on black.', "\n";
    +    print colored(['yellow on_magenta'], 'Yellow on magenta.', "\n");
    +    print colored(['red on_bright_yellow'], 'Red on bright yellow.', "\n");
    +    print colored(['bright_red on_black'], 'Bright red on black.', "\n");
         print "\n";
     
         # Map escape sequences back to color names.
    @@ -589,7 +586,7 @@ aterm rxvt CPAN RGB Solarized Whitespace alphanumerics undef
     
         # Strip all color escape sequences.
         use Term::ANSIColor 2.01 qw(colorstrip);
    -    print colorstrip '\e[1mThis is bold\e[0m', "\n";
    +    print colorstrip("\e[1mThis is bold\e[0m"), "\n";
     
         # Determine whether a color is valid.
         use Term::ANSIColor 2.02 qw(colorvalid);
    @@ -729,7 +726,7 @@ C or C.  Similarly, the recognized background colors are:
       on_ansi0 .. on_ansi15
       on_grey0 .. on_grey23
     
    -plus C> for for I, I, and I values from 0 to 5.
    +plus C> for I, I, and I values from 0 to 5.
     
     For any of the above listed attributes, case is not significant.
     
    @@ -1092,11 +1089,11 @@ Support for italic was added in Term::ANSIColor 3.02, included in Perl
     Support for colors 16 through 256 (the C, C, and C
     colors), the C<:constants256> import tag, the coloralias() function, and
     support for the ANSI_COLORS_ALIASES environment variable were added in
    -Term::ANSIColor 4.00.
    +Term::ANSIColor 4.00, included in Perl 5.17.8.
     
     $Term::ANSIColor::AUTOLOCAL was changed to take precedence over
     $Term::ANSIColor::AUTORESET, rather than the other way around, in
    -Term::ANSIColor 4.00.
    +Term::ANSIColor 4.00, included in Perl 5.17.8.
     
     =head1 RESTRICTIONS
     
    @@ -1181,8 +1178,31 @@ supported by this module.
     Most modern X terminal emulators support 256 colors.  Known to not support
     those colors are aterm, rxvt, Terminal.app, and TTY/VC.
     
    +=head1 AUTHORS
    +
    +Original idea (using constants) by Zenin, reimplemented using subs by Russ
    +Allbery , and then combined with the original idea by
    +Russ with input from Zenin.  256-color support is based on work by Kurt
    +Starsinic.  Russ Allbery now maintains this module.
    +
    +PUSHCOLOR, POPCOLOR, and LOCALCOLOR were contributed by openmethods.com
    +voice solutions.
    +
    +=head1 COPYRIGHT AND LICENSE
    +
    +Copyright 1996 Zenin.  Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005,
    +2006, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Russ Allbery
    +.  Copyright 2012 Kurt Starsinic .
    +This program is free software; you may redistribute it and/or modify it
    +under the same terms as Perl itself.
    +
     =head1 SEE ALSO
     
    +The CPAN module L provides a different and more
    +comprehensive interface for 256-color emulators that may be more
    +convenient.  The CPAN module L provides ANSI color
    +(and other escape sequence) support in the Win32 Console environment.
    +
     ECMA-048 is available on-line (at least at the time of this writing) at
     L.
     
    @@ -1192,32 +1212,11 @@ ECMA-048 and the latter is available for free, there seems little reason
     to obtain the ISO standard.
     
     The 256-color control sequences are documented at
    -L (search for 256-color).
    -
    -The CPAN module Term::ExtendedColor provides a different and more
    -comprehensive interface for 256-color emulators that may be more
    -convenient.
    +L (search for
    +256-color).
     
     The current version of this module is always available from its web site
     at L.  It is also part of
     the Perl core distribution as of 5.6.0.
     
    -=head1 AUTHORS
    -
    -Original idea (using constants) by Zenin, reimplemented using subs by Russ
    -Allbery , and then combined with the original idea by
    -Russ with input from Zenin.  256-color support is based on work by Kurt
    -Starsinic.  Russ Allbery now maintains this module.
    -
    -PUSHCOLOR, POPCOLOR, and LOCALCOLOR were contributed by openmethods.com
    -voice solutions.
    -
    -=head1 COPYRIGHT AND LICENSE
    -
    -Copyright 1996 Zenin.  Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005,
    -2006, 2008, 2009, 2010, 2011, 2012 Russ Allbery .
    -Copyright 2012 Kurt Starsinic .  This program is
    -free software; you may redistribute it and/or modify it under the same
    -terms as Perl itself.
    -
     =cut
    diff --git a/Master/tlpkg/tlperl/lib/Term/Complete.pm b/Master/tlpkg/tlperl/lib/Term/Complete.pm
    index 601e4956430..4d0e79ebd0a 100644
    --- a/Master/tlpkg/tlperl/lib/Term/Complete.pm
    +++ b/Master/tlpkg/tlperl/lib/Term/Complete.pm
    @@ -5,7 +5,7 @@ require Exporter;
     use strict;
     our @ISA = qw(Exporter);
     our @EXPORT = qw(Complete);
    -our $VERSION = '1.402';
    +our $VERSION = '1.403';
     
     #      @(#)complete.pl,v1.2            (me@anywhere.EBay.Sun.COM) 09/23/91
     
    @@ -162,7 +162,7 @@ sub Complete {
                     };
     
                     # printable char
    -                ord >= 32 && do {
    +                ord >= ord(" ") && do {
                         $return .= $_;
                         $r++;
                         print;
    diff --git a/Master/tlpkg/tlperl/lib/Term/ReadLine.pm b/Master/tlpkg/tlperl/lib/Term/ReadLine.pm
    index 80a0d4bac88..db08947972d 100644
    --- a/Master/tlpkg/tlperl/lib/Term/ReadLine.pm
    +++ b/Master/tlpkg/tlperl/lib/Term/ReadLine.pm
    @@ -233,9 +233,9 @@ sub findConsole {
         my $console;
         my $consoleOUT;
     
    -    if (-e "/dev/tty" and $^O ne 'MSWin32') {
    +    if ($^O ne 'MSWin32' and -e "/dev/tty") {
     	$console = "/dev/tty";
    -    } elsif (-e "con" or $^O eq 'MSWin32' or $^O eq 'msys') {
    +    } elsif ($^O eq 'MSWin32' or $^O eq 'msys' or -e "con") {
            $console = 'CONIN$';
            $consoleOUT = 'CONOUT$';
         } elsif ($^O eq 'VMS') {
    @@ -320,7 +320,7 @@ sub Features { \%features }
     
     package Term::ReadLine;		# So late to allow the above code be defined?
     
    -our $VERSION = '1.14';
    +our $VERSION = '1.15';
     
     my ($which) = exists $ENV{PERL_RL} ? split /\s+/, $ENV{PERL_RL} : undef;
     if ($which) {
    diff --git a/Master/tlpkg/tlperl/lib/Test/Builder.pm b/Master/tlpkg/tlperl/lib/Test/Builder.pm
    index 061b0fc5a63..a8e7bd95b1c 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Builder.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Builder.pm
    @@ -4,7 +4,7 @@ use 5.006;
     use strict;
     use warnings;
     
    -our $VERSION = '1.001002';
    +our $VERSION = '1.001014';
     $VERSION = eval $VERSION;    ## no critic (BuiltinFunctions::ProhibitStringyEval)
     
     BEGIN {
    @@ -89,7 +89,7 @@ Test::Builder - Backend for building test libraries
     
     =head1 DESCRIPTION
     
    -Test::Simple and Test::More have proven to be popular testing modules,
    +L and L have proven to be popular testing modules,
     but they're not always flexible enough.  Test::Builder provides a
     building block upon which to write your own test libraries I.
    @@ -223,15 +223,18 @@ sub child {
     
     =item B
     
    -    $builder->subtest($name, \&subtests);
    +    $builder->subtest($name, \&subtests, @args);
     
    -See documentation of C in Test::More.
    +See documentation of C in Test::More.  
    +
    +C also, and optionally, accepts arguments which will be passed to the
    +subtests reference.
     
     =cut
     
     sub subtest {
         my $self = shift;
    -    my($name, $subtests) = @_;
    +    my($name, $subtests, @args) = @_;
     
         if ('CODE' ne ref $subtests) {
             $self->croak("subtest()'s second argument must be a code ref");
    @@ -255,7 +258,7 @@ sub subtest {
             my $run_the_subtests = sub {
                 # Add subtest name for clarification of starting point
                 $self->note("Subtest: $name");
    -            $subtests->();
    +            $subtests->(@args);
                 $self->done_testing unless $self->_plan_handled;
                 1;
             };
    @@ -321,7 +324,7 @@ sub _plan_handled {
     When your child is done running tests, you must call C to clean up
     and tell the parent your pass/fail status.
     
    -Calling finalize on a child with open children will C.
    +Calling C on a child with open children will C.
     
     If the child falls out of scope before C is called, a failure
     diagnostic will be issued and the child is considered to have failed.
    @@ -352,7 +355,7 @@ sub finalize {
         $self->parent->{Child_Name} = undef;
         unless ($self->{Bailed_Out}) {
             if ( $self->{Skip_All} ) {
    -            $self->parent->skip($self->{Skip_All});
    +            $self->parent->skip($self->{Skip_All}, $self->name);
             }
             elsif ( not @{ $self->{Test_Results} } ) {
                 $self->parent->ok( 0, sprintf q[No tests run for subtest "%s"], $self->name );
    @@ -1062,14 +1065,14 @@ DIAGNOSTIC
     
       $Test->isnt_eq($got, $dont_expect, $name);
     
    -Like Test::More's C.  Checks if C<$got ne $dont_expect>.  This is
    +Like L's C.  Checks if C<$got ne $dont_expect>.  This is
     the string version.
     
     =item B
     
       $Test->isnt_num($got, $dont_expect, $name);
     
    -Like Test::More's C.  Checks if C<$got ne $dont_expect>.  This is
    +Like L's C.  Checks if C<$got ne $dont_expect>.  This is
     the numeric version.
     
     =cut
    @@ -1111,14 +1114,14 @@ sub isnt_num {
       $Test->like($thing, qr/$regex/, $name);
       $Test->like($thing, '/$regex/', $name);
     
    -Like Test::More's C.  Checks if $thing matches the given C<$regex>.
    +Like L's C.  Checks if $thing matches the given C<$regex>.
     
     =item B
     
       $Test->unlike($thing, qr/$regex/, $name);
       $Test->unlike($thing, '/$regex/', $name);
     
    -Like Test::More's C.  Checks if $thing B the
    +Like L's C.  Checks if $thing B the
     given C<$regex>.
     
     =cut
    @@ -1141,7 +1144,7 @@ sub unlike {
     
       $Test->cmp_ok($thing, $type, $that, $name);
     
    -Works just like Test::More's C.
    +Works just like L's C.
     
         $Test->cmp_ok($big_num, '!=', $other_big_num);
     
    @@ -1159,7 +1162,7 @@ sub cmp_ok {
             $self->croak("$type is not a valid comparison operator in cmp_ok()");
         }
     
    -    my $test;
    +    my ($test, $succ);
         my $error;
         {
             ## no critic (BuiltinFunctions::ProhibitStringyEval)
    @@ -1169,9 +1172,10 @@ sub cmp_ok {
             my($pack, $file, $line) = $self->caller();
     
             # This is so that warnings come out at the caller's level
    -        $test = eval qq[
    +        $succ = eval qq[
     #line $line "(eval in cmp_ok) $file"
    -\$got $type \$expect;
    +\$test = (\$got $type \$expect);
    +1;
     ];
             $error = $@;
         }
    @@ -1185,7 +1189,7 @@ sub cmp_ok {
           ? '_unoverload_num'
           : '_unoverload_str';
     
    -    $self->diag(<<"END") if $error;
    +    $self->diag(<<"END") unless $succ;
     An error occurred while using $type:
     ------------------------------------
     $error
    @@ -1246,7 +1250,7 @@ These are methods which are used in the course of writing a test but are not the
     
         $Test->BAIL_OUT($reason);
     
    -Indicates to the Test::Harness that things are going so badly all
    +Indicates to the L that things are going so badly all
     testing should terminate.  This includes running any additional test
     scripts.
     
    @@ -1289,8 +1293,9 @@ Skips the current test, reporting C<$why>.
     =cut
     
     sub skip {
    -    my( $self, $why ) = @_;
    +    my( $self, $why, $name ) = @_;
         $why ||= '';
    +    $name = '' unless defined $name;
         $self->_unoverload_str( \$why );
     
         lock( $self->{Curr_Test} );
    @@ -1300,7 +1305,7 @@ sub skip {
             {
                 'ok'      => 1,
                 actual_ok => 1,
    -            name      => '',
    +            name      => $name,
                 type      => 'skip',
                 reason    => $why,
             }
    @@ -2201,7 +2206,7 @@ pretty good at guessing the right package to look at.  It first looks for
     the caller based on C<$Level + 1>, since C is usually called inside
     a test function.  As a last resort it will use C.
     
    -Sometimes there is some confusion about where todo() should be looking
    +Sometimes there is some confusion about where C should be looking
     for the C<$TODO> variable.  If you want to be sure, tell it explicitly
     what $pack to use.
     
    @@ -2616,7 +2621,7 @@ Test::Builder.
     
     =head1 MEMORY
     
    -An informative hash, accessible via C<>, is stored for each
    +An informative hash, accessible via C, is stored for each
     test you perform.  So memory usage will scale linearly with each test
     run. Although this is not a problem for most test suites, it can
     become an issue if you do large (hundred thousands to million)
    @@ -2624,25 +2629,33 @@ combinatorics tests in the same run.
     
     In such cases, you are advised to either split the test file into smaller
     ones, or use a reverse approach, doing "normal" (code) compares and
    -triggering fail() should anything go unexpected.
    +triggering C should anything go unexpected.
     
     Future versions of Test::Builder will have a way to turn history off.
     
     
     =head1 EXAMPLES
     
    -CPAN can provide the best examples.  Test::Simple, Test::More,
    -Test::Exception and Test::Differences all use Test::Builder.
    +CPAN can provide the best examples.  L, L,
    +L and L all use Test::Builder.
     
     =head1 SEE ALSO
     
    -Test::Simple, Test::More, Test::Harness
    +L, L, L
     
     =head1 AUTHORS
     
     Original code by chromatic, maintained by Michael G Schwern
     Eschwern@pobox.comE
     
    +=head1 MAINTAINERS
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
    +
     =head1 COPYRIGHT
     
     Copyright 2002-2008 by chromatic Echromatic@wgz.orgE and
    diff --git a/Master/tlpkg/tlperl/lib/Test/Builder/IO/Scalar.pm b/Master/tlpkg/tlperl/lib/Test/Builder/IO/Scalar.pm
    new file mode 100644
    index 00000000000..54700c42cbb
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/Builder/IO/Scalar.pm
    @@ -0,0 +1,658 @@
    +package Test::Builder::IO::Scalar;
    +
    +
    +=head1 NAME
    +
    +Test::Builder::IO::Scalar - A copy of IO::Scalar for Test::Builder
    +
    +=head1 DESCRIPTION
    +
    +This is a copy of L which ships with L to
    +support scalar references as filehandles on Perl 5.6.  Newer
    +versions of Perl simply use C's built in support.
    +
    +L can not have dependencies on other modules without
    +careful consideration, so its simply been copied into the distribution.
    +
    +=head1 COPYRIGHT and LICENSE
    +
    +This file came from the "IO-stringy" Perl5 toolkit.
    +
    +Copyright (c) 1996 by Eryq.  All rights reserved.
    +Copyright (c) 1999,2001 by ZeeGee Software Inc.  All rights reserved.
    +
    +This program is free software; you can redistribute it and/or
    +modify it under the same terms as Perl itself.
    +
    +
    +=cut
    +
    +# This is copied code, I don't care.
    +##no critic
    +
    +use Carp;
    +use strict;
    +use vars qw($VERSION @ISA);
    +use IO::Handle;
    +
    +use 5.005;
    +
    +### The package version, both in 1.23 style *and* usable by MakeMaker:
    +$VERSION = "2.113";
    +
    +### Inheritance:
    +@ISA = qw(IO::Handle);
    +
    +#==============================
    +
    +=head2 Construction
    +
    +=over 4
    +
    +=cut
    +
    +#------------------------------
    +
    +=item new [ARGS...]
    +
    +I
    +Return a new, unattached scalar handle.
    +If any arguments are given, they're sent to open().
    +
    +=cut
    +
    +sub new {
    +    my $proto = shift;
    +    my $class = ref($proto) || $proto;
    +    my $self = bless \do { local *FH }, $class;
    +    tie *$self, $class, $self;
    +    $self->open(@_);   ### open on anonymous by default
    +    $self;
    +}
    +sub DESTROY {
    +    shift->close;
    +}
    +
    +#------------------------------
    +
    +=item open [SCALARREF]
    +
    +I
    +Open the scalar handle on a new scalar, pointed to by SCALARREF.
    +If no SCALARREF is given, a "private" scalar is created to hold
    +the file data.
    +
    +Returns the self object on success, undefined on error.
    +
    +=cut
    +
    +sub open {
    +    my ($self, $sref) = @_;
    +
    +    ### Sanity:
    +    defined($sref) or do {my $s = ''; $sref = \$s};
    +    (ref($sref) eq "SCALAR") or croak "open() needs a ref to a scalar";
    +
    +    ### Setup:
    +    *$self->{Pos} = 0;          ### seek position
    +    *$self->{SR}  = $sref;      ### scalar reference
    +    $self;
    +}
    +
    +#------------------------------
    +
    +=item opened
    +
    +I
    +Is the scalar handle opened on something?
    +
    +=cut
    +
    +sub opened {
    +    *{shift()}->{SR};
    +}
    +
    +#------------------------------
    +
    +=item close
    +
    +I
    +Disassociate the scalar handle from its underlying scalar.
    +Done automatically on destroy.
    +
    +=cut
    +
    +sub close {
    +    my $self = shift;
    +    %{*$self} = ();
    +    1;
    +}
    +
    +=back
    +
    +=cut
    +
    +
    +
    +#==============================
    +
    +=head2 Input and output
    +
    +=over 4
    +
    +=cut
    +
    +
    +#------------------------------
    +
    +=item flush
    +
    +I
    +No-op, provided for OO compatibility.
    +
    +=cut
    +
    +sub flush { "0 but true" }
    +
    +#------------------------------
    +
    +=item getc
    +
    +I
    +Return the next character, or undef if none remain.
    +
    +=cut
    +
    +sub getc {
    +    my $self = shift;
    +
    +    ### Return undef right away if at EOF; else, move pos forward:
    +    return undef if $self->eof;
    +    substr(${*$self->{SR}}, *$self->{Pos}++, 1);
    +}
    +
    +#------------------------------
    +
    +=item getline
    +
    +I
    +Return the next line, or undef on end of string.
    +Can safely be called in an array context.
    +Currently, lines are delimited by "\n".
    +
    +=cut
    +
    +sub getline {
    +    my $self = shift;
    +
    +    ### Return undef right away if at EOF:
    +    return undef if $self->eof;
    +
    +    ### Get next line:
    +    my $sr = *$self->{SR};
    +    my $i  = *$self->{Pos};	        ### Start matching at this point.
    +
    +    ### Minimal impact implementation!
    +    ### We do the fast fast thing (no regexps) if using the
    +    ### classic input record separator.
    +
    +    ### Case 1: $/ is undef: slurp all...
    +    if    (!defined($/)) {
    +	*$self->{Pos} = length $$sr;
    +        return substr($$sr, $i);
    +    }
    +
    +    ### Case 2: $/ is "\n": zoom zoom zoom...
    +    elsif ($/ eq "\012") {
    +
    +        ### Seek ahead for "\n"... yes, this really is faster than regexps.
    +        my $len = length($$sr);
    +        for (; $i < $len; ++$i) {
    +           last if ord (substr ($$sr, $i, 1)) == 10;
    +        }
    +
    +        ### Extract the line:
    +        my $line;
    +        if ($i < $len) {                ### We found a "\n":
    +            $line = substr ($$sr, *$self->{Pos}, $i - *$self->{Pos} + 1);
    +            *$self->{Pos} = $i+1;            ### Remember where we finished up.
    +        }
    +        else {                          ### No "\n"; slurp the remainder:
    +            $line = substr ($$sr, *$self->{Pos}, $i - *$self->{Pos});
    +            *$self->{Pos} = $len;
    +        }
    +        return $line;
    +    }
    +
    +    ### Case 3: $/ is ref to int. Do fixed-size records.
    +    ###        (Thanks to Dominique Quatravaux.)
    +    elsif (ref($/)) {
    +        my $len = length($$sr);
    +		my $i = ${$/} + 0;
    +		my $line = substr ($$sr, *$self->{Pos}, $i);
    +		*$self->{Pos} += $i;
    +        *$self->{Pos} = $len if (*$self->{Pos} > $len);
    +		return $line;
    +    }
    +
    +    ### Case 4: $/ is either "" (paragraphs) or something weird...
    +    ###         This is Graham's general-purpose stuff, which might be
    +    ###         a tad slower than Case 2 for typical data, because
    +    ###         of the regexps.
    +    else {
    +        pos($$sr) = $i;
    +
    +	### If in paragraph mode, skip leading lines (and update i!):
    +        length($/) or
    +	    (($$sr =~ m/\G\n*/g) and ($i = pos($$sr)));
    +
    +        ### If we see the separator in the buffer ahead...
    +        if (length($/)
    +	    ?  $$sr =~ m,\Q$/\E,g          ###   (ordinary sep) TBD: precomp!
    +            :  $$sr =~ m,\n\n,g            ###   (a paragraph)
    +            ) {
    +            *$self->{Pos} = pos $$sr;
    +            return substr($$sr, $i, *$self->{Pos}-$i);
    +        }
    +        ### Else if no separator remains, just slurp the rest:
    +        else {
    +            *$self->{Pos} = length $$sr;
    +            return substr($$sr, $i);
    +        }
    +    }
    +}
    +
    +#------------------------------
    +
    +=item getlines
    +
    +I
    +Get all remaining lines.
    +It will croak() if accidentally called in a scalar context.
    +
    +=cut
    +
    +sub getlines {
    +    my $self = shift;
    +    wantarray or croak("can't call getlines in scalar context!");
    +    my ($line, @lines);
    +    push @lines, $line while (defined($line = $self->getline));
    +    @lines;
    +}
    +
    +#------------------------------
    +
    +=item print ARGS...
    +
    +I
    +Print ARGS to the underlying scalar.
    +
    +B this continues to always cause a seek to the end
    +of the string, but if you perform seek()s and tell()s, it is
    +still safer to explicitly seek-to-end before subsequent print()s.
    +
    +=cut
    +
    +sub print {
    +    my $self = shift;
    +    *$self->{Pos} = length(${*$self->{SR}} .= join('', @_) . (defined($\) ? $\ : ""));
    +    1;
    +}
    +sub _unsafe_print {
    +    my $self = shift;
    +    my $append = join('', @_) . $\;
    +    ${*$self->{SR}} .= $append;
    +    *$self->{Pos}   += length($append);
    +    1;
    +}
    +sub _old_print {
    +    my $self = shift;
    +    ${*$self->{SR}} .= join('', @_) . $\;
    +    *$self->{Pos} = length(${*$self->{SR}});
    +    1;
    +}
    +
    +
    +#------------------------------
    +
    +=item read BUF, NBYTES, [OFFSET]
    +
    +I
    +Read some bytes from the scalar.
    +Returns the number of bytes actually read, 0 on end-of-file, undef on error.
    +
    +=cut
    +
    +sub read {
    +    my $self = $_[0];
    +    my $n    = $_[2];
    +    my $off  = $_[3] || 0;
    +
    +    my $read = substr(${*$self->{SR}}, *$self->{Pos}, $n);
    +    $n = length($read);
    +    *$self->{Pos} += $n;
    +    ($off ? substr($_[1], $off) : $_[1]) = $read;
    +    return $n;
    +}
    +
    +#------------------------------
    +
    +=item write BUF, NBYTES, [OFFSET]
    +
    +I
    +Write some bytes to the scalar.
    +
    +=cut
    +
    +sub write {
    +    my $self = $_[0];
    +    my $n    = $_[2];
    +    my $off  = $_[3] || 0;
    +
    +    my $data = substr($_[1], $off, $n);
    +    $n = length($data);
    +    $self->print($data);
    +    return $n;
    +}
    +
    +#------------------------------
    +
    +=item sysread BUF, LEN, [OFFSET]
    +
    +I
    +Read some bytes from the scalar.
    +Returns the number of bytes actually read, 0 on end-of-file, undef on error.
    +
    +=cut
    +
    +sub sysread {
    +  my $self = shift;
    +  $self->read(@_);
    +}
    +
    +#------------------------------
    +
    +=item syswrite BUF, NBYTES, [OFFSET]
    +
    +I
    +Write some bytes to the scalar.
    +
    +=cut
    +
    +sub syswrite {
    +  my $self = shift;
    +  $self->write(@_);
    +}
    +
    +=back
    +
    +=cut
    +
    +
    +#==============================
    +
    +=head2 Seeking/telling and other attributes
    +
    +=over 4
    +
    +=cut
    +
    +
    +#------------------------------
    +
    +=item autoflush
    +
    +I
    +No-op, provided for OO compatibility.
    +
    +=cut
    +
    +sub autoflush {}
    +
    +#------------------------------
    +
    +=item binmode
    +
    +I
    +No-op, provided for OO compatibility.
    +
    +=cut
    +
    +sub binmode {}
    +
    +#------------------------------
    +
    +=item clearerr
    +
    +I  Clear the error and EOF flags.  A no-op.
    +
    +=cut
    +
    +sub clearerr { 1 }
    +
    +#------------------------------
    +
    +=item eof
    +
    +I  Are we at end of file?
    +
    +=cut
    +
    +sub eof {
    +    my $self = shift;
    +    (*$self->{Pos} >= length(${*$self->{SR}}));
    +}
    +
    +#------------------------------
    +
    +=item seek OFFSET, WHENCE
    +
    +I  Seek to a given position in the stream.
    +
    +=cut
    +
    +sub seek {
    +    my ($self, $pos, $whence) = @_;
    +    my $eofpos = length(${*$self->{SR}});
    +
    +    ### Seek:
    +    if    ($whence == 0) { *$self->{Pos} = $pos }             ### SEEK_SET
    +    elsif ($whence == 1) { *$self->{Pos} += $pos }            ### SEEK_CUR
    +    elsif ($whence == 2) { *$self->{Pos} = $eofpos + $pos}    ### SEEK_END
    +    else                 { croak "bad seek whence ($whence)" }
    +
    +    ### Fixup:
    +    if (*$self->{Pos} < 0)       { *$self->{Pos} = 0 }
    +    if (*$self->{Pos} > $eofpos) { *$self->{Pos} = $eofpos }
    +    return 1;
    +}
    +
    +#------------------------------
    +
    +=item sysseek OFFSET, WHENCE
    +
    +I Identical to C, I
    +
    +=cut
    +
    +sub sysseek {
    +    my $self = shift;
    +    $self->seek (@_);
    +}
    +
    +#------------------------------
    +
    +=item tell
    +
    +I
    +Return the current position in the stream, as a numeric offset.
    +
    +=cut
    +
    +sub tell { *{shift()}->{Pos} }
    +
    +#------------------------------
    +
    +=item  use_RS [YESNO]
    +
    +I
    +B
    +Obey the current setting of $/, like IO::Handle does?
    +Default is false in 1.x, but cold-welded true in 2.x and later.
    +
    +=cut
    +
    +sub use_RS {
    +    my ($self, $yesno) = @_;
    +    carp "use_RS is deprecated and ignored; \$/ is always consulted\n";
    + }
    +
    +#------------------------------
    +
    +=item setpos POS
    +
    +I
    +Set the current position, using the opaque value returned by C.
    +
    +=cut
    +
    +sub setpos { shift->seek($_[0],0) }
    +
    +#------------------------------
    +
    +=item getpos
    +
    +I
    +Return the current position in the string, as an opaque object.
    +
    +=cut
    +
    +*getpos = \&tell;
    +
    +
    +#------------------------------
    +
    +=item sref
    +
    +I
    +Return a reference to the underlying scalar.
    +
    +=cut
    +
    +sub sref { *{shift()}->{SR} }
    +
    +
    +#------------------------------
    +# Tied handle methods...
    +#------------------------------
    +
    +# Conventional tiehandle interface:
    +sub TIEHANDLE {
    +    ((defined($_[1]) && UNIVERSAL::isa($_[1], __PACKAGE__))
    +     ? $_[1]
    +     : shift->new(@_));
    +}
    +sub GETC      { shift->getc(@_) }
    +sub PRINT     { shift->print(@_) }
    +sub PRINTF    { shift->print(sprintf(shift, @_)) }
    +sub READ      { shift->read(@_) }
    +sub READLINE  { wantarray ? shift->getlines(@_) : shift->getline(@_) }
    +sub WRITE     { shift->write(@_); }
    +sub CLOSE     { shift->close(@_); }
    +sub SEEK      { shift->seek(@_); }
    +sub TELL      { shift->tell(@_); }
    +sub EOF       { shift->eof(@_); }
    +
    +#------------------------------------------------------------
    +
    +1;
    +
    +__END__
    +
    +
    +
    +=back
    +
    +=cut
    +
    +
    +=head1 WARNINGS
    +
    +Perl's TIEHANDLE spec was incomplete prior to 5.005_57;
    +it was missing support for C, C, and C.
    +Attempting to use these functions with an IO::Scalar will not work
    +prior to 5.005_57. IO::Scalar will not have the relevant methods
    +invoked; and even worse, this kind of bug can lie dormant for a while.
    +If you turn warnings on (via C<$^W> or C),
    +and you see something like this...
    +
    +    attempt to seek on unopened filehandle
    +
    +...then you are probably trying to use one of these functions
    +on an IO::Scalar with an old Perl.  The remedy is to simply
    +use the OO version; e.g.:
    +
    +    $SH->seek(0,0);    ### GOOD: will work on any 5.005
    +    seek($SH,0,0);     ### WARNING: will only work on 5.005_57 and beyond
    +
    +
    +=head1 VERSION
    +
    +$Id: Scalar.pm,v 1.6 2005/02/10 21:21:53 dfs Exp $
    +
    +
    +=head1 AUTHORS
    +
    +=head2 Primary Maintainer
    +
    +David F. Skoll (F).
    +
    +=head2 Principal author
    +
    +Eryq (F).
    +President, ZeeGee Software Inc (F).
    +
    +
    +=head2 Other contributors
    +
    +The full set of contributors always includes the folks mentioned
    +in L.  But just the same, special
    +thanks to the following individuals for their invaluable contributions
    +(if I've forgotten or misspelled your name, please email me!):
    +
    +I
    +for contributing C.
    +
    +I
    +for suggesting C.
    +
    +I
    +for finding and fixing the bug in C.
    +
    +I
    +for his offset-using read() and write() implementations.
    +
    +I
    +for his patches to massively improve the performance of C
    +and add C and C.
    +
    +I
    +for stringification and inheritance improvements,
    +and sundry good ideas.
    +
    +I
    +for the IO::Handle inheritance and automatic tie-ing.
    +
    +
    +=head1 SEE ALSO
    +
    +L, which is quite similar but which was designed
    +more-recently and with an IO::Handle-like interface in mind,
    +so you could mix OO- and native-filehandle usage without using tied().
    +
    +I as of version 2.x, these classes all work like
    +their IO::Handle counterparts, so we have comparable
    +functionality to IO::String.
    +
    +=cut
    +
    diff --git a/Master/tlpkg/tlperl/lib/Test/Builder/Module.pm b/Master/tlpkg/tlperl/lib/Test/Builder/Module.pm
    index 48e9ea8f748..2322d8a9b78 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Builder/Module.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Builder/Module.pm
    @@ -2,12 +2,12 @@ package Test::Builder::Module;
     
     use strict;
     
    -use Test::Builder 0.99;
    +use Test::Builder 1.00;
     
     require Exporter;
     our @ISA = qw(Exporter);
     
    -our $VERSION = '1.001002';
    +our $VERSION = '1.001014';
     $VERSION = eval $VERSION;      ## no critic (BuiltinFunctions::ProhibitStringyEval)
     
     
    @@ -35,41 +35,41 @@ Test::Builder::Module - Base class for test modules
     
     =head1 DESCRIPTION
     
    -This is a superclass for Test::Builder-based modules.  It provides a
    +This is a superclass for L-based modules.  It provides a
     handful of common functionality and a method of getting at the underlying
    -Test::Builder object.
    +L object.
     
     
     =head2 Importing
     
    -Test::Builder::Module is a subclass of Exporter which means your
    +Test::Builder::Module is a subclass of L which means your
     module is also a subclass of Exporter.  @EXPORT, @EXPORT_OK, etc...
     all act normally.
     
    -A few methods are provided to do the C 23> part
    +A few methods are provided to do the C<< use Your::Module tests => 23 >> part
     for you.
     
     =head3 import
     
    -Test::Builder::Module provides an import() method which acts in the
    -same basic way as Test::More's, setting the plan and controlling
    +Test::Builder::Module provides an C method which acts in the
    +same basic way as L's, setting the plan and controlling
     exporting of functions and variables.  This allows your module to set
    -the plan independent of Test::More.
    +the plan independent of L.
     
    -All arguments passed to import() are passed onto 
    +All arguments passed to C are passed onto 
     C<< Your::Module->builder->plan() >> with the exception of 
     C<< import =>[qw(things to import)] >>.
     
         use Your::Module import => [qw(this that)], tests => 23;
     
    -says to import the functions this() and that() as well as set the plan
    +says to import the functions C and C as well as set the plan
     to be 23 tests.
     
    -import() also sets the exported_to() attribute of your builder to be
    -the caller of the import() function.
    +C also sets the C attribute of your builder to be
    +the caller of the C function.
     
    -Additional behaviors can be added to your import() method by overriding
    -import_extra().
    +Additional behaviors can be added to your C method by overriding
    +C.
     
     =cut
     
    @@ -123,13 +123,13 @@ sub _strip_imports {
     
         Your::Module->import_extra(\@import_args);
     
    -import_extra() is called by import().  It provides an opportunity for you
    +C is called by C.  It provides an opportunity for you
     to add behaviors to your module based on its import list.
     
    -Any extra arguments which shouldn't be passed on to plan() should be 
    +Any extra arguments which shouldn't be passed on to C should be
     stripped off by this method.
     
    -See Test::More for an example of its use.
    +See L for an example of its use.
     
     B This mechanism is I as it
     feels like a bit of an ugly hack in its current form.
    @@ -147,15 +147,15 @@ Test::Builder object.
     
       my $builder = Your::Class->builder;
     
    -This method returns the Test::Builder object associated with Your::Class.
    +This method returns the L object associated with Your::Class.
     It is not a constructor so you can call it as often as you like.
     
    -This is the preferred way to get the Test::Builder object.  You should
    +This is the preferred way to get the L object.  You should
     I get it via C<< Test::Builder->new >> as was previously
     recommended.
     
    -The object returned by builder() may change at runtime so you should
    -call builder() inside each function rather than store it in a global.
    +The object returned by C may change at runtime so you should
    +call C inside each function rather than store it in a global.
     
       sub ok {
           my $builder = Your::Class->builder;
    diff --git a/Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm b/Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm
    index 49a42cead16..b0554b89aca 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm
    @@ -1,9 +1,9 @@
     package Test::Builder::Tester;
     
     use strict;
    -our $VERSION = "1.23_002";
    +our $VERSION = "1.28";
     
    -use Test::Builder 0.98;
    +use Test::Builder 0.99;
     use Symbol;
     use Carp;
     
    @@ -25,20 +25,20 @@ Test::Builder
     =head1 DESCRIPTION
     
     A module that helps you test testing modules that are built with
    -B.
    +L.
     
     The testing system is designed to be used by performing a three step
     process for each test you wish to test.  This process starts with using
     C and C in advance to declare what the testsuite you
    -are testing will output with B to stdout and stderr.
    +are testing will output with L to stdout and stderr.
     
     You then can run the test(s) from your test suite that call
    -B.  At this point the output of B is
    -safely captured by B rather than being
    +L.  At this point the output of L is
    +safely captured by L rather than being
     interpreted as real test output.
     
     The final stage is to call C that will simply compare what you
    -predeclared to what B actually outputted, and report the
    +predeclared to what L actually outputted, and report the
     results back with a "ok" or "not ok" (with debugging) to the normal
     output.
     
    @@ -165,8 +165,8 @@ which is even the same as
        test_out("ok 2");
     
     Once C or C (or C or C) have
    -been called, all further output from B will be
    -captured by B.  This means that you will not
    +been called, all further output from L will be
    +captured by L.  This means that you will not
     be able perform further tests to the normal output in the normal way
     until you call C (well, unless you manually meddle with the
     output filehandles)
    @@ -189,7 +189,7 @@ sub test_err {
     
     =item test_fail
     
    -Because the standard failure message that B produces
    +Because the standard failure message that L produces
     whenever a test fails will be a common occurrence in your test error
     output, and because it has changed between Test::Builder versions, rather
     than forcing you to call C with the string all the time like
    @@ -228,7 +228,7 @@ sub test_fail {
     =item test_diag
     
     As most of the remaining expected output to the error stream will be
    -created by Test::Builder's C function, B
    +created by L's C function, L
     provides a convenience function C that you can use instead of
     C.
     
    @@ -242,7 +242,7 @@ you can write
     
        test_diag("Couldn't open file");
     
    -Remember that B's diag function will not add newlines to
    +Remember that L's diag function will not add newlines to
     the end of output and test_diag will. So to check
     
        Test::Builder->new->diag("foo\n","bar\n");
    @@ -267,7 +267,7 @@ sub test_diag {
     =item test_test
     
     Actually performs the output check testing the tests, comparing the
    -data (with C) that we have captured from B against
    +data (with C) that we have captured from L against
     what was declared with C and C.
     
     This takes name/value pairs that effect how the test is run.
    @@ -297,9 +297,9 @@ As a convenience, if only one argument is passed then this argument
     is assumed to be the name of the test (as in the above examples.)
     
     Once C has been run test output will be redirected back to
    -the original filehandles that B was connected to
    +the original filehandles that L was connected to
     (probably STDOUT and STDERR,) meaning any further tests you run
    -will function normally and cause success/errors for B.
    +will function normally and cause success/errors for L.
     
     =cut
     
    @@ -400,11 +400,11 @@ respectively, and the function called with no argument will return the
     current setting.
     
     To enable colouring from the command line, you can use the
    -B module like so:
    +L module like so:
     
        perl -Mlib=Text::Builder::Tester::Color test.t
     
    -Or by including the B module directly in
    +Or by including the L module directly in
     the PERL5LIB.
     
     =cut
    @@ -420,12 +420,12 @@ sub color {
     
     =head1 BUGS
     
    -Calls C<no_ending>> turning off the ending tests.
    +Calls C<< Test::Builder->no_ending >> turning off the ending tests.
     This is needed as otherwise it will trip out because we've run more
     tests than we strictly should have and it'll register any failures we
     had that we were testing for as real failures.
     
    -The color function doesn't work unless B is
    +The color function doesn't work unless L is
     compatible with your terminal.
     
     Bugs (and requests for new features) can be reported to the author
    @@ -436,7 +436,7 @@ L
     
     Copyright Mark Fowler Emark@twoshortplanks.comE 2002, 2004.
     
    -Some code taken from B and B, written by
    +Some code taken from L and L, written by
     Michael G Schwern Eschwern@pobox.comE.  Hence, those parts
     Copyright Micheal G Schwern 2001.  Used and distributed with
     permission.
    @@ -444,6 +444,14 @@ permission.
     This program is free software; you can redistribute it
     and/or modify it under the same terms as Perl itself.
     
    +=head1 MAINTAINERS
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
    +
     =head1 NOTES
     
     Thanks to Richard Clamp Erichardc@unixbeard.netE for letting
    diff --git a/Master/tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm b/Master/tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm
    index b269a2783d8..9a89310f1f3 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm
    @@ -1,7 +1,7 @@
     package Test::Builder::Tester::Color;
     
     use strict;
    -our $VERSION = "1.23_002";
    +our $VERSION = "1.290001";
     
     require Test::Builder::Tester;
     
    diff --git a/Master/tlpkg/tlperl/lib/Test/Harness.pm b/Master/tlpkg/tlperl/lib/Test/Harness.pm
    index aa54574b44c..d3759195e01 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Harness.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Harness.pm
    @@ -31,11 +31,11 @@ Test::Harness - Run Perl standard test scripts with statistics
     
     =head1 VERSION
     
    -Version 3.30
    +Version 3.35
     
     =cut
     
    -our $VERSION = '3.30';
    +our $VERSION = '3.35';
     
     # Backwards compatibility for exportable variable names.
     *verbose  = *Verbose;
    diff --git a/Master/tlpkg/tlperl/lib/Test/More.pm b/Master/tlpkg/tlperl/lib/Test/More.pm
    index 50f3e39b0ea..4bab267fcf6 100644
    --- a/Master/tlpkg/tlperl/lib/Test/More.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/More.pm
    @@ -9,7 +9,7 @@ use warnings;
     # We use a lot of subroutine prototypes
     ## no critic (Subroutines::ProhibitSubroutinePrototypes)
     
    -# Can't use Carp because it might cause use_ok() to accidentally succeed
    +# Can't use Carp because it might cause C to accidentally succeed
     # even though the module being used forgot to use Carp.  Yes, this
     # actually happened.
     sub _carp {
    @@ -17,7 +17,7 @@ sub _carp {
         return warn @_, " at $file line $line\n";
     }
     
    -our $VERSION = '1.001002';
    +our $VERSION = '1.001014';
     $VERSION = eval $VERSION;    ## no critic (BuiltinFunctions::ProhibitStringyEval)
     
     use Test::Builder::Module 0.99;
    @@ -144,7 +144,7 @@ but 'fail', you'd do:
     
       use Test::More tests => 23, import => ['!fail'];
     
    -Alternatively, you can use the plan() function.  Useful for when you
    +Alternatively, you can use the C function.  Useful for when you
     have to calculate the number of tests.
     
       use Test::More;
    @@ -204,7 +204,7 @@ sub import_extra {
     If you don't know how many tests you're going to run, you can issue
     the plan when you're done running tests.
     
    -$number_of_tests is the same as plan(), it's the number of tests you
    +$number_of_tests is the same as C, it's the number of tests you
     expected to run.  You can omit this, in which case the number of tests
     you ran doesn't matter, just the fact that your tests ran to
     conclusion.
    @@ -277,13 +277,13 @@ out.  It makes it very easy to find a test in your script when it fails
     and gives others an idea of your intentions.  $test_name is optional,
     but we B strongly encourage its use.
     
    -Should an ok() fail, it will produce some diagnostics:
    +Should an C fail, it will produce some diagnostics:
     
         not ok 18 - sufficient mucus
         #   Failed test 'sufficient mucus'
         #   in foo.t at line 42.
     
    -This is the same as Test::Simple's ok() routine.
    +This is the same as L's C routine.
     
     =cut
     
    @@ -301,7 +301,7 @@ sub ok ($;$) {
       is  ( $got, $expected, $test_name );
       isnt( $got, $expected, $test_name );
     
    -Similar to ok(), is() and isnt() compare their two arguments
    +Similar to C, C and C compare their two arguments
     with C and C respectively and use the result of that to
     determine if the test succeeded or failed.  So these:
     
    @@ -323,9 +323,9 @@ against C like this:
     
     (Mnemonic:  "This is that."  "This isn't that.")
     
    -So why use these?  They produce better diagnostics on failure.  ok()
    -cannot know what you are testing for (beyond the name), but is() and
    -isnt() know what the test was and why it failed.  For example this
    +So why use these?  They produce better diagnostics on failure.  C
    +cannot know what you are testing for (beyond the name), but C and
    +C know what the test was and why it failed.  For example this
     test:
     
         my $foo = 'waffle';  my $bar = 'yarblokos';
    @@ -341,7 +341,7 @@ Will produce something like this:
     
     So you can figure out what went wrong without rerunning the test.
     
    -You are encouraged to use is() and isnt() over ok() where possible,
    +You are encouraged to use C and C over C where possible,
     however do not be tempted to use them to find out if something is
     true or false!
     
    @@ -350,11 +350,11 @@ true or false!
     
     This does not check if C is true, it checks if
     it returns 1.  Very different.  Similar caveats exist for false and 0.
    -In these cases, use ok().
    +In these cases, use C.
     
       ok( exists $brooklyn{tree},    'A tree grows in Brooklyn' );
     
    -A simple call to isnt() usually does not provide a strong test but there
    +A simple call to C usually does not provide a strong test but there
     are cases when you cannot say much more about a value than that it is
     different from some other value:
     
    @@ -366,7 +366,7 @@ different from some other value:
       isnt $obj, $clone, "clone() produces a different object";
     
     For those grammatical pedants out there, there's an C
    -function which is an alias of isnt().
    +function which is an alias of C.
     
     =cut
     
    @@ -383,12 +383,13 @@ sub isnt ($$;$) {
     }
     
     *isn't = \&isnt;
    +# ' to unconfuse syntax higlighters
     
     =item B
     
       like( $got, qr/expected/, $test_name );
     
    -Similar to ok(), like() matches $got against the regex C.
    +Similar to C, C matches $got against the regex C.
     
     So this:
     
    @@ -409,7 +410,7 @@ currently not supported):
     
     Regex options may be placed on the end (C<'/expected/i'>).
     
    -Its advantages over ok() are similar to that of is() and isnt().  Better
    +Its advantages over C are similar to that of C and C.  Better
     diagnostics on failure.
     
     =cut
    @@ -424,7 +425,7 @@ sub like ($$;$) {
     
       unlike( $got, qr/expected/, $test_name );
     
    -Works exactly as like(), only it checks if $got B match the
    +Works exactly as C, only it checks if $got B match the
     given pattern.
     
     =cut
    @@ -453,7 +454,7 @@ passes if the comparison is true and fails otherwise.
         cmp_ok( $got, '&&', $expected, 'this && that' );
         ...etc...
     
    -Its advantage over ok() is when the test fails you'll know what $got
    +Its advantage over C is when the test fails you'll know what $got
     and $expected were:
     
         not ok 1
    @@ -463,7 +464,7 @@ and $expected were:
         #     undef
     
     It's also useful in those cases where you are comparing numbers and
    -is()'s use of C will interfere:
    +C's use of C will interfere:
     
         cmp_ok( $big_hairy_number, '==', $another_big_hairy_number );
     
    @@ -501,7 +502,7 @@ is almost exactly like saying:
     only without all the typing and with a better interface.  Handy for
     quickly testing an interface.
     
    -No matter how many @methods you check, a single can_ok() call counts
    +No matter how many @methods you check, a single C call counts
     as one test.  If you desire otherwise, use:
     
         foreach my $meth (@methods) {
    @@ -663,7 +664,7 @@ WHOA
       my $obj = new_ok( $class => \@args, $object_name );
     
     A convenience function which combines creating an object and calling
    -isa_ok() on that object.
    +C on that object.
     
     It is basically equivalent to:
     
    @@ -672,7 +673,7 @@ It is basically equivalent to:
     
     If @args is not given, an empty list will be used.
     
    -This function only works on new() and it assumes new() will return
    +This function only works on C and it assumes C will return
     just a single object which isa C<$class>.
     
     =cut
    @@ -704,7 +705,7 @@ sub new_ok {
     
         subtest $name => \&code;
     
    -subtest() runs the &code as its own little test with its own plan and
    +C runs the &code as its own little test with its own plan and
     its own result.  The main test counts this as a single test using the
     result of the whole subtest to determine if its ok or not ok.
     
    @@ -734,7 +735,7 @@ This would produce.
       ok 2 - An example subtest
       ok 3 - Third test
     
    -A subtest may call "skip_all".  No tests will be run, but the subtest is
    +A subtest may call C.  No tests will be run, but the subtest is
     considered a skip.
     
       subtest 'skippy' => sub {
    @@ -779,9 +780,9 @@ sub subtest {
     
     Sometimes you just want to say that the tests have passed.  Usually
     the case is you've got some complicated condition that is difficult to
    -wedge into an ok().  In this case, you can simply use pass() (to
    +wedge into an C.  In this case, you can simply use C (to
     declare the test ok) or fail (for not ok).  They are synonyms for
    -ok(1) and ok(0).
    +C and C.
     
     Use these very, very, very sparingly.
     
    @@ -896,7 +897,7 @@ If you just want to test a module can be loaded, use C.
     If you just want to load a module in a test, we recommend simply using
     C directly.  It will cause the test to stop.
     
    -It's recommended that you run use_ok() inside a BEGIN block so its
    +It's recommended that you run C inside a BEGIN block so its
     functions are exported at compile-time and prototypes are properly
     honored.
     
    @@ -1017,16 +1018,16 @@ B I'm not quite sure what will happen with filehandles.
     
       is_deeply( $got, $expected, $test_name );
     
    -Similar to is(), except that if $got and $expected are references, it
    +Similar to C, except that if $got and $expected are references, it
     does a deep comparison walking each data structure to see if they are
     equivalent.  If the two structures are different, it will display the
     place where they start differing.
     
    -is_deeply() compares the dereferenced values of references, the
    +C compares the dereferenced values of references, the
     references themselves (except for their type) are ignored.  This means
     aspects such as blessing and ties are not considered "different".
     
    -is_deeply() currently has very limited handling of function reference
    +C currently has very limited handling of function reference
     and globs.  It merely checks if they have the same referent.  This may
     improve in the future.
     
    @@ -1185,7 +1186,7 @@ interfere with the test.
     
       note(@diagnostic_message);
     
    -Like diag(), except the message will not be seen when the test is run
    +Like C, except the message will not be seen when the test is run
     in a harness.  It will only be visible in the verbose TAP stream.
     
     Handy for putting in notes which might be useful for debugging, but
    @@ -1232,7 +1233,7 @@ sub explain {
     
     Sometimes running a test under certain conditions will cause the
     test script to die.  A certain function or method isn't implemented
    -(such as fork() on MacOS), some resource isn't available (like a 
    +(such as C on MacOS), some resource isn't available (like a 
     net connection) or a module isn't available.  In these cases it's
     necessary to skip tests, or declare that they are supposed to fail
     but will work in the future (a todo test).
    @@ -1337,7 +1338,7 @@ because you haven't fixed a bug or haven't finished a new feature:
     
     With a todo block, the tests inside are expected to fail.  Test::More
     will run the tests normally, but print out special flags indicating
    -they are "todo".  Test::Harness will interpret failures as being ok.
    +they are "todo".  L will interpret failures as being ok.
     Should anything succeed, it will report it as an unexpected success.
     You then know the thing you had todo is done and can remove the
     TODO flag.
    @@ -1366,7 +1367,7 @@ inside an C with and using C.  In these extreme
     cases you have no choice but to skip over the broken tests entirely.
     
     The syntax and behavior is similar to a C except the
    -tests will be marked as failing but todo.  Test::Harness will
    +tests will be marked as failing but todo.  L will
     interpret them as passing.
     
     =cut
    @@ -1394,7 +1395,7 @@ sub todo_skip {
     
     B, use SKIP.
     This includes optional modules that aren't installed, running under
    -an OS that doesn't have some feature (like fork() or symlinks), or maybe
    +an OS that doesn't have some feature (like C or symlinks), or maybe
     you need an Internet connection and one isn't available.
     
     B, use TODO.  This
    @@ -1440,11 +1441,11 @@ sub BAIL_OUT {
     
     The use of the following functions is discouraged as they are not
     actually testing functions and produce no diagnostics to help figure
    -out what went wrong.  They were written before is_deeply() existed
    +out what went wrong.  They were written before C existed
     because I couldn't figure out how to display a useful diff of two
     arbitrary data structures.
     
    -These functions are usually used inside an ok().
    +These functions are usually used inside an C.
     
         ok( eq_array(\@got, \@expected) );
     
    @@ -1649,7 +1650,7 @@ sub _eq_hash {
     
       my $is_eq = eq_set(\@got, \@expected);
     
    -Similar to eq_array(), except the order of the elements is B
    +Similar to C, except the order of the elements is B
     important.  This is a deep check, but the irrelevancy of order only
     applies to the top level.
     
    @@ -1662,7 +1663,7 @@ Is better written:
     B By historical accident, this is not a true set comparison.
     While the order of elements does not matter, duplicate elements do.
     
    -B eq_set() does not know how to deal with references at the top
    +B C does not know how to deal with references at the top
     level.  The following is an example of a comparison which might not work:
     
         eq_set([\1, \2], [\2, \1]);
    @@ -1700,13 +1701,13 @@ sub eq_set {
     =head2 Extending and Embedding Test::More
     
     Sometimes the Test::More interface isn't quite enough.  Fortunately,
    -Test::More is built on top of Test::Builder which provides a single,
    +Test::More is built on top of L which provides a single,
     unified backend for any test library to use.  This means two test
    -libraries which both use Test::Builder B B be used together in the
     same program>.
     
     If you simply want to do a little tweaking of how the tests behave,
    -you can access the underlying Test::Builder object like so:
    +you can access the underlying L object like so:
     
     =over 4
     
    @@ -1714,7 +1715,7 @@ you can access the underlying Test::Builder object like so:
     
         my $test_builder = Test::More->builder;
     
    -Returns the Test::Builder object underlying Test::More for you to play
    +Returns the L object underlying Test::More for you to play
     with.
     
     
    @@ -1723,10 +1724,10 @@ with.
     
     =head1 EXIT CODES
     
    -If all your tests passed, Test::Builder will exit with zero (which is
    +If all your tests passed, L will exit with zero (which is
     normal).  If anything failed it will exit with how many failed.  If
     you run less (or more) tests than you planned, the missing (or extras)
    -will be considered failures.  If no tests were ever run Test::Builder
    +will be considered failures.  If no tests were ever run L
     will throw a warning and exit with 255.  If the test died, even after
     having successfully completed all its tests, it will still be
     considered a failure and will exit with 255.
    @@ -1785,8 +1786,9 @@ There is a full version history in the Changes file, and the Test::More versions
     =item utf8 / "Wide character in print"
     
     If you use utf8 or other non-ASCII characters with Test::More you
    -might get a "Wide character in print" warning.  Using C will not fix it.  Test::Builder (which powers
    +might get a "Wide character in print" warning.  Using
    +C<< binmode STDOUT, ":utf8" >> will not fix it.
    +L (which powers
     Test::More) duplicates STDOUT and STDERR.  So any changes to them,
     including changing their output disciplines, will not be seem by
     Test::More.
    @@ -1798,7 +1800,7 @@ as possible and before Test::More (or any other Test module) loads.
         use Test::More;
     
     A more direct work around is to change the filehandles used by
    -Test::Builder.
    +L.
     
         my $builder = Test::More->builder;
         binmode $builder->output,         ":encoding(utf8)";
    @@ -1808,14 +1810,14 @@ Test::Builder.
     
     =item Overloaded objects
     
    -String overloaded objects are compared B (or in cmp_ok()'s
    +String overloaded objects are compared B (or in C's
     case, strings or numbers as appropriate to the comparison op).  This
     prevents Test::More from piercing an object's interface allowing
     better blackbox testing.  So if a function starts returning overloaded
     objects instead of bare strings your tests won't notice the
     difference.  This is good.
     
    -However, it does mean that functions like is_deeply() cannot be used to
    +However, it does mean that functions like C cannot be used to
     test the internals of string overloaded objects.  In this case I would
     suggest L which contains more flexible testing functions for
     complex data structures.
    @@ -1823,7 +1825,7 @@ complex data structures.
     
     =item Threads
     
    -Test::More will only be aware of threads if "use threads" has been done
    +Test::More will only be aware of threads if C has been done
     I Test::More is loaded.  This is ok:
     
         use threads;
    @@ -1841,9 +1843,9 @@ This may cause problems:
     
     =head1 HISTORY
     
    -This is a case of convergent evolution with Joshua Pritikin's Test
    +This is a case of convergent evolution with Joshua Pritikin's L
     module.  I was largely unaware of its existence when I'd first
    -written my own ok() routines.  This module exists because I can't
    +written my own C routines.  This module exists because I can't
     figure out how to easily wedge test names into Test's interface (along
     with a few other problems).
     
    @@ -1856,18 +1858,29 @@ magic side-effects are kept to a minimum.  WYSIWYG.
     
     =head1 SEE ALSO
     
    +=head2
    +
    +=head2 ALTERNATIVES
    +
     L if all this confuses you and you just want to write
     some tests.  You can upgrade to Test::More later (it's forward
     compatible).
     
    -L is the test runner and output interpreter for Perl.
    -It's the thing that powers C and where the C utility
    -comes from.
    -
     L tests written with Test.pm, the original testing
     module, do not play well with other testing libraries.  Test::Legacy
     emulates the Test.pm interface and does play well with others.
     
    +=head2 TESTING FRAMEWORKS
    +
    +L The Fennec framework is a testers toolbox. It uses L
    +under the hood. It brings enhancements for forking, defining state, and
    +mocking. Fennec enhances several modules to work better together than they
    +would if you loaded them individually on your own.
    +
    +L Provides enhanced (L) syntax for Fennec.
    +
    +=head2 ADDITIONAL LIBRARIES
    +
     L for more ways to test complex data structures.
     And it plays well with Test::More.
     
    @@ -1877,8 +1890,22 @@ L gives you more powerful complex data structure testing.
     
     L shows the idea of embedded testing.
     
    +L The ultimate mocking library. Easily spawn objects defined on
    +the fly. Can also override, block, or reimplement packages as needed.
    +
    +L Quickly define fixture data for unit tests.
    +
    +=head2 OTHER COMPONENTS
    +
    +L is the test runner and output interpreter for Perl.
    +It's the thing that powers C and where the C utility
    +comes from.
    +
    +=head2 BUNDLES
    +
     L installs a whole bunch of useful test modules.
     
    +L Most commonly needed test functions and features.
     
     =head1 AUTHORS
     
    @@ -1887,6 +1914,14 @@ from Joshua Pritikin's Test module and lots of help from Barrie
     Slaymaker, Tony Bowden, blackstar.co.uk, chromatic, Fergal Daly and
     the perl-qa gang.
     
    +=head1 MAINTAINERS
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
    +
     
     =head1 BUGS
     
    @@ -1896,7 +1931,7 @@ See F to report and view bugs.
     =head1 SOURCE
     
     The source code repository for Test::More can be found at
    -F.
    +F.
     
     
     =head1 COPYRIGHT
    diff --git a/Master/tlpkg/tlperl/lib/Test/Simple.pm b/Master/tlpkg/tlperl/lib/Test/Simple.pm
    index 86143d63208..56457b407f8 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Simple.pm
    +++ b/Master/tlpkg/tlperl/lib/Test/Simple.pm
    @@ -4,7 +4,7 @@ use 5.006;
     
     use strict;
     
    -our $VERSION = '1.001002';
    +our $VERSION = '1.001014';
     $VERSION = eval $VERSION;    ## no critic (BuiltinFunctions::ProhibitStringyEval)
     
     use Test::Builder::Module 0.99;
    @@ -26,7 +26,7 @@ Test::Simple - Basic utilities for writing tests.
     
     =head1 DESCRIPTION
     
    -** If you are unfamiliar with testing B first! **
    +** If you are unfamiliar with testing B first!> **
     
     This is an extremely simple, extremely basic module for writing tests
     suitable for CPAN modules and other pursuits.  If you wish to do more
    @@ -35,7 +35,7 @@ for this one).
     
     The basic unit of Perl testing is the ok.  For each thing you want to
     test your program will print out an "ok" or "not ok" to indicate pass
    -or fail.  You do this with the ok() function (see below).
    +or fail.  You do this with the C function (see below).
     
     The only other constraint is you must pre-declare how many tests you
     plan to run.  This is in case something goes horribly wrong during the
    @@ -54,10 +54,10 @@ You must have a plan.
       ok( $foo eq $bar, $name );
       ok( $foo eq $bar );
     
    -ok() is given an expression (in this case C<$foo eq $bar>).  If it's
    +C is given an expression (in this case C<$foo eq $bar>).  If it's
     true, the test passed.  If it's false, it didn't.  That's about it.
     
    -ok() prints out either "ok" or "not ok" along with a test number (it
    +C prints out either "ok" or "not ok" along with a test number (it
     keeps track of that for you).
     
       # This produces "ok 1 - Hell not yet frozen over" (or not ok)
    @@ -84,7 +84,7 @@ sub ok ($;$) {    ## no critic (Subroutines::ProhibitSubroutinePrototypes)
     
     Test::Simple will start by printing number of tests run in the form
     "1..M" (so "1..5" means you're going to run 5 tests).  This strange
    -format lets Test::Harness know how many tests you plan on running in
    +format lets L know how many tests you plan on running in
     case something goes horribly wrong.
     
     If all your tests passed, Test::Simple will exit with zero (which is
    @@ -185,13 +185,13 @@ he wasn't in Tony's kitchen).  This is it.
     =item L
     
     More testing functions!  Once you outgrow Test::Simple, look at
    -Test::More.  Test::Simple is 100% forward compatible with Test::More
    -(i.e. you can just use Test::More instead of Test::Simple in your
    +L.  Test::Simple is 100% forward compatible with L
    +(i.e. you can just use L instead of Test::Simple in your
     programs and things will still work).
     
     =back
     
    -Look in Test::More's SEE ALSO for more testing modules.
    +Look in L's SEE ALSO for more testing modules.
     
     
     =head1 AUTHORS
    @@ -199,6 +199,13 @@ Look in Test::More's SEE ALSO for more testing modules.
     Idea by Tony Bowden and Paul Johnson, code by Michael G Schwern
     Eschwern@pobox.comE, wardrobe by Calvin Klein.
     
    +=head1 MAINTAINERS
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
     
     =head1 COPYRIGHT
     
    diff --git a/Master/tlpkg/tlperl/lib/Test/Tester.pm b/Master/tlpkg/tlperl/lib/Test/Tester.pm
    new file mode 100644
    index 00000000000..a5f1ccfdbb8
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/Tester.pm
    @@ -0,0 +1,652 @@
    +use strict;
    +
    +package Test::Tester;
    +
    +BEGIN
    +{
    +	if (*Test::Builder::new{CODE})
    +	{
    +		warn "You should load Test::Tester before Test::Builder (or anything that loads Test::Builder)" 
    +	}
    +}
    +
    +use Test::Builder;
    +use Test::Tester::CaptureRunner;
    +use Test::Tester::Delegate;
    +
    +require Exporter;
    +
    +use vars qw( @ISA @EXPORT $VERSION );
    +
    +$VERSION = "0.114";
    +@EXPORT = qw( run_tests check_tests check_test cmp_results show_space );
    +@ISA = qw( Exporter );
    +
    +my $Test = Test::Builder->new;
    +my $Capture = Test::Tester::Capture->new;
    +my $Delegator = Test::Tester::Delegate->new;
    +$Delegator->{Object} = $Test;
    +
    +my $runner = Test::Tester::CaptureRunner->new;
    +
    +my $want_space = $ENV{TESTTESTERSPACE};
    +
    +sub show_space
    +{
    +	$want_space = 1;
    +}
    +
    +my $colour = '';
    +my $reset = '';
    +
    +if (my $want_colour = $ENV{TESTTESTERCOLOUR} || $ENV{TESTTESTERCOLOUR})
    +{
    +	if (eval "require Term::ANSIColor")
    +	{
    +		my ($f, $b) = split(",", $want_colour);
    +		$colour = Term::ANSIColor::color($f).Term::ANSIColor::color("on_$b");
    +		$reset = Term::ANSIColor::color("reset");
    +	}
    +
    +}
    +
    +sub new_new
    +{
    +	return $Delegator;
    +}
    +
    +sub capture
    +{
    +	return Test::Tester::Capture->new;
    +}
    +
    +sub fh
    +{
    +	# experiment with capturing output, I don't like it
    +	$runner = Test::Tester::FHRunner->new;
    +
    +	return $Test;
    +}
    +
    +sub find_run_tests
    +{
    +	my $d = 1;
    +	my $found = 0;
    +	while ((not $found) and (my ($sub) = (caller($d))[3]) )
    +	{
    +#		print "$d: $sub\n";
    +		$found = ($sub eq "Test::Tester::run_tests");
    +		$d++;
    +	}
    +
    +#	die "Didn't find 'run_tests' in caller stack" unless $found;
    +	return $d;
    +}
    +
    +sub run_tests
    +{
    +	local($Delegator->{Object}) = $Capture;
    +
    +	$runner->run_tests(@_);
    +
    +	return ($runner->get_premature, $runner->get_results);
    +}
    +
    +sub check_test
    +{
    +	my $test = shift;
    +	my $expect = shift;
    +	my $name = shift;
    +	$name = "" unless defined($name);
    +
    +	@_ = ($test, [$expect], $name);
    +	goto &check_tests;
    +}
    +
    +sub check_tests
    +{
    +	my $test = shift;
    +	my $expects = shift;
    +	my $name = shift;
    +	$name = "" unless defined($name);
    +
    +	my ($prem, @results) = eval { run_tests($test, $name) };
    +
    +	$Test->ok(! $@, "Test '$name' completed") || $Test->diag($@);
    +	$Test->ok(! length($prem), "Test '$name' no premature diagnostication") ||
    +		$Test->diag("Before any testing anything, your tests said\n$prem");
    +
    +	local $Test::Builder::Level = $Test::Builder::Level + 1;
    +	cmp_results(\@results, $expects, $name);
    +	return ($prem, @results);
    +}
    +
    +sub cmp_field
    +{
    +	my ($result, $expect, $field, $desc) = @_;
    +
    +	if (defined $expect->{$field})
    +	{
    +		$Test->is_eq($result->{$field}, $expect->{$field},
    +			"$desc compare $field");
    +	}
    +}
    +
    +sub cmp_result
    +{
    +	my ($result, $expect, $name) = @_;
    +
    +	my $sub_name = $result->{name};
    +	$sub_name = "" unless defined($name);
    +
    +	my $desc = "subtest '$sub_name' of '$name'";
    +
    +	{
    +		local $Test::Builder::Level = $Test::Builder::Level + 1;
    +
    +		cmp_field($result, $expect, "ok", $desc);
    +
    +		cmp_field($result, $expect, "actual_ok", $desc);
    +
    +		cmp_field($result, $expect, "type", $desc);
    +
    +		cmp_field($result, $expect, "reason", $desc);
    +
    +		cmp_field($result, $expect, "name", $desc);
    +	}
    +
    +	# if we got no depth then default to 1
    +	my $depth = 1;
    +	if (exists $expect->{depth})
    +	{
    +		$depth = $expect->{depth};
    +	}
    +
    +	# if depth was explicitly undef then don't test it
    +	if (defined $depth)
    +	{
    +		$Test->is_eq($result->{depth}, $depth, "checking depth") ||
    +			$Test->diag('You need to change $Test::Builder::Level');
    +	}
    +
    +	if (defined(my $exp = $expect->{diag}))
    +	{
    +		# if there actually is some diag then put a \n on the end if it's not
    +		# there already
    +
    +		$exp .= "\n" if (length($exp) and $exp !~ /\n$/);
    +		if (not $Test->ok($result->{diag} eq $exp,
    +			"subtest '$sub_name' of '$name' compare diag")
    +		)
    +		{
    +			my $got = $result->{diag};
    +			my $glen = length($got);
    +			my $elen = length($exp);
    +			for ($got, $exp)
    +			{
    +				my @lines = split("\n", $_);
    +	 			$_ = join("\n", map {
    +					if ($want_space)
    +					{
    +						$_ = $colour.escape($_).$reset;
    +					}
    +					else
    +					{
    +						"'$colour$_$reset'"
    +					}
    +				} @lines);
    +			}
    +
    +			$Test->diag(<32 and $c<125) or $c == 10)
    +		{
    +			$res .= $char;
    +		}
    +		else
    +		{
    +			$res .= sprintf('\x{%x}', $c)
    +		}
    +	}
    +	return $res;
    +}
    +
    +sub cmp_results
    +{
    +	my ($results, $expects, $name) = @_;
    +
    +	$Test->is_num(scalar @$results, scalar @$expects, "Test '$name' result count");
    +
    +	for (my $i = 0; $i < @$expects; $i++)
    +	{
    +		my $expect = $expects->[$i];
    +		my $result = $results->[$i];
    +
    +		local $Test::Builder::Level = $Test::Builder::Level + 1;
    +		cmp_result($result, $expect, $name);
    +	}
    +}
    +
    +######## nicked from Test::More
    +sub plan {
    +	my(@plan) = @_;
    +
    +	my $caller = caller;
    +
    +	$Test->exported_to($caller);
    +
    +	my @imports = ();
    +	foreach my $idx (0..$#plan) {
    +		if( $plan[$idx] eq 'import' ) {
    +			my($tag, $imports) = splice @plan, $idx, 2;
    +			@imports = @$imports;
    +			last;
    +		}
    +	}
    +
    +	$Test->plan(@plan);
    +
    +	__PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
    +}
    +
    +sub import {
    +	my($class) = shift;
    +		{
    +			no warnings 'redefine';
    +			*Test::Builder::new = \&new_new;
    +		}
    +	goto &plan;
    +}
    +
    +sub _export_to_level
    +{
    +        my $pkg = shift;
    +	my $level = shift;
    +	(undef) = shift;	# redundant arg
    +	my $callpkg = caller($level);
    +	$pkg->export($callpkg, @_);
    +}
    +
    +
    +############
    +
    +1;
    +
    +__END__
    +
    +=head1 NAME
    +
    +Test::Tester - Ease testing test modules built with Test::Builder
    +
    +=head1 SYNOPSIS
    +
    +  use Test::Tester tests => 6;
    +
    +  use Test::MyStyle;
    +
    +  check_test(
    +    sub {
    +      is_mystyle_eq("this", "that", "not eq");
    +    },
    +    {
    +      ok => 0, # expect this to fail
    +      name => "not eq",
    +      diag => "Expected: 'this'\nGot: 'that'",
    +    }
    +  );
    +
    +or
    +
    +  use Test::Tester;
    +
    +  use Test::More tests => 3;
    +  use Test::MyStyle;
    +
    +  my ($premature, @results) = run_tests(
    +    sub {
    +      is_database_alive("dbname");
    +    }
    +  );
    +
    +  # now use Test::More::like to check the diagnostic output
    +
    +  like($results[0]->{diag}, "/^Database ping took \\d+ seconds$"/, "diag");
    +
    +=head1 DESCRIPTION
    +
    +If you have written a test module based on Test::Builder then Test::Tester
    +allows you to test it with the minimum of effort.
    +
    +=head1 HOW TO USE (THE EASY WAY)
    +
    +From version 0.08 Test::Tester no longer requires you to included anything
    +special in your test modules. All you need to do is
    +
    +  use Test::Tester;
    +
    +in your test script B any other Test::Builder based modules and away
    +you go.
    +
    +Other modules based on Test::Builder can be used to help with the
    +testing.  In fact you can even use functions from your module to test
    +other functions from the same module (while this is possible it is
    +probably not a good idea, if your module has bugs, then
    +using it to test itself may give the wrong answers).
    +
    +The easiest way to test is to do something like
    +
    +  check_test(
    +    sub { is_mystyle_eq("this", "that", "not eq") },
    +    {
    +      ok => 0, # we expect the test to fail
    +      name => "not eq",
    +      diag => "Expected: 'this'\nGot: 'that'",
    +    }
    +  );
    +
    +this will execute the is_mystyle_eq test, capturing it's results and
    +checking that they are what was expected.
    +
    +You may need to examine the test results in a more flexible way, for
    +example, the diagnostic output may be quite long or complex or it may involve
    +something that you cannot predict in advance like a timestamp. In this case
    +you can get direct access to the test results:
    +
    +  my ($premature, @results) = run_tests(
    +    sub {
    +      is_database_alive("dbname");
    +    }
    +  );
    +
    +  like($result[0]->{diag}, "/^Database ping took \\d+ seconds$"/, "diag");
    +
    +
    +We cannot predict how long the database ping will take so we use
    +Test::More's like() test to check that the diagnostic string is of the right
    +form.
    +
    +=head1 HOW TO USE (THE HARD WAY)
    +
    +I
    +
    +Make your module use the Test::Tester::Capture object instead of the
    +Test::Builder one. How to do this depends on your module but assuming that
    +your module holds the Test::Builder object in $Test and that all your test
    +routines access it through $Test then providing a function something like this
    +
    +  sub set_builder
    +  {
    +    $Test = shift;
    +  }
    +
    +should allow your test scripts to do
    +
    +  Test::YourModule::set_builder(Test::Tester->capture);
    +
    +and after that any tests inside your module will captured.
    +
    +=head1 TEST RESULTS
    +
    +The result of each test is captured in a hash. These hashes are the same as
    +the hashes returned by Test::Builder->details but with a couple of extra
    +fields.
    +
    +These fields are documented in L in the details() function
    +
    +=over 2
    +
    +=item ok
    +
    +Did the test pass?
    +
    +=item actual_ok
    +
    +Did the test really pass? That is, did the pass come from
    +Test::Builder->ok() or did it pass because it was a TODO test?
    +
    +=item name
    +
    +The name supplied for the test.
    +
    +=item type
    +
    +What kind of test? Possibilities include, skip, todo etc. See
    +L for more details.
    +
    +=item reason
    +
    +The reason for the skip, todo etc. See L for more details.
    +
    +=back
    +
    +These fields are exclusive to Test::Tester.
    +
    +=over 2
    +
    +=item diag
    +
    +Any diagnostics that were output for the test. This only includes
    +diagnostics output B the test result is declared.
    +
    +Note that Test::Builder ensures that any diagnostics end in a \n and
    +it in earlier versions of Test::Tester it was essential that you have
    +the final \n in your expected diagnostics. From version 0.10 onwards,
    +Test::Tester will add the \n if you forgot it. It will not add a \n if
    +you are expecting no diagnostics. See below for help tracking down
    +hard to find space and tab related problems.
    +
    +=item depth
    +
    +This allows you to check that your test module is setting the correct value
    +for $Test::Builder::Level and thus giving the correct file and line number
    +when a test fails. It is calculated by looking at caller() and
    +$Test::Builder::Level. It should count how many subroutines there are before
    +jumping into the function you are testing. So for example in
    +
    +  run_tests( sub { my_test_function("a", "b") } );
    +
    +the depth should be 1 and in
    +
    +  sub deeper { my_test_function("a", "b") }
    +
    +  run_tests(sub { deeper() });
    +
    +depth should be 2, that is 1 for the sub {} and one for deeper(). This
    +might seem a little complex but if your tests look like the simple
    +examples in this doc then you don't need to worry as the depth will
    +always be 1 and that's what Test::Tester expects by default.
    +
    +B: if you do not specify a value for depth in check_test() then it
    +automatically compares it against 1, if you really want to skip the depth
    +test then pass in undef.
    +
    +B: depth will not be correctly calculated for tests that run from a
    +signal handler or an END block or anywhere else that hides the call stack.
    +
    +=back
    +
    +Some of Test::Tester's functions return arrays of these hashes, just
    +like Test::Builder->details. That is, the hash for the first test will
    +be array element 1 (not 0). Element 0 will not be a hash it will be a
    +string which contains any diagnostic output that came before the first
    +test. This should usually be empty, if it's not, it means something
    +output diagnostics before any test results showed up.
    +
    +=head1 SPACES AND TABS
    +
    +Appearances can be deceptive, especially when it comes to emptiness. If you
    +are scratching your head trying to work out why Test::Tester is saying that
    +your diagnostics are wrong when they look perfectly right then the answer is
    +probably whitespace. From version 0.10 on, Test::Tester surrounds the
    +expected and got diag values with single quotes to make it easier to spot
    +trailing whitesapce. So in this example
    +
    +  # Got diag (5 bytes):
    +  # 'abcd '
    +  # Expected diag (4 bytes):
    +  # 'abcd'
    +
    +it is quite clear that there is a space at the end of the first string.
    +Another way to solve this problem is to use colour and inverse video on an
    +ANSI terminal, see below COLOUR below if you want this.
    +
    +Unfortunately this is sometimes not enough, neither colour nor quotes will
    +help you with problems involving tabs, other non-printing characters and
    +certain kinds of problems inherent in Unicode. To deal with this, you can
    +switch Test::Tester into a mode whereby all "tricky" characters are shown as
    +\{xx}. Tricky characters are those with ASCII code less than 33 or higher
    +than 126. This makes the output more difficult to read but much easier to
    +find subtle differences between strings. To turn on this mode either call
    +show_space() in your test script or set the TESTTESTERSPACE environment
    +variable to be a true value. The example above would then look like
    +
    +  # Got diag (5 bytes):
    +  # abcd\x{20}
    +  # Expected diag (4 bytes):
    +  # abcd
    +
    +=head1 COLOUR
    +
    +If you prefer to use colour as a means of finding tricky whitespace
    +characters then you can set the TESTTESTCOLOUR environment variable to a
    +comma separated pair of colours, the first for the foreground, the second
    +for the background. For example "white,red" will print white text on a red
    +background. This requires the Term::ANSIColor module. You can specify any
    +colour that would be acceptable to the Term::ANSIColor::color function.
    +
    +If you spell colour differently, that's no problem. The TESTTESTERCOLOR
    +variable also works (if both are set then the British spelling wins out).
    +
    +=head1 EXPORTED FUNCTIONS
    +
    +=head3 ($premature, @results) = run_tests(\&test_sub)
    +
    +\&test_sub is a reference to a subroutine.
    +
    +run_tests runs the subroutine in $test_sub and captures the results of any
    +tests inside it. You can run more than 1 test inside this subroutine if you
    +like.
    +
    +$premature is a string containing any diagnostic output from before
    +the first test.
    +
    +@results is an array of test result hashes.
    +
    +=head3 cmp_result(\%result, \%expect, $name)
    +
    +\%result is a ref to a test result hash.
    +
    +\%expect is a ref to a hash of expected values for the test result.
    +
    +cmp_result compares the result with the expected values. If any differences
    +are found it outputs diagnostics. You may leave out any field from the
    +expected result and cmp_result will not do the comparison of that field.
    +
    +=head3 cmp_results(\@results, \@expects, $name)
    +
    +\@results is a ref to an array of test results.
    +
    +\@expects is a ref to an array of hash refs.
    +
    +cmp_results checks that the results match the expected results and if any
    +differences are found it outputs diagnostics. It first checks that the
    +number of elements in \@results and \@expects is the same. Then it goes
    +through each result checking it against the expected result as in
    +cmp_result() above.
    +
    +=head3 ($premature, @results) = check_tests(\&test_sub, \@expects, $name)
    +
    +\&test_sub is a reference to a subroutine.
    +
    +\@expect is a ref to an array of hash refs which are expected test results.
    +
    +check_tests combines run_tests and cmp_tests into a single call. It also
    +checks if the tests died at any stage.
    +
    +It returns the same values as run_tests, so you can further examine the test
    +results if you need to.
    +
    +=head3 ($premature, @results) = check_test(\&test_sub, \%expect, $name)
    +
    +\&test_sub is a reference to a subroutine.
    +
    +\%expect is a ref to an hash of expected values for the test result.
    +
    +check_test is a wrapper around check_tests. It combines run_tests and
    +cmp_tests into a single call, checking if the test died. It assumes
    +that only a single test is run inside \&test_sub and include a test to
    +make sure this is true.
    +
    +It returns the same values as run_tests, so you can further examine the test
    +results if you need to.
    +
    +=head3 show_space()
    +
    +Turn on the escaping of characters as described in the SPACES AND TABS
    +section.
    +
    +=head1 HOW IT WORKS
    +
    +Normally, a test module (let's call it Test:MyStyle) calls
    +Test::Builder->new to get the Test::Builder object. Test::MyStyle calls
    +methods on this object to record information about test results. When
    +Test::Tester is loaded, it replaces Test::Builder's new() method with one
    +which returns a Test::Tester::Delegate object. Most of the time this object
    +behaves as the real Test::Builder object. Any methods that are called are
    +delegated to the real Test::Builder object so everything works perfectly.
    +However once we go into test mode, the method calls are no longer passed to
    +the real Test::Builder object, instead they go to the Test::Tester::Capture
    +object. This object seems exactly like the real Test::Builder object,
    +except, instead of outputting test results and diagnostics, it just records
    +all the information for later analysis.
    +
    +=head1 CAVEATS
    +
    +Support for calling Test::Builder->note is minimal. It's implemented
    +as an empty stub, so modules that use it will not crash but the calls
    +are not recorded for testing purposes like the others. Patches
    +welcome.
    +
    +=head1 SEE ALSO
    +
    +L the source of testing goodness. L
    +for an alternative approach to the problem tackled by Test::Tester -
    +captures the strings output by Test::Builder. This means you cannot get
    +separate access to the individual pieces of information and you must predict
    +B what your test will output.
    +
    +=head1 AUTHOR
    +
    +This module is copyright 2005 Fergal Daly , some parts
    +are based on other people's work.
    +
    +Plan handling lifted from Test::More. written by Michael G Schwern
    +.
    +
    +Test::Tester::Capture is a cut down and hacked up version of Test::Builder.
    +Test::Builder was written by chromatic  and Michael G
    +Schwern .
    +
    +=head1 LICENSE
    +
    +Under the same license as Perl itself
    +
    +See http://www.perl.com/perl/misc/Artistic.html
    +
    +=cut
    diff --git a/Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm b/Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm
    new file mode 100644
    index 00000000000..00e12e6458e
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm
    @@ -0,0 +1,231 @@
    +use strict;
    +
    +package Test::Tester::Capture;
    +
    +use Test::Builder;
    +
    +use vars qw( @ISA );
    +@ISA = qw( Test::Builder );
    +
    +# Make Test::Tester::Capture thread-safe for ithreads.
    +BEGIN {
    +	use Config;
    +	if( $] >= 5.008 && $Config{useithreads} ) {
    +		require threads::shared;
    +		threads::shared->import;
    +	}
    +	else {
    +		*share = sub { 0 };
    +		*lock  = sub { 0 };
    +	}
    +}
    +
    +my $Curr_Test = 0;      share($Curr_Test);
    +my @Test_Results = ();  share(@Test_Results);
    +my $Prem_Diag = {diag => ""};	 share($Curr_Test);
    +
    +sub new
    +{
    +  # Test::Tester::Capgture::new used to just return __PACKAGE__
    +  # because Test::Builder::new enforced it's singleton nature by
    +  # return __PACKAGE__. That has since changed, Test::Builder::new now
    +  # returns a blessed has and around version 0.78, Test::Builder::todo
    +  # started wanting to modify $self. To cope with this, we now return
    +  # a blessed hash. This is a short-term hack, the correct thing to do
    +  # is to detect which style of Test::Builder we're dealing with and
    +  # act appropriately.
    +
    +  my $class = shift;
    +  return bless {}, $class;
    +}
    +
    +sub ok {
    +	my($self, $test, $name) = @_;
    +
    +	# $test might contain an object which we don't want to accidentally
    +	# store, so we turn it into a boolean.
    +	$test = $test ? 1 : 0;
    +
    +	lock $Curr_Test;
    +	$Curr_Test++;
    +
    +	my($pack, $file, $line) = $self->caller;
    +
    +	my $todo = $self->todo($pack);
    +
    +	my $result = {};
    +	share($result);
    +
    +	unless( $test ) {
    +		@$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
    +	}
    +	else {
    +		@$result{ 'ok', 'actual_ok' } = ( 1, $test );
    +	}
    +
    +	if( defined $name ) {
    +		$name =~ s|#|\\#|g;	 # # in a name can confuse Test::Harness.
    +		$result->{name} = $name;
    +	}
    +	else {
    +		$result->{name} = '';
    +	}
    +
    +	if( $todo ) {
    +		my $what_todo = $todo;
    +		$result->{reason} = $what_todo;
    +		$result->{type}   = 'todo';
    +	}
    +	else {
    +		$result->{reason} = '';
    +		$result->{type}   = '';
    +	}
    +
    +	$Test_Results[$Curr_Test-1] = $result;
    +
    +	unless( $test ) {
    +		my $msg = $todo ? "Failed (TODO)" : "Failed";
    +		$result->{fail_diag} = ("	$msg test ($file at line $line)\n");
    +	} 
    +
    +	$result->{diag} = "";
    +	$result->{_level} = $Test::Builder::Level;
    +	$result->{_depth} = Test::Tester::find_run_tests();
    +
    +	return $test ? 1 : 0;
    +}
    +
    +sub skip {
    +	my($self, $why) = @_;
    +	$why ||= '';
    +
    +	lock($Curr_Test);
    +	$Curr_Test++;
    +
    +	my %result;
    +	share(%result);
    +	%result = (
    +		'ok'	  => 1,
    +		actual_ok => 1,
    +		name	  => '',
    +		type	  => 'skip',
    +		reason	=> $why,
    +		diag    => "",
    +		_level   => $Test::Builder::Level,
    +		_depth => Test::Tester::find_run_tests(),
    +	);
    +	$Test_Results[$Curr_Test-1] = \%result;
    +
    +	return 1;
    +}
    +
    +sub todo_skip {
    +	my($self, $why) = @_;
    +	$why ||= '';
    +
    +	lock($Curr_Test);
    +	$Curr_Test++;
    +
    +	my %result;
    +	share(%result);
    +	%result = (
    +		'ok'	  => 1,
    +		actual_ok => 0,
    +		name	  => '',
    +		type	  => 'todo_skip',
    +		reason	=> $why,
    +		diag    => "",
    +		_level   => $Test::Builder::Level,
    +		_depth => Test::Tester::find_run_tests(),
    +	);
    +
    +	$Test_Results[$Curr_Test-1] = \%result;
    +
    +	return 1;
    +}
    +
    +sub diag {
    +	my($self, @msgs) = @_;
    +	return unless @msgs;
    +
    +	# Prevent printing headers when compiling (i.e. -c)
    +	return if $^C;
    +
    +	# Escape each line with a #.
    +	foreach (@msgs) {
    +		$_ = 'undef' unless defined;
    +	}
    +
    +	push @msgs, "\n" unless $msgs[-1] =~ /\n\Z/;
    +
    +	my $result = $Curr_Test ? $Test_Results[$Curr_Test - 1] : $Prem_Diag;
    +
    +	$result->{diag} .= join("", @msgs);
    +
    +	return 0;
    +}
    +
    +sub details {
    +	return @Test_Results;
    +}
    +
    +
    +# Stub. Feel free to send me a patch to implement this.
    +sub note {
    +}
    +
    +sub explain {
    +	return Test::Builder::explain(@_);
    +}
    +
    +sub premature
    +{
    +	return $Prem_Diag->{diag};
    +}
    +
    +sub current_test
    +{
    +	if (@_ > 1)
    +	{
    +		die "Don't try to change the test number!";
    +	}
    +	else
    +	{
    +		return $Curr_Test;
    +	}
    +}
    +
    +sub reset
    +{
    +	$Curr_Test = 0;
    +	@Test_Results = ();
    +	$Prem_Diag = {diag => ""};
    +}
    +
    +1;
    +
    +__END__
    +
    +=head1 NAME
    +
    +Test::Tester::Capture - Help testing test modules built with Test::Builder
    +
    +=head1 DESCRIPTION
    +
    +This is a subclass of Test::Builder that overrides many of the methods so
    +that they don't output anything. It also keeps track of it's own set of test
    +results so that you can use Test::Builder based modules to perform tests on
    +other Test::Builder based modules.
    +
    +=head1 AUTHOR
    +
    +Most of the code here was lifted straight from Test::Builder and then had
    +chunks removed by Fergal Daly .
    +
    +=head1 LICENSE
    +
    +Under the same license as Perl itself
    +
    +See http://www.perl.com/perl/misc/Artistic.html
    +
    +=cut
    diff --git a/Master/tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm b/Master/tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm
    new file mode 100644
    index 00000000000..f14a4c145aa
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm
    @@ -0,0 +1,76 @@
    +# $Header: /home/fergal/my/cvs/Test-Tester/lib/Test/Tester/CaptureRunner.pm,v 1.3 2003/03/05 01:07:55 fergal Exp $
    +use strict;
    +
    +package Test::Tester::CaptureRunner;
    +
    +use Test::Tester::Capture;
    +require Exporter;
    +
    +sub new
    +{
    +	my $pkg = shift;
    +	my $self = bless {}, $pkg;
    +	return $self;
    +}
    +
    +sub run_tests
    +{
    +	my $self = shift;
    +
    +	my $test = shift;
    +
    +	capture()->reset;
    +
    +	$self->{StartLevel} = $Test::Builder::Level;
    +	&$test();
    +}
    +
    +sub get_results
    +{
    +	my $self = shift;
    +	my @results = capture()->details;
    +
    +	my $start = $self->{StartLevel};
    +	foreach my $res (@results)
    +	{
    +		next if defined $res->{depth};
    +		my $depth = $res->{_depth} - $res->{_level} - $start - 3;
    +#		print "my $depth = $res->{_depth} - $res->{_level} - $start - 1\n";
    +		$res->{depth} = $depth;
    +	}
    +
    +	return @results;
    +}
    +
    +sub get_premature
    +{
    +	return capture()->premature;
    +}
    +
    +sub capture
    +{
    +	return Test::Tester::Capture->new;
    +}
    +
    +__END__
    +
    +=head1 NAME
    +
    +Test::Tester::CaptureRunner - Help testing test modules built with Test::Builder
    +
    +=head1 DESCRIPTION
    +
    +This stuff if needed to allow me to play with other ways of monitoring the
    +test results.
    +
    +=head1 AUTHOR
    +
    +Copyright 2003 by Fergal Daly .
    +
    +=head1 LICENSE
    +
    +Under the same license as Perl itself
    +
    +See http://www.perl.com/perl/misc/Artistic.html
    +
    +=cut
    diff --git a/Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm b/Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm
    new file mode 100644
    index 00000000000..7ddb921cdfc
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm
    @@ -0,0 +1,32 @@
    +use strict;
    +use warnings;
    +
    +package Test::Tester::Delegate;
    +
    +use vars '$AUTOLOAD';
    +
    +sub new
    +{
    +	my $pkg = shift;
    +
    +	my $obj = shift;
    +	my $self = bless {}, $pkg;
    +
    +	return $self;
    +}
    +
    +sub AUTOLOAD
    +{
    +	my ($sub) = $AUTOLOAD =~ /.*::(.*?)$/;
    +
    +	return if $sub eq "DESTROY";
    +
    +	my $obj = $_[0]->{Object};
    +
    +	my $ref = $obj->can($sub);
    +	shift(@_);
    +	unshift(@_, $obj);
    +	goto &$ref;
    +}
    +
    +1;
    diff --git a/Master/tlpkg/tlperl/lib/Test/Tutorial.pod b/Master/tlpkg/tlperl/lib/Test/Tutorial.pod
    index b89fd07ca5d..a71a9c1b3f2 100644
    --- a/Master/tlpkg/tlperl/lib/Test/Tutorial.pod
    +++ b/Master/tlpkg/tlperl/lib/Test/Tutorial.pod
    @@ -90,7 +90,7 @@ along. [2]
     
     This is the hardest part of testing, where do you start?  People often get
     overwhelmed at the apparent enormity of the task of testing a whole module.
    -The best place to start is at the beginning.  C is an
    +The best place to start is at the beginning.  L is an
     object-oriented module, and that means you start by making an object.  Test
     C.
     
    @@ -176,18 +176,18 @@ Run that and you get:
         ok 8 -   year()
         # Looks like you failed 1 tests of 8.
     
    -Whoops, a failure! [4] C helpfully lets us know on what line the
    +Whoops, a failure! [4] L helpfully lets us know on what line the
     failure occurred, but not much else.  We were supposed to get 17, but we
     didn't.  What did we get??  Dunno.  You could re-run the test in the debugger
     or throw in some print statements to find out.
     
    -Instead, switch from L to L.  C
    -does everything C does, and more!  In fact, C does
    -things I the way C does.  You can literally swap
    -C out and put C in its place.  That's just what
    +Instead, switch from L to L.  L
    +does everything L does, and more!  In fact, L does
    +things I the way L does.  You can literally swap
    +L out and put L in its place.  That's just what
     we're going to do.
     
    -C does more than C.  The most important difference at
    +L does more than L.  The most important difference at
     this point is it provides more informative ways to say "ok".  Although you can
     write almost any test with a generic C, it can't tell you what went
     wrong.  The C function lets us declare that something is supposed to be
    @@ -210,7 +210,7 @@ the same as something else:
         is( $ical->month,   10,       '  month()' );
         is( $ical->year,    1964,     '  year()'  );
     
    -"Is C<$ical-Esec> 47?"  "Is C<$ical-Emin> 12?"  With C in place,
    +"Is C<< $ical->sec >> 47?"  "Is C<< $ical->min >> 12?"  With C in place,
     you get more information:
     
         1..8
    @@ -227,7 +227,7 @@ you get more information:
         ok 8 -   year()
         # Looks like you failed 1 tests of 8.
     
    -Aha. C<$ical-Eday> returned 16, but we expected 17.  A
    +Aha. C<< $ical->day >> returned 16, but we expected 17.  A
     quick check shows that the code is working fine, we made a mistake
     when writing the tests.  Change it to:
     
    @@ -297,7 +297,7 @@ Now we can test bunches of dates by just adding them to
     C<%ICal_Dates>.  Now that it's less work to test with more dates, you'll
     be inclined to just throw more in as you think of them.
     Only problem is, every time we add to that we have to keep adjusting
    -the C ##> line.  That can rapidly get
    +the L<< use Test::More tests => ## >> line.  That can rapidly get
     annoying.  There are ways to make this work better.
     
     First, we can calculate the plan dynamically using the C
    @@ -324,10 +324,10 @@ running some tests, don't know how many. [6]
     
         done_testing();   # reached the end safely
     
    -If you don't specify a plan, C expects to see C
    +If you don't specify a plan, L expects to see C
     before your program exits. It will warn you if you forget it. You can give
     C an optional number of tests you expected to run, and if the
    -number ran differs, C will give you another kind of warning.
    +number ran differs, L will give you another kind of warning.
     
     
     =head2 Informative names
    @@ -417,7 +417,7 @@ the test.
     A little bit of magic happens here.  When running on anything but MacOS, all
     the tests run normally.  But when on MacOS, C causes the entire
     contents of the SKIP block to be jumped over.  It never runs.  Instead,
    -C prints special output that tells C that the tests have
    +C prints special output that tells L that the tests have
     been skipped.
     
         1..7
    @@ -446,7 +446,7 @@ The tests are wholly and completely skipped. [10]  This will work.
     
     =head2 Todo tests
     
    -While thumbing through the C man page, I came across this:
    +While thumbing through the L man page, I came across this:
     
        ical
     
    @@ -497,12 +497,12 @@ Now when you run, it's a little different:
         #          got: '20010822T201551Z'
         #     expected: '20201231Z'
     
    -C doesn't say "Looks like you failed 1 tests of 1".  That '#
    -TODO' tells C "this is supposed to fail" and it treats a
    +L doesn't say "Looks like you failed 1 tests of 1".  That '#
    +TODO' tells L "this is supposed to fail" and it treats a
     failure as a successful test.  You can write tests even before
     you've fixed the underlying code.
     
    -If a TODO test passes, C will report it "UNEXPECTEDLY
    +If a TODO test passes, L will report it "UNEXPECTEDLY
     SUCCEEDED".  When that happens, remove the TODO block with C and
     turn it into a real test.
     
    @@ -517,7 +517,7 @@ in mind, it's very important to ensure your module works under taint
     mode.
     
     It's very simple to have your tests run under taint mode.  Just throw
    -a C<-T> into the C<#!> line.  C will read the switches
    +a C<-T> into the C<#!> line.  L will read the switches
     in C<#!> and use them to run your tests.
     
         #!/usr/bin/perl -Tw
    @@ -558,7 +558,7 @@ We'll get to testing the contents of lists later.
     
     But what happens if your test program dies halfway through?!  Since we
     didn't say how many tests we're going to run, how can we know it
    -failed?  No problem, C employs some magic to catch that death
    +failed?  No problem, L employs some magic to catch that death
     and turn the test into a failure, even if every test passed up to that
     point.
     
    @@ -594,6 +594,14 @@ bugs!
     
     Michael G Schwern Eschwern@pobox.comE and the perl-qa dancers!
     
    +=head1 MAINTAINERS
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
    +
     =head1 COPYRIGHT
     
     Copyright 2001 by Michael G Schwern Eschwern@pobox.comE.
    diff --git a/Master/tlpkg/tlperl/lib/Test/use/ok.pm b/Master/tlpkg/tlperl/lib/Test/use/ok.pm
    new file mode 100644
    index 00000000000..87d7cc52a55
    --- /dev/null
    +++ b/Master/tlpkg/tlperl/lib/Test/use/ok.pm
    @@ -0,0 +1,62 @@
    +package Test::use::ok;
    +use 5.005;
    +$Test::use::ok::VERSION = '0.16';
    +
    +__END__
    +
    +=head1 NAME
    +
    +Test::use::ok - Alternative to Test::More::use_ok
    +
    +=head1 SYNOPSIS
    +
    +    use ok 'Some::Module';
    +
    +=head1 DESCRIPTION
    +
    +According to the B documentation, it is recommended to run
    +C inside a C block, so functions are exported at
    +compile-time and prototypes are properly honored.
    +
    +That is, instead of writing this:
    +
    +    use_ok( 'Some::Module' );
    +    use_ok( 'Other::Module' );
    +
    +One should write this:
    +
    +    BEGIN { use_ok( 'Some::Module' ); }
    +    BEGIN { use_ok( 'Other::Module' ); }
    +
    +However, people often either forget to add C, or mistakenly group
    +C with other tests in a single C block, which can create subtle
    +differences in execution order.
    +
    +With this module, simply change all C in test scripts to C,
    +and they will be executed at C time.  The explicit space after C
    +makes it clear that this is a single compile-time action.
    +
    +=head1 SEE ALSO
    +
    +L
    +
    +=head1 MAINTAINER
    +
    +=over 4
    +
    +=item Chad Granum Eexodist@cpan.orgE
    +
    +=back
    +
    +=encoding utf8
    +
    +=head1 CC0 1.0 Universal
    +
    +To the extent possible under law, å”é³³ has waived all copyright and related
    +or neighboring rights to L.
    +
    +This work is published from Taiwan.
    +
    +L
    +
    +=cut
    diff --git a/Master/tlpkg/tlperl/lib/Text/Balanced.pm b/Master/tlpkg/tlperl/lib/Text/Balanced.pm
    index 07d956735c2..f1a5780a0b9 100644
    --- a/Master/tlpkg/tlperl/lib/Text/Balanced.pm
    +++ b/Master/tlpkg/tlperl/lib/Text/Balanced.pm
    @@ -10,7 +10,7 @@ use SelfLoader;
     
     use vars qw { $VERSION @ISA %EXPORT_TAGS };
     BEGIN {
    -	$VERSION     = '2.02';
    +	$VERSION     = '2.03';
     	@ISA         = 'Exporter';
     	%EXPORT_TAGS = (
     		ALL => [ qw{
    diff --git a/Master/tlpkg/tlperl/lib/Text/ParseWords.pm b/Master/tlpkg/tlperl/lib/Text/ParseWords.pm
    index 8771d436479..87f9c70a216 100644
    --- a/Master/tlpkg/tlperl/lib/Text/ParseWords.pm
    +++ b/Master/tlpkg/tlperl/lib/Text/ParseWords.pm
    @@ -2,7 +2,7 @@ package Text::ParseWords;
     
     use strict;
     require 5.006;
    -our $VERSION = "3.29";
    +our $VERSION = "3.30";
     
     
     use Exporter;
    @@ -202,8 +202,8 @@ one line you can call &parse_line() directly and save a function
     call.
     
     The $keep argument is a boolean flag.  If true, then the tokens are
    -split on the specified delimiter, but all other characters (quotes,
    -backslashes, etc.) are kept in the tokens.  If $keep is false then the
    +split on the specified delimiter, but all other characters (including
    +quotes and backslashes) are kept in the tokens.  If $keep is false then the
     &*quotewords() functions remove all quotes and backslashes that are
     not themselves backslash-escaped or inside of single quotes (i.e.,
     "ewords() tries to interpret these characters just like the Bourne
    @@ -243,27 +243,27 @@ demonstrating:
     
     =over 4
     
    -=item 0
    +=item 0Z<>
     
     a simple word
     
    -=item 1
    +=item 1Z<>
     
     multiple spaces are skipped because of our $delim
     
    -=item 2
    +=item 2Z<>
     
     use of quotes to include a space in a word
     
    -=item 3
    +=item 3Z<>
     
     use of a backslash to include a space in a word
     
    -=item 4
    +=item 4Z<>
     
     use of a backslash to remove the special meaning of a double-quote
     
    -=item 5
    +=item 5Z<>
     
     another simple word (note the lack of effect of the
     backslashed double-quote)
    @@ -295,4 +295,9 @@ for assuring me that a &nested_quotewords() would be useful, and to
     Jeff Friedl  for telling me not to worry about
     error-checking (sort of-- you had to be there).
     
    +=head1 COPYRIGHT AND LICENSE
    +
    +This library is free software; you may redistribute and/or modify it
    +under the same terms as Perl itself.
    +
     =cut
    diff --git a/Master/tlpkg/tlperl/lib/Tie/File.pm b/Master/tlpkg/tlperl/lib/Tie/File.pm
    index 16426c0d49e..df8a197867f 100644
    --- a/Master/tlpkg/tlperl/lib/Tie/File.pm
    +++ b/Master/tlpkg/tlperl/lib/Tie/File.pm
    @@ -7,7 +7,7 @@ use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
     sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
     
     
    -$VERSION = "1.00";
    +$VERSION = "1.01";
     my $DEFAULT_MEMORY_SIZE = 1<<21;    # 2 megabytes
     my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records
     my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful
    @@ -439,7 +439,8 @@ sub _splice {
         if ($pos < 0) {
           $pos += $oldsize;
           if ($pos < 0) {
    -        croak "Modification of non-creatable array value attempted, subscript $oldpos";
    +        croak "Modification of non-creatable array value attempted, " .
    +              "subscript $oldpos";
           }
         }
     
    @@ -676,7 +677,7 @@ sub _upcopy {
       } elsif ($dpos == $spos) {
         return;
       }
    -  
    +
       while (! defined ($len) || $len > 0) {
         my $readsize = ! defined($len) ? $blocksize
                    : $len > $blocksize ? $blocksize
    @@ -885,7 +886,7 @@ sub _fill_offsets {
     
       my $fh = $self->{fh};
       local *OFF = $self->{offsets};
    -  
    +
       $self->_seek(-1);           # tricky -- see comment at _seek
     
       # Tels says that inlining read_record() would make this loop
    @@ -1014,7 +1015,7 @@ sub flock {
       my $fh = $self->{fh};
       $op = LOCK_EX unless defined $op;
       my $locked = flock $fh, $op;
    -  
    +
       if ($locked && ($op & (LOCK_EX | LOCK_SH))) {
         # If you're locking the file, then presumably it's because
         # there might have been a write access by another process.
    @@ -1049,7 +1050,7 @@ sub offset {
         # If it's still undefined, there is no such record, so return 'undef'
         return unless defined $o;
        }
    - 
    +
       $self->{offsets}[$n];
     }
     
    @@ -1342,7 +1343,8 @@ sub _check_integrity {
           }
           if (! defined $offset && $self->{eof}) {
             $good = 0;
    -        _ci_warn("The offset table was marked complete, but it is missing element $.");
    +        _ci_warn("The offset table was marked complete, but it is missing " .
    +                 "element $.");
           }
         }
         if (@{$self->{offsets}} > $.+1) {
    @@ -1398,14 +1400,16 @@ sub _check_integrity {
     
       # Total size of deferbuffer should not exceed the specified limit
       if ($deferred_s > $self->{dw_size}) {
    -    _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}");
    +    _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit " .
    +             "of $self->{dw_size}");
         $good = 0;
       }
     
       # Total size of cached data should not exceed the specified limit
       if ($deferred_s + $cached > $self->{memory}) {
         my $total = $deferred_s + $cached;
    -    _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}");
    +    _ci_warn("total stored data size is $total which exceeds the limit " .
    +             "of $self->{memory}");
         $good = 0;
       }
     
    @@ -2490,7 +2494,8 @@ C, but it isn't, so don't.
     =item *
     
     There is a large memory overhead for each record offset and for each
    -cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry.
    +cache entry: about 310 bytes per cached data record, and about 21 bytes
    +per offset table entry.
     
     The per-record overhead will limit the maximum number of records you
     can access per file. Note that I the length of the array
    diff --git a/Master/tlpkg/tlperl/lib/Tie/Registry.pm b/Master/tlpkg/tlperl/lib/Tie/Registry.pm
    deleted file mode 100644
    index 2ded338d342..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tie/Registry.pm
    +++ /dev/null
    @@ -1,45 +0,0 @@
    -package Tie::Registry;
    -
    -# Tie/Registry.pm -- Provides backward compatibility for Win32::TieRegistry
    -# that was called Tie::Registry prior to version 0.20.
    -# by Tye McQueen, tye@metronet.com, see http://www.metronet.com/~tye/.
    -
    -use strict;
    -use Carp;
    -
    -use vars qw( $VERSION @ISA );
    -BEGIN {
    -	require Win32::TieRegistry;
    -	$VERSION = '0.15';
    -	@ISA     = qw{Win32::TieRegistry};
    -}
    -
    -sub import {
    -	my $pkg = shift;
    -	Win32::TieRegistry->import( ExportLevel => 1, SplitMultis => 0, @_ );
    -}
    -
    -1;
    -
    -__END__
    -
    -=pod
    -
    -=head1 NAME
    -
    -Tie::Registry - Legacy interface to Win32::TieRegistry (DEPRECATED)
    -
    -=head1 DESCRIPTION
    -
    -This module provides backward compatibility for L
    -that was called Tie::Registry prior to version 0.20.
    -
    -=head1 AUTHOR
    -
    -Tye McQueen Etye@metronet.comE
    -
    -=head1 COPYRIGHT
    -
    -Copyright 1999 Tye McQueen.
    -
    -=cut
    diff --git a/Master/tlpkg/tlperl/lib/Tie/Watch.pm b/Master/tlpkg/tlperl/lib/Tie/Watch.pm
    deleted file mode 100644
    index c1f551ab5c2..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tie/Watch.pm
    +++ /dev/null
    @@ -1,563 +0,0 @@
    -$Tie::Watch::VERSION = '1.302';
    -
    -package Tie::Watch;
    -
    -=head1 NAME
    -
    - Tie::Watch - place watchpoints on Perl variables.
    -
    -=head1 SYNOPSIS
    -
    - use Tie::Watch;
    -
    - $watch = Tie::Watch->new(
    -     -variable => \$frog,
    -     -debug    => 1,
    -     -shadow   => 0,			  
    -     -fetch    => [\&fetch, 'arg1', 'arg2', ..., 'argn'],
    -     -store    => \&store,
    -     -destroy  => sub {print "Final value=$frog.\n"},
    - }
    - %vinfo = $watch->Info;
    - $args  = $watch->Args(-fetch);
    - $val   = $watch->Fetch;
    - print "val=", $watch->Say($val), ".\n";
    - $watch->Store('Hello');
    - $watch->Unwatch;
    -
    -=head1 DESCRIPTION
    -
    -This class module binds one or more subroutines of your devising to a
    -Perl variable.  All variables can have B, B and
    -B callbacks.  Additionally, arrays can define B,
    -B, B, B, B, B, B,
    -B, B, B and B callbacks, and hashes
    -can define B, B, B, B and B
    -callbacks.  If these term are unfamiliar to you, I I suggest
    -you read L.
    -
    -With Tie::Watch you can:
    -
    - . alter a variable's value
    - . prevent a variable's value from being changed
    - . invoke a Perl/Tk callback when a variable changes
    - . trace references to a variable
    -
    -Callback format is patterned after the Perl/Tk scheme: supply either a
    -code reference, or, supply an array reference and pass the callback
    -code reference in the first element of the array, followed by callback
    -arguments.  (See examples in the Synopsis, above.)
    -
    -Tie::Watch provides default callbacks for any that you fail to
    -specify.  Other than negatively impacting performance, they perform
    -the standard action that you'd expect, so the variable behaves
    -"normally".  Once you override a default callback, perhaps to insert
    -debug code like print statements, your callback normally finishes by
    -calling the underlying (overridden) method.  But you don't have to!
    -
    -To map a tied method name to a default callback name simply lowercase
    -the tied method name and uppercase its first character.  So FETCH
    -becomes Fetch, NEXTKEY becomes Nextkey, etcetera.
    -
    -Here are two callbacks for a scalar. The B (read) callback does
    -nothing other than illustrate the fact that it returns the value to
    -assign the variable.  The B (write) callback uppercases the
    -variable and returns it.  In all cases the callback I return the
    -correct read or write value - typically, it does this by invoking the
    -underlying method.
    -
    - my $fetch_scalar = sub {
    -     my($self) = @_;
    -     $self->Fetch;
    - };
    -
    - my $store_scalar = sub {
    -     my($self, $new_val) = @_;
    -     $self->Store(uc $new_val);
    - };
    -
    -Here are B and B callbacks for either an array or hash.
    -They do essentially the same thing as the scalar callbacks, but
    -provide a little more information.
    -
    - my $fetch = sub {
    -     my($self, $key) = @_;
    -     my $val = $self->Fetch($key);
    -     print "In fetch callback, key=$key, val=", $self->Say($val);
    -     my $args = $self->Args(-fetch);
    -     print ", args=('", join("', '",  @$args), "')" if $args;
    -     print ".\n";
    -     $val;
    - };
    -
    - my $store = sub {
    -     my($self, $key, $new_val) = @_;
    -     my $val = $self->Fetch($key);
    -     $new_val = uc $new_val;
    -     $self->Store($key, $new_val);
    -     print "In store callback, key=$key, val=", $self->Say($val),
    -       ", new_val=", $self->Say($new_val);
    -     my $args = $self->Args(-store);
    -     print ", args=('", join("', '",  @$args), "')" if $args;
    -     print ".\n";
    -     $new_val;
    - };
    -
    -In all cases, the first parameter is a reference to the Watch object,
    -used to invoke the following class methods.
    -
    -=head1 METHODS
    -
    -=over 4
    -
    -=item $watch = Tie::Watch->new(-options => values);
    -
    -The watchpoint constructor method that accepts option/value pairs to
    -create and configure the Watch object.  The only required option is
    -B<-variable>.
    -
    -B<-variable> is a I to a scalar, array or hash variable.
    -
    -B<-debug> (default 0) is 1 to activate debug print statements internal
    -to Tie::Watch.
    -
    -B<-shadow> (default 1) is 0 to disable array and hash shadowing.  To
    -prevent infinite recursion Tie::Watch maintains parallel variables for
    -arrays and hashes.  When the watchpoint is created the parallel shadow
    -variable is initialized with the watched variable's contents, and when
    -the watchpoint is deleted the shadow variable is copied to the original
    -variable.  Thus, changes made during the watch process are not lost.
    -Shadowing is on my default.  If you disable shadowing any changes made
    -to an array or hash are lost when the watchpoint is deleted.
    -
    -Specify any of the following relevant callback parameters, in the
    -format described above: B<-fetch>, B<-store>, B<-destroy>.
    -Additionally for arrays: B<-clear>, B<-extend>, B<-fetchsize>,
    -B<-pop>, B<-push>, B<-shift>, B<-splice>, B<-storesize> and
    -B<-unshift>.  Additionally for hashes: B<-clear>, B<-delete>,
    -B<-exists>, B<-firstkey> and B<-nextkey>.
    -
    -=item $args = $watch->Args(-fetch);
    -
    -Returns a reference to a list of arguments for the specified callback,
    -or undefined if none.
    -
    -=item $watch->Fetch();  $watch->Fetch($key);
    -
    -Returns a variable's current value.  $key is required for an array or
    -hash.
    -
    -=item %vinfo = $watch->Info();
    -
    -Returns a hash detailing the internals of the Watch object, with these
    -keys:
    -
    - %vinfo = {
    -     -variable =>  SCALAR(0x200737f8)
    -     -debug    =>  '0'
    -     -shadow   =>  '1'
    -     -value    =>  'HELLO SCALAR'
    -     -destroy  =>  ARRAY(0x200f86cc)
    -     -fetch    =>  ARRAY(0x200f8558)
    -     -store    =>  ARRAY(0x200f85a0)
    -     -legible  =>  above data formatted as a list of string, for printing
    - }
    -
    -For array and hash Watch objects, the B<-value> key is replaced with a
    -B<-ptr> key which is a reference to the parallel array or hash.
    -Additionally, for an array or hash, there are key/value pairs for
    -all the variable specific callbacks.
    -
    -=item $watch->Say($val);
    -
    -Used mainly for debugging, it returns $val in quotes if required, or
    -the string "undefined" for undefined values.
    -
    -=item $watch->Store($new_val);  $watch->Store($key, $new_val);
    -
    -Store a variable's new value.  $key is required for an array or hash.
    -
    -=item $watch->Unwatch();
    -
    -Stop watching the variable.
    -
    -=back
    -
    -=head1 EFFICIENCY CONSIDERATIONS
    -
    -If you can live using the class methods provided, please do so.  You
    -can meddle with the object hash directly and improved watch
    -performance, at the risk of your code breaking in the future.
    -
    -=head1 AUTHOR
    -
    -Stephen O. Lidie
    -
    -=head1 HISTORY
    -
    - lusol@Lehigh.EDU, LUCC, 96/05/30
    - . Original version 0.92 release, based on the Trace module from Hans Mulder,
    -   and ideas from Tim Bunce.
    -
    - lusol@Lehigh.EDU, LUCC, 96/12/25
    - . Version 0.96, release two inner references detected by Perl 5.004.
    -
    - lusol@Lehigh.EDU, LUCC, 97/01/11
    - . Version 0.97, fix Makefile.PL and MANIFEST (thanks Andreas Koenig).
    -   Make sure test.pl doesn't fail if Tk isn't installed.
    -
    - Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 97/10/03
    - . Version 0.98, implement -shadow option for arrays and hashes.
    -
    - Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 98/02/11
    - . Version 0.99, finally, with Perl 5.004_57, we can completely watch arrays.
    -   With tied array support this module is essentially complete, so its been
    -   optimized for speed at the expense of clarity - sorry about that. The
    -   Delete() method has been renamed Unwatch() because it conflicts with the
    -   builtin delete().
    -
    - Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 99/04/04
    - . Version 1.0, for Perl 5.005_03, update Makefile.PL for ActiveState, and
    -   add two examples (one for Perl/Tk).
    -
    - sol0@lehigh.edu, Lehigh University Computing Center, 2003/06/07
    - . Version 1.1, for Perl 5.8, can trace a reference now, patch from Slaven
    -   Rezic.
    -
    - sol0@lehigh.edu, Lehigh University Computing Center, 2005/05/17
    - . Version 1.2, for Perl 5.8, per Rob Seegel's suggestion, support array
    -   DELETE and EXISTS.
    -
    -=head1 COPYRIGHT
    -
    -Copyright (C) 1996 - 2005 Stephen O. Lidie. All rights reserved.
    -
    -This program is free software; you can redistribute it and/or modify it under
    -the same terms as Perl itself.
    -
    -=cut
    -
    -use 5.004_57;;
    -use Carp;
    -use strict;
    -use subs qw/normalize_callbacks/;
    -use vars qw/@array_callbacks @hash_callbacks @scalar_callbacks/;
    -
    -@array_callbacks  = qw/-clear -delete -destroy -exists -extend -fetch
    -                       -fetchsize -pop -push -shift -splice -store
    -                       -storesize -unshift/;
    -@hash_callbacks   = qw/-clear -delete -destroy -exists -fetch -firstkey 
    -                       -nextkey -store/;
    -@scalar_callbacks = qw/-destroy -fetch -store/;
    -
    -sub new {
    -
    -    # Watch constructor.  The *real* constructor is Tie::Watch->base_watch(),
    -    # invoked by methods in other Watch packages, depending upon the variable's
    -    # type.  Here we supply defaulted parameter values and then verify them,
    -    # normalize all callbacks and bind the variable to the appropriate package.
    -
    -    my($class, %args) = @_;
    -    my $version = $Tie::Watch::VERSION;
    -    my (%arg_defaults) = (-debug => 0, -shadow  => 1);
    -    my $variable = $args{-variable};
    -    croak "Tie::Watch::new(): -variable is required." if not defined $variable;
    -
    -    my($type, $watch_obj) = (ref $variable, undef);
    -    if ($type =~ /(SCALAR|REF)/) {
    -	@arg_defaults{@scalar_callbacks} = (
    -	    [\&Tie::Watch::Scalar::Destroy],  [\&Tie::Watch::Scalar::Fetch],
    -	    [\&Tie::Watch::Scalar::Store]);
    -    } elsif ($type =~ /ARRAY/) {
    -	@arg_defaults{@array_callbacks}  = (
    -	    [\&Tie::Watch::Array::Clear],     [\&Tie::Watch::Array::Delete],
    -	    [\&Tie::Watch::Array::Destroy],   [\&Tie::Watch::Array::Exists],
    -	    [\&Tie::Watch::Array::Extend],    [\&Tie::Watch::Array::Fetch],
    -	    [\&Tie::Watch::Array::Fetchsize], [\&Tie::Watch::Array::Pop],
    -            [\&Tie::Watch::Array::Push],      [\&Tie::Watch::Array::Shift],
    -            [\&Tie::Watch::Array::Splice],    [\&Tie::Watch::Array::Store],
    -            [\&Tie::Watch::Array::Storesize], [\&Tie::Watch::Array::Unshift]);
    -    } elsif ($type =~ /HASH/) {
    -	@arg_defaults{@hash_callbacks}   = (
    -	    [\&Tie::Watch::Hash::Clear],      [\&Tie::Watch::Hash::Delete],
    -	    [\&Tie::Watch::Hash::Destroy],    [\&Tie::Watch::Hash::Exists],
    -            [\&Tie::Watch::Hash::Fetch],      [\&Tie::Watch::Hash::Firstkey],
    -            [\&Tie::Watch::Hash::Nextkey],    [\&Tie::Watch::Hash::Store]);
    -    } else {
    -	croak "Tie::Watch::new() - not a variable reference.";
    -    }
    -    my(@margs, %ahsh, $args, @args);
    -    @margs = grep ! defined $args{$_}, keys %arg_defaults;
    -    %ahsh = %args;                         # argument hash
    -    @ahsh{@margs} = @arg_defaults{@margs}; # fill in missing values
    -    normalize_callbacks \%ahsh;
    -
    -    if ($type =~ /(SCALAR|REF)/) {
    -        $watch_obj = tie $$variable, 'Tie::Watch::Scalar', %ahsh;
    -    } elsif ($type =~ /ARRAY/) {
    -        $watch_obj = tie @$variable, 'Tie::Watch::Array',  %ahsh;
    -    } elsif ($type =~ /HASH/) {
    -        $watch_obj = tie %$variable, 'Tie::Watch::Hash',   %ahsh;
    -    }
    -    $watch_obj;
    -
    -} # end new, Watch constructor
    -
    -sub Args {
    -
    -    # Return a reference to a list of callback arguments, or undef if none.
    -    #
    -    # $_[0] = self
    -    # $_[1] = callback type
    -
    -    defined $_[0]->{$_[1]}->[1] ? [@{$_[0]->{$_[1]}}[1 .. $#{$_[0]->{$_[1]}}]]
    -	: undef;
    -
    -} # end Args
    -
    -sub Info {
    -
    -    # Info() method subclassed by other Watch modules.
    -    #
    -    # $_[0] = self
    -    # @_[1 .. $#_] = optional callback types
    -
    -    my(%vinfo, @results);
    -    my(@info) = (qw/-variable -debug -shadow/);
    -    push @info, @_[1 .. $#_] if scalar @_ >= 2;
    -    foreach my $type (@info) {
    -	push @results, 	sprintf('%-10s: ', substr $type, 1) .
    -	    $_[0]->Say($_[0]->{$type});
    -	$vinfo{$type} = $_[0]->{$type};
    -    }
    -    $vinfo{-legible} = [@results];
    -    %vinfo;
    -
    -} # end Info
    -
    -sub Say {
    -
    -    # For debugging, mainly.
    -    #
    -    # $_[0] = self
    -    # $_[1] = value
    -
    -    defined $_[1] ? (ref($_[1]) ne '' ? $_[1] : "'$_[1]'") : "undefined";
    -
    -} # end Say
    -
    -sub Unwatch {
    -
    -    # Stop watching a variable by releasing the last reference and untieing it.
    -    # Update the original variable with its shadow, if appropriate.
    -    #
    -    # $_[0] = self
    -
    -    my $variable = $_[0]->{-variable};
    -    my $type = ref $variable;
    -    my $copy; $copy = $_[0]->{-ptr} if $type !~ /(SCALAR|REF)/;
    -    my $shadow = $_[0]->{-shadow};
    -    undef $_[0];
    -    if ($type =~ /(SCALAR|REF)/) {
    -	untie $$variable;
    -    } elsif ($type =~ /ARRAY/) {
    -	untie @$variable;
    -	@$variable = @$copy if $shadow;
    -    } elsif ($type =~ /HASH/) {
    -	untie %$variable;
    -	%$variable = %$copy if $shadow;
    -    } else {
    -	croak "Tie::Watch::Delete() - not a variable reference.";
    -    }
    -
    -} # end Unwatch
    -
    -# Watch private methods.
    -
    -sub base_watch {
    -
    -    # Watch base class constructor invoked by other Watch modules.
    -
    -    my($class, %args) = @_;
    -    my $watch_obj = {%args}; 
    -    $watch_obj;
    -
    -} # end base_watch
    -
    -sub callback {
    -    
    -    # Execute a Watch callback, either the default or user specified.
    -    # Note that the arguments are those supplied by the tied method,
    -    # not those (if any) specified by the user when the watch object
    -    # was instantiated.  This is for performance reasons, and why the
    -    # Args() method exists.
    -    #
    -    # $_[0] = self
    -    # $_[1] = callback type
    -    # $_[2] through $#_ = tied arguments
    -
    -    &{$_[0]->{$_[1]}->[0]} ($_[0], @_[2 .. $#_]);
    -
    -} # end callback
    -
    -sub normalize_callbacks {
    -
    -    # Ensure all callbacks are normalized in [\&code, @args] format.
    -
    -    my($args_ref) = @_;
    -    my($cb, $ref);
    -    foreach my $arg (keys %$args_ref) {
    -	next if $arg =~ /variable|debug|shadow/;
    -	$cb = $args_ref->{$arg};
    -	$ref = ref $cb;
    -	if ($ref =~ /CODE/) {
    -	    $args_ref->{$arg} = [$cb];
    -	} elsif ($ref !~ /ARRAY/) {
    -	    croak "Tie::Watch:  malformed callback $arg=$cb.";
    -	}
    -    }
    -
    -} # end normalize_callbacks
    -
    -###############################################################################
    -
    -package # temporarily disabled from PAUSE indexer because of permission problems
    - Tie::Watch::Scalar;
    -
    -use Carp;
    -@Tie::Watch::Scalar::ISA = qw/Tie::Watch/;
    -
    -sub TIESCALAR {
    -
    -    my($class, %args) = @_;
    -    my $variable = $args{-variable};
    -    my $watch_obj = Tie::Watch->base_watch(%args);
    -    $watch_obj->{-value} = $$variable;
    -    print "WatchScalar new: $variable created, \@_=", join(',', @_), "!\n"
    -	if $watch_obj->{-debug};
    -    bless $watch_obj, $class;
    -
    -} # end TIESCALAR
    -
    -sub Info {$_[0]->SUPER::Info('-value', @Tie::Watch::scalar_callbacks)}
    -
    -# Default scalar callbacks.
    -
    -sub Destroy {undef %{$_[0]}}
    -sub Fetch   {$_[0]->{-value}}
    -sub Store   {$_[0]->{-value} = $_[1]}
    -
    -# Scalar access methods.
    -
    -sub DESTROY {$_[0]->callback('-destroy')}
    -sub FETCH   {$_[0]->callback('-fetch')}
    -sub STORE   {$_[0]->callback('-store', $_[1])}
    -
    -###############################################################################
    -
    -package # temporarily disabled from PAUSE indexer because of permission problems
    - Tie::Watch::Array;
    -
    -use Carp;
    -@Tie::Watch::Array::ISA = qw/Tie::Watch/;
    -
    -sub TIEARRAY {
    -
    -    my($class, %args) = @_;
    -    my($variable, $shadow) = @args{-variable, -shadow};
    -    my @copy; @copy = @$variable if $shadow; # make a private copy of user's array
    -    $args{-ptr} = $shadow ? \@copy : [];
    -    my $watch_obj = Tie::Watch->base_watch(%args);
    -    print "WatchArray new: $variable created, \@_=", join(',', @_), "!\n"
    -	if $watch_obj->{-debug};
    -    bless $watch_obj, $class;
    -
    -} # end TIEARRAY
    -
    -sub Info {$_[0]->SUPER::Info('-ptr', @Tie::Watch::array_callbacks)}
    -
    -# Default array callbacks.
    -
    -sub Clear     {$_[0]->{-ptr} = ()}
    -sub Delete    {delete $_[0]->{-ptr}->[$_[1]]}
    -sub Destroy   {undef %{$_[0]}}
    -sub Exists    {exists $_[0]->{-ptr}->[$_[1]]}
    -sub Extend    {}
    -sub Fetch     {$_[0]->{-ptr}->[$_[1]]}
    -sub Fetchsize {scalar @{$_[0]->{-ptr}}}
    -sub Pop       {pop @{$_[0]->{-ptr}}}
    -sub Push      {push @{$_[0]->{-ptr}}, @_[1 .. $#_]}
    -sub Shift     {shift @{$_[0]->{-ptr}}}
    -sub Splice    {
    -    my $n = scalar @_;		# splice() is wierd!
    -    return splice @{$_[0]->{-ptr}}, $_[1]                      if $n == 2;
    -    return splice @{$_[0]->{-ptr}}, $_[1], $_[2]               if $n == 3;
    -    return splice @{$_[0]->{-ptr}}, $_[1], $_[2], @_[3 .. $#_] if $n >= 4;
    -}
    -sub Store     {$_[0]->{-ptr}->[$_[1]] = $_[2]}
    -sub Storesize {$#{$_[0]->{-ptr}} = $_[1] - 1}
    -sub Unshift   {unshift @{$_[0]->{-ptr}}, @_[1 .. $#_]}
    -
    -# Array access methods.
    -
    -sub CLEAR     {$_[0]->callback('-clear')}
    -sub DELETE    {$_[0]->callback('-delete', $_[1])}
    -sub DESTROY   {$_[0]->callback('-destroy')}
    -sub EXISTS    {$_[0]->callback('-exists', $_[1])}
    -sub EXTEND    {$_[0]->callback('-extend', $_[1])}
    -sub FETCH     {$_[0]->callback('-fetch', $_[1])}
    -sub FETCHSIZE {$_[0]->callback('-fetchsize')}
    -sub POP       {$_[0]->callback('-pop')}
    -sub PUSH      {$_[0]->callback('-push', @_[1 .. $#_])}
    -sub SHIFT     {$_[0]->callback('-shift')}
    -sub SPLICE    {$_[0]->callback('-splice', @_[1 .. $#_])}
    -sub STORE     {$_[0]->callback('-store', $_[1], $_[2])}
    -sub STORESIZE {$_[0]->callback('-storesize', $_[1])}
    -sub UNSHIFT   {$_[0]->callback('-unshift', @_[1 .. $#_])}
    -
    -###############################################################################
    -
    -package # temporarily disabled from PAUSE indexer because of permission problems
    - Tie::Watch::Hash;
    -
    -use Carp;
    -@Tie::Watch::Hash::ISA = qw/Tie::Watch/;
    -
    -sub TIEHASH {
    -
    -    my($class, %args) = @_;
    -    my($variable, $shadow) = @args{-variable, -shadow};
    -    my %copy; %copy = %$variable if $shadow; # make a private copy of user's hash
    -    $args{-ptr} = $shadow ? \%copy : {};
    -    my $watch_obj = Tie::Watch->base_watch(%args);
    -    print "WatchHash new: $variable created, \@_=", join(',', @_), "!\n"
    -	if $watch_obj->{-debug};
    -    bless $watch_obj, $class;
    -
    -} # end TIEHASH
    -
    -sub Info {$_[0]->SUPER::Info('-ptr', @Tie::Watch::hash_callbacks)}
    -
    -# Default hash callbacks.
    -
    -sub Clear    {$_[0]->{-ptr} = ()}
    -sub Delete   {delete $_[0]->{-ptr}->{$_[1]}}
    -sub Destroy  {undef %{$_[0]}}
    -sub Exists   {exists $_[0]->{-ptr}->{$_[1]}}
    -sub Fetch    {$_[0]->{-ptr}->{$_[1]}}
    -sub Firstkey {my $c = keys %{$_[0]->{-ptr}}; each %{$_[0]->{-ptr}}}
    -sub Nextkey  {each %{$_[0]->{-ptr}}}
    -sub Store    {$_[0]->{-ptr}->{$_[1]} = $_[2]}
    -
    -# Hash access methods.
    -
    -sub CLEAR    {$_[0]->callback('-clear')}
    -sub DELETE   {$_[0]->callback('-delete', $_[1])}
    -sub DESTROY  {$_[0]->callback('-destroy')}
    -sub EXISTS   {$_[0]->callback('-exists', $_[1])}
    -sub FETCH    {$_[0]->callback('-fetch', $_[1])}
    -sub FIRSTKEY {$_[0]->callback('-firstkey')}
    -sub NEXTKEY  {$_[0]->callback('-nextkey')}
    -sub STORE    {$_[0]->callback('-store', $_[1], $_[2])}
    -
    -1;
    diff --git a/Master/tlpkg/tlperl/lib/Time/Piece.pm b/Master/tlpkg/tlperl/lib/Time/Piece.pm
    index f913db99be9..aaf63eebb78 100644
    --- a/Master/tlpkg/tlperl/lib/Time/Piece.pm
    +++ b/Master/tlpkg/tlperl/lib/Time/Piece.pm
    @@ -19,7 +19,7 @@ our %EXPORT_TAGS = (
         ':override' => 'internal',
         );
     
    -our $VERSION = '1.27';
    +our $VERSION = '1.29';
     
     bootstrap Time::Piece $VERSION;
     
    diff --git a/Master/tlpkg/tlperl/lib/Time/Seconds.pm b/Master/tlpkg/tlperl/lib/Time/Seconds.pm
    index b001f20402e..8e5b52b269f 100644
    --- a/Master/tlpkg/tlperl/lib/Time/Seconds.pm
    +++ b/Master/tlpkg/tlperl/lib/Time/Seconds.pm
    @@ -2,7 +2,7 @@ package Time::Seconds;
     use strict;
     use vars qw/@EXPORT @EXPORT_OK/;
     
    -our $VERSION = '1.27';
    +our $VERSION = '1.29';
     
     use Exporter 5.57 'import';
     
    @@ -160,7 +160,7 @@ sub pretty {
             if ($s >= ONE_HOUR) {
                 if ($s >= ONE_DAY) {
                     my $days = sprintf("%d", $s->days); # does a "floor"
    -                $str = $days . " days, ";
    +                $str .= $days . " days, ";
                     $s -= ($days * ONE_DAY);
                 }
                 my $hours = sprintf("%d", $s->hours);
    diff --git a/Master/tlpkg/tlperl/lib/Time/Zone.pm b/Master/tlpkg/tlperl/lib/Time/Zone.pm
    deleted file mode 100644
    index 8a40f9158c8..00000000000
    --- a/Master/tlpkg/tlperl/lib/Time/Zone.pm
    +++ /dev/null
    @@ -1,291 +0,0 @@
    -
    -package Time::Zone;
    -
    -=head1 NAME
    -
    -Time::Zone -- miscellaneous timezone manipulations routines
    -
    -=head1 SYNOPSIS
    -
    -	use Time::Zone;
    -	print tz2zone();
    -	print tz2zone($ENV{'TZ'});
    -	print tz2zone($ENV{'TZ'}, time());
    -	print tz2zone($ENV{'TZ'}, undef, $isdst);
    -	$offset = tz_local_offset();
    -	$offset = tz_offset($TZ);
    -
    -=head1 DESCRIPTION
    -
    -This is a collection of miscellaneous timezone manipulation routines.
    -
    -C parses the TZ environment variable and returns a timezone
    -string suitable for inclusion in L-like output.  It opionally takes
    -a timezone string, a time, and a is-dst flag.
    -
    -C determins the offset from GMT time in seconds.  It
    -only does the calculation once.
    -
    -C determines the offset from GMT in seconds of a specified
    -timezone.  
    -
    -C determines the name of the timezone based on its offset
    -
    -=head1 AUTHORS
    -
    -Graham Barr 
    -David Muir Sharnoff 
    -Paul Foley 
    -
    -=cut
    -
    -require 5.002;
    -
    -require Exporter;
    -use Carp;
    -use strict;
    -use vars qw(@ISA @EXPORT $VERSION @tz_local);
    -
    -@ISA = qw(Exporter);
    -@EXPORT = qw(tz2zone tz_local_offset tz_offset tz_name);
    -$VERSION = "2.24";
    -
    -# Parts stolen from code by Paul Foley 
    -
    -sub tz2zone (;$$$)
    -{
    -	my($TZ, $time, $isdst) = @_;
    -
    -	use vars qw(%tzn_cache);
    -
    -	$TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : ''
    -	    unless $TZ;
    -
    -	# Hack to deal with 'PST8PDT' format of TZ
    -	# Note that this can't deal with all the esoteric forms, but it
    -	# does recognize the most common: [:]STDoff[DST[off][,rule]]
    -
    -	if (! defined $isdst) {
    -		my $j;
    -		$time = time() unless $time;
    -		($j, $j, $j, $j, $j, $j, $j, $j, $isdst) = localtime($time);
    -	}
    -
    -	if (defined $tzn_cache{$TZ}->[$isdst]) {
    -		return $tzn_cache{$TZ}->[$isdst];
    -	}
    -      
    -	if ($TZ =~ /^
    -		    ( [^:\d+\-,] {3,} )
    -		    ( [+-] ?
    -		      \d {1,2}
    -		      ( : \d {1,2} ) {0,2} 
    -		    )
    -		    ( [^\d+\-,] {3,} )?
    -		    /x
    -	    ) {
    -		my $dsttz = defined($4) ? $4 : $1;
    -		$TZ = $isdst ? $dsttz : $1;
    -		$tzn_cache{$TZ} = [ $1, $dsttz ];
    -	} else {
    -		$tzn_cache{$TZ} = [ $TZ, $TZ ];
    -	}
    -	return $TZ;
    -}
    -
    -sub tz_local_offset (;$)
    -{
    -	my ($time) = @_;
    -
    -	$time = time() unless $time;
    -	my (@l) = localtime($time);
    -	my $isdst = $l[8];
    -
    -	if (defined($tz_local[$isdst])) {
    -		return $tz_local[$isdst];
    -	}
    -
    -	$tz_local[$isdst] = &calc_off($time);
    -
    -	return $tz_local[$isdst];
    -}
    -
    -sub calc_off
    -{
    -	my ($time) = @_;
    -
    -	my (@l) = localtime($time);
    -	my (@g) = gmtime($time);
    -
    -	my $off;
    -
    -	$off =     $l[0] - $g[0]
    -		+ ($l[1] - $g[1]) * 60
    -		+ ($l[2] - $g[2]) * 3600;
    -
    -	# subscript 7 is yday.
    -
    -	if ($l[7] == $g[7]) {
    -		# done
    -	} elsif ($l[7] == $g[7] + 1) {
    -		$off += 86400;
    -	} elsif ($l[7] == $g[7] - 1) {
    -		$off -= 86400;
    -	} elsif ($l[7] < $g[7]) {
    -		# crossed over a year boundry!
    -		# localtime is beginning of year, gmt is end
    -		# therefore local is ahead
    -		$off += 86400;
    -	} else {
    -		$off -= 86400;
    -	}
    -
    -	return $off;
    -}
    -
    -# constants
    -
    -CONFIG: {
    -	use vars qw(%dstZone %zoneOff %dstZoneOff %Zone);
    -
    -	my @dstZone = (
    -	#   "ndt"  =>   -2*3600-1800,	 # Newfoundland Daylight   
    -	    "brst" =>   -2*3600,         # Brazil Summer Time (East Daylight)
    -	    "adt"  =>   -3*3600,  	 # Atlantic Daylight   
    -	    "edt"  =>   -4*3600,  	 # Eastern Daylight
    -	    "cdt"  =>   -5*3600,  	 # Central Daylight
    -	    "mdt"  =>   -6*3600,  	 # Mountain Daylight
    -	    "pdt"  =>   -7*3600,  	 # Pacific Daylight
    -	    "akdt" =>   -8*3600,         # Alaska Daylight
    -	    "ydt"  =>   -8*3600,  	 # Yukon Daylight
    -	    "hdt"  =>   -9*3600,  	 # Hawaii Daylight
    -	    "bst"  =>   +1*3600,  	 # British Summer   
    -	    "mest" =>   +2*3600,  	 # Middle European Summer   
    -	    "metdst" => +2*3600, 	 # Middle European DST
    -	    "sst"  =>   +2*3600,  	 # Swedish Summer
    -	    "fst"  =>   +2*3600,  	 # French Summer
    -            "cest" =>   +2*3600,         # Central European Daylight
    -            "eest" =>   +3*3600,         # Eastern European Summer
    -            "msd"  =>   +4*3600,         # Moscow Daylight
    -	    "wadt" =>   +8*3600,  	 # West Australian Daylight
    -	    "kdt"  =>  +10*3600,	 # Korean Daylight
    -	#   "cadt" =>  +10*3600+1800,	 # Central Australian Daylight
    -	    "aedt" =>  +11*3600,  	 # Eastern Australian Daylight
    -	    "eadt" =>  +11*3600,  	 # Eastern Australian Daylight
    -	    "nzd"  =>  +13*3600,  	 # New Zealand Daylight   
    -	    "nzdt" =>  +13*3600,  	 # New Zealand Daylight   
    -	);
    -
    -	my @Zone = (
    -	    "gmt"	=>   0,  	 # Greenwich Mean
    -	    "ut"        =>   0,  	 # Universal (Coordinated)
    -	    "utc"       =>   0,
    -	    "wet"       =>   0,  	 # Western European
    -	    "wat"       =>  -1*3600,	 # West Africa
    -	    "at"        =>  -2*3600,	 # Azores
    -	    "fnt"	=>  -2*3600,	 # Brazil Time (Extreme East - Fernando Noronha)
    -	    "brt"	=>  -3*3600,	 # Brazil Time (East Standard - Brasilia)
    -	# For completeness.  BST is also British Summer, and GST is also Guam Standard.
    -	#   "bst"       =>  -3*3600,	 # Brazil Standard
    -	#   "gst"       =>  -3*3600,	 # Greenland Standard
    -	#   "nft"       =>  -3*3600-1800,# Newfoundland
    -	#   "nst"       =>  -3*3600-1800,# Newfoundland Standard
    -	    "mnt"	=>  -4*3600,	 # Brazil Time (West Standard - Manaus)
    -	    "ewt"       =>  -4*3600,	 # U.S. Eastern War Time
    -	    "ast"       =>  -4*3600,	 # Atlantic Standard
    -	    "est"       =>  -5*3600,	 # Eastern Standard
    -	    "act"	=>  -5*3600,	 # Brazil Time (Extreme West - Acre)
    -	    "cst"       =>  -6*3600,	 # Central Standard
    -	    "mst"       =>  -7*3600,	 # Mountain Standard
    -	    "pst"       =>  -8*3600,	 # Pacific Standard
    -	    "akst"      =>  -9*3600,     # Alaska Standard
    -	    "yst"	=>  -9*3600,	 # Yukon Standard
    -	    "hst"	=> -10*3600,	 # Hawaii Standard
    -	    "cat"	=> -10*3600,	 # Central Alaska
    -	    "ahst"	=> -10*3600,	 # Alaska-Hawaii Standard
    -	    "nt"	=> -11*3600,	 # Nome
    -	    "idlw"	=> -12*3600,	 # International Date Line West
    -	    "cet"	=>  +1*3600, 	 # Central European
    -	    "mez"	=>  +1*3600, 	 # Central European (German)
    -	    "ect"	=>  +1*3600, 	 # Central European (French)
    -	    "met"	=>  +1*3600, 	 # Middle European
    -	    "mewt"	=>  +1*3600, 	 # Middle European Winter
    -	    "swt"	=>  +1*3600, 	 # Swedish Winter
    -	    "set"	=>  +1*3600, 	 # Seychelles
    -	    "fwt"	=>  +1*3600, 	 # French Winter
    -	    "eet"	=>  +2*3600, 	 # Eastern Europe, USSR Zone 1
    -	    "ukr"	=>  +2*3600, 	 # Ukraine
    -	    "bt"	=>  +3*3600, 	 # Baghdad, USSR Zone 2
    -            "msk"       =>  +3*3600,     # Moscow
    -	#   "it"	=>  +3*3600+1800,# Iran
    -	    "zp4"	=>  +4*3600, 	 # USSR Zone 3
    -	    "zp5"	=>  +5*3600, 	 # USSR Zone 4
    -	#   "ist"	=>  +5*3600+1800,# Indian Standard
    -	    "zp6"	=>  +6*3600, 	 # USSR Zone 5
    -	# For completeness.  NST is also Newfoundland Stanard, and SST is also Swedish Summer.
    -	#   "nst"	=>  +6*3600+1800,# North Sumatra
    -	#   "sst"	=>  +7*3600, 	 # South Sumatra, USSR Zone 6
    -	#   "jt"	=>  +7*3600+1800,# Java (3pm in Cronusland!)
    -	    "wst"	=>  +8*3600, 	 # West Australian Standard
    -	    "hkt"	=>  +8*3600, 	 # Hong Kong
    -	    "cct"	=>  +8*3600, 	 # China Coast, USSR Zone 7
    -	    "jst"	=>  +9*3600,	 # Japan Standard, USSR Zone 8
    -	    "kst"	=>  +9*3600,	 # Korean Standard
    -	#   "cast"	=>  +9*3600+1800,# Central Australian Standard
    -	    "aest"	=> +10*3600,	 # Eastern Australian Standard
    -	    "east"	=> +10*3600,	 # Eastern Australian Standard
    -	    "gst"	=> +10*3600,	 # Guam Standard, USSR Zone 9
    -	    "nzt"	=> +12*3600,	 # New Zealand
    -	    "nzst"	=> +12*3600,	 # New Zealand Standard
    -	    "idle"	=> +12*3600,	 # International Date Line East
    -	);
    -
    -	%Zone = @Zone;
    -	%dstZone = @dstZone;
    -	%zoneOff = reverse(@Zone);
    -	%dstZoneOff = reverse(@dstZone);
    -
    -}
    -
    -sub tz_offset (;$$)
    -{
    -	my ($zone, $time) = @_;
    -
    -	return &tz_local_offset($time) unless($zone);
    -
    -	$time = time() unless $time;
    -	my(@l) = localtime($time);
    -	my $dst = $l[8];
    -
    -	$zone = lc $zone;
    -
    -	if($zone =~ /^(([\-\+])\d\d?)(\d\d)$/) {
    -		my $v = $2 . $3;
    -		return $1 * 3600 + $v * 60;
    -	} elsif (exists $dstZone{$zone} && ($dst || !exists $Zone{$zone})) {
    -		return $dstZone{$zone};
    -	} elsif(exists $Zone{$zone}) {
    -		return $Zone{$zone};
    -	}
    -	undef;
    -}
    -
    -sub tz_name (;$$)
    -{
    -	my ($off, $dst) = @_;
    -
    -	$off = tz_offset()
    -		unless(defined $off);
    -
    -	$dst = (localtime(time))[8]
    -		unless(defined $dst);
    -
    -	if (exists $dstZoneOff{$off} && ($dst || !exists $zoneOff{$off})) {
    -		return $dstZoneOff{$off};
    -	} elsif (exists $zoneOff{$off}) {
    -		return $zoneOff{$off};
    -	}
    -	sprintf("%+05d", int($off / 60) * 100 + $off % 60);
    -}
    -
    -1;
    diff --git a/Master/tlpkg/tlperl/lib/Tk.pm b/Master/tlpkg/tlperl/lib/Tk.pm
    deleted file mode 100644
    index 831eef8e3fc..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk.pm
    +++ /dev/null
    @@ -1,857 +0,0 @@
    -#
    -# Copyright (c) 1992-1994 The Regents of the University of California.
    -# Copyright (c) 1994 Sun Microsystems, Inc.
    -# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
    -# This program is free software; you can redistribute it and/or
    -
    -# modify it under the same terms as Perl itself, subject
    -# to additional disclaimer in Tk/license.terms due to partial
    -# derivation from Tk8.0 sources.
    -#
    -package Tk;
    -require 5.007;
    -use     Tk::Event ();
    -use     AutoLoader qw(AUTOLOAD);
    -use     DynaLoader;
    -use     Cwd();
    -use base qw(Exporter DynaLoader);
    -use     File::Spec qw();
    -
    -*fileevent = \&Tk::Event::IO::fileevent;
    -
    -use Encode;
    -$Tk::encodeStopOnError = Encode::FB_QUIET();
    -$Tk::encodeFallback    = Encode::FB_PERLQQ(); # Encode::FB_DEFAULT();
    -
    -our %font_encoding = ('jis0208' => 'jis0208-raw',
    -                      'jis0212' => 'jis0212-raw',
    -                      'ksc5601' => 'ksc5601-raw',
    -                      'gb2312'  => 'gb2312-raw',
    -                      'unicode' => 'ucs-2le',
    -                     );
    -
    -BEGIN {
    - if($^O eq 'cygwin')
    -  {
    -   require Tk::Config;
    -   $Tk::platform = $Tk::Config::win_arch;
    -   $Tk::platform = 'unix' if $Tk::platform eq 'x';
    -  }
    - else
    -  {
    -   $Tk::platform = ($^O eq 'MSWin32') ? $^O : 'unix';
    -  }
    -};
    -
    -$Tk::tearoff = 1 if ($Tk::platform eq 'unix');
    -
    -
    -@EXPORT    = qw(Exists Ev exit MainLoop DoOneEvent tkinit);
    -@EXPORT_OK = qw(NoOp after *widget *event lsearch catch $XS_VERSION
    -                DONT_WAIT WINDOW_EVENTS  FILE_EVENTS TIMER_EVENTS
    -                IDLE_EVENTS ALL_EVENTS
    -                NORMAL_BG ACTIVE_BG SELECT_BG
    -                SELECT_FG TROUGH INDICATOR DISABLED BLACK WHITE);
    -%EXPORT_TAGS = (eventtypes => [qw(DONT_WAIT WINDOW_EVENTS  FILE_EVENTS
    -                                  TIMER_EVENTS IDLE_EVENTS ALL_EVENTS)],
    -                variables  => [qw(*widget *event)],
    -                colors     => [qw(NORMAL_BG ACTIVE_BG SELECT_BG SELECT_FG
    -                                  TROUGH INDICATOR DISABLED BLACK WHITE)],
    -               );
    -
    -use strict;
    -use Carp;
    -
    -# Record author's perforce depot record
    -#$Tk::CHANGE      = q$Change: 3279 $;
    -#$Tk::CHANGE      = 'sfsvn-' . q$Change: 27 $;
    -$Tk::CHANGE      = 'git-controlled';
    -
    -# $tk_version and $tk_patchLevel are reset by pTk when a mainwindow
    -# is created, $VERSION is checked by bootstrap
    -$Tk::version     = '8.4';
    -$Tk::patchLevel  = '8.4';
    -$Tk::VERSION     = '804.033';
    -$Tk::VERSION     =~ s{_}{};
    -$Tk::XS_VERSION  = $Tk::VERSION;
    -$Tk::strictMotif = 0;
    -
    -
    -{($Tk::library) = __FILE__ =~ /^(.*)\.pm$/;}
    -$Tk::library = Tk->findINC('.') unless (defined($Tk::library) && -d $Tk::library);
    -
    -$Tk::widget  = undef;
    -$Tk::event   = undef;
    -
    -use vars qw($inMainLoop);
    -
    -bootstrap Tk;
    -
    -my $boot_time = timeofday();
    -
    -# This is a workround for Solaris X11 locale handling
    -Preload(DynaLoader::dl_findfile('-L/usr/openwin/lib','-lX11'))
    -  if (NeedPreload() && -d '/usr/openwin/lib');
    -
    -use Tk::Submethods ('option'    =>  [qw(add get clear readfile)],
    -                    'clipboard' =>  [qw(clear append get)]
    -                   );
    -
    -#
    -# Next few routines are here as perl code as doing caller()
    -# in XS code is very complicated - so instead C code calls BackTrace
    -#
    -sub _backTrace
    -{
    - my $w = shift;
    - my $i = 1;
    - my ($pack,$file,$line,$sub) = caller($i++);
    - while (1)
    -  {
    -   my $loc = "at $file line $line";
    -   ($pack,$file,$line,$sub) = caller($i++);
    -   last unless defined($sub);
    -   return 1 if $sub eq '(eval)';
    -   $w->AddErrorInfo("$sub $loc");
    -  }
    - return 0;
    -}
    -
    -sub BackTrace
    -{
    - my $w = shift;
    - return unless (@_ || $@);
    - my $mess = (@_) ? shift : "$@";
    - die "$mess\n" if $w->_backTrace;
    - # if we get here we are not in an eval so report now
    - $w->Fail($mess);
    - $w->idletasks;
    - die "$mess\n";
    -}
    -
    -#
    -# This is a $SIG{__DIE__} handler which does not change the $@
    -# string in the way 'croak' does, but rather add to Tk's ErrorInfo.
    -# It stops at 1st enclosing eval on assumption that the eval
    -# is part of Tk call process and will add its own context to ErrorInfo
    -# and then pass on the error.
    -#
    -sub __DIE__
    -{
    - my $mess = shift;
    - my $w = $Tk::widget;
    - # Note that if a __DIE__ handler returns it re-dies up the chain.
    - return unless defined($w) && Exists($w);
    - # This special message is for exit() as an exception see pTkCallback.c
    - return if $mess =~/^_TK_EXIT_\(\d+\)/;
    - return if $w->_backTrace;
    - # Not in an eval - should not happen
    -}
    -
    -sub XEvent::xy { shift->Info('xy') }
    -
    -sub XEvent::AUTOLOAD
    -{
    - my ($meth) = $XEvent::AUTOLOAD =~ /(\w)$/;
    - no strict 'refs';
    - *{$XEvent::AUTOLOAD} = sub { shift->Info($meth) };
    - goto &$XEvent::AUTOLOAD;
    -}
    -
    -sub NoOp  { }
    -
    -sub Ev
    -{
    - if (@_ == 1)
    -  {
    -   my $arg = $_[0];
    -   return bless (((ref $arg) ? $arg : \$arg), 'Tk::Ev');
    -  }
    - else
    -  {
    -   return bless [@_],'Tk::Ev';
    -  }
    -}
    -
    -sub InitClass
    -{
    - my ($package,$parent) = @_;
    - croak "Unexpected type of parent $parent" unless(ref $parent);
    - croak "$parent is not a widget" unless($parent->IsWidget);
    - my $mw = $parent->MainWindow;
    - my $hash = $mw->TkHash('_ClassInit_');
    - unless (exists $hash->{$package})
    -  {
    -   $package->Install($mw);
    -   $hash->{$package} = $package->ClassInit($mw);
    -  }
    -}
    -
    -require Tk::Widget;
    -require Tk::Image;
    -require Tk::MainWindow;
    -
    -sub Exists
    -{my $w = shift;
    - return defined($w) && ref($w) && $w->IsWidget && $w->exists;
    -}
    -
    -sub Time_So_Far
    -{
    - return timeofday() - $boot_time;
    -}
    -
    -# Selection* are not autoloaded as names are too long.
    -
    -sub SelectionOwn
    -{my $widget = shift;
    - selection('own',(@_,$widget));
    -}
    -
    -sub SelectionOwner
    -{
    - selection('own','-displayof',@_);
    -}
    -
    -sub SelectionClear
    -{
    - selection('clear','-displayof',@_);
    -}
    -
    -sub SelectionExists
    -{
    - selection('exists','-displayof',@_);
    -}
    -
    -sub SelectionHandle
    -{my $widget = shift;
    - my $command = pop;
    - selection('handle',@_,$widget,$command);
    -}
    -
    -sub SplitString
    -{
    - local $_ = shift;
    - my (@arr, $tmp);
    - while (/\{([^{}]*)\}|((?:[^\s\\]|\\.)+)/gs) {
    -   if (defined $1) { push @arr, $1 }
    -   else { $tmp = $2 ; $tmp =~ s/\\([\s\\])/$1/g; push @arr, $tmp }
    - }
    - # carp '('.join(',',@arr).")";
    - return @arr;
    -}
    -
    -sub Methods
    -{
    - my ($package) = caller;
    - no strict 'refs';
    - foreach my $meth (@_)
    -  {
    -   my $name = $meth;
    -   *{$package."::$meth"} = sub { shift->WidgetMethod($name,@_) };
    -  }
    -}
    -
    -my %dialog = ( tk_chooseColor => 'ColorDialog',
    -               tk_messageBox  => 'MessageBox',
    -               tk_getOpenFile => 'FDialog',
    -               tk_getSaveFile => 'FDialog',
    -               tk_chooseDirectory => 'FDialog'
    -# Slaven claims NI-S's version above does not work
    -# and provides this
    -#              tk_chooseDirectory => 'DirDialog'
    -             );
    -
    -foreach my $dialog (keys %dialog)
    - {
    -  no strict 'refs';
    -  unless (defined &$dialog)
    -   {
    -    my $kind = $dialog;
    -    my $code = \&{"Tk::$dialog{$dialog}"};
    -    *$dialog = sub { &$code($kind,@_) };
    -   }
    - }
    -
    -sub MessageBox {
    -    my ($kind,%args) = @_;
    -    require Tk::Dialog;
    -    my $parent = delete $args{'-parent'};
    -    my $args = \%args;
    -
    -    $args->{-bitmap} = delete $args->{-icon} if defined $args->{-icon};
    -    $args->{-text} = delete $args->{-message} if defined $args->{-message};
    -    $args->{-type} = 'OK' unless defined $args->{-type};
    -
    -    my $type;
    -    if (defined($type = delete $args->{-type})) {
    -	delete $args->{-type};
    -	my @buttons = grep($_,map(ucfirst($_),
    -                      split(/(abort|retry|ignore|yes|no|cancel|ok)/,
    -                            lc($type))));
    -	$args->{-buttons} = [@buttons];
    -	$args->{-default_button} = ucfirst(delete $args->{-default}) if
    -	    defined $args->{-default};
    -	if (not defined $args->{-default_button} and scalar(@buttons) == 1) {
    -	   $args->{-default_button} = $buttons[0];
    -	}
    -        my $md = $parent->Dialog(%$args);
    -        my $an = $md->Show;
    -        $md->destroy if Tk::Exists($md);
    -        return $an;
    -    }
    -} # end messageBox
    -
    -sub messageBox
    -{
    - my ($widget,%args) = @_;
    - # remove in a later version:
    - if (exists $args{'-text'})
    -  {
    -   warn "The -text option is deprecated. Please use -message instead";
    -   if (!exists $args{'-message'})
    -    {
    -     $args{'-message'} = delete $args{'-text'};
    -    }
    -  }
    - $args{'-type'}    = (exists $args{'-type'})    ? lc($args{'-type'}) : 'ok';
    - $args{'-default'} = lc($args{'-default'}) if (exists $args{'-default'});
    - ucfirst tk_messageBox(-parent => $widget, %args);
    -}
    -sub _adapt_path_to_os
    -{
    - # adapting the path of -initalfile and -initialdir to the operating system
    - # (like that getOpenFile(-initialdir => 'c:/WINNT') will work, as it will
    - #  be converted to c:\WINNT)
    - my %args = @_;
    - foreach my $option (qw(-initialfile -initialdir))
    -  {
    -   if ($args{$option})
    -    {
    -     $args{$option} = File::Spec->catfile($args{$option});
    -    }
    -   }
    - return %args;
    -}    
    -sub getOpenFile
    -{
    - tk_getOpenFile(-parent => shift,_adapt_path_to_os(@_));
    -}
    -
    -sub getSaveFile
    -{
    - tk_getSaveFile(-parent => shift,_adapt_path_to_os(@_));
    -}
    -
    -sub chooseColor
    -{
    - tk_chooseColor(-parent => shift,@_);
    -}
    -
    -sub chooseDirectory
    -{
    - tk_chooseDirectory(-parent => shift,_adapt_path_to_os(@_));
    -}
    -
    -sub DialogWrapper
    -{
    - my ($method,$kind,%args) = @_;
    - my $created = 0;
    - my $w = delete $args{'-parent'};
    - if (defined $w)
    -  {
    -   $args{'-popover'} = $w;
    -  }
    - else
    -  {
    -   $w = MainWindow->new;
    -   $w->withdraw;
    -   $created = 1;
    -  }
    - my $mw = $w->toplevel;
    - my $fs = $mw->{$kind};
    - unless (defined $fs)
    -  {
    -   $mw->{$kind} = $fs = $mw->$method(%args);
    -  }
    - else
    -  {
    -   $fs->configure(%args);
    -  }
    - my $val = $fs->Show;
    - $w->destroy if $created;
    - return $val;
    -}
    -
    -sub ColorDialog
    -{
    - require Tk::ColorEditor;
    - DialogWrapper('ColorDialog',@_);
    -}
    -
    -sub FDialog
    -{
    - require Tk::FBox;
    - my $cmd = shift;
    - if ($cmd =~ /Save/)
    -  {
    -   push @_, -type => 'save';
    -  }
    - elsif ($cmd =~ /Directory/)
    -  {
    -   push @_, -type => 'dir';
    -  }
    - DialogWrapper('FBox', $cmd, @_);
    -}
    -
    -sub DirDialog
    -{
    - require Tk::DirTree;
    - DialogWrapper('DirTreeDialog',@_);
    -}
    -
    -*MotifFDialog = \&FDialog;
    -
    -*CORE::GLOBAL::exit = \&exit;
    -
    -sub MainLoop
    -{
    - unless ($inMainLoop)
    -  {
    -   local $inMainLoop = 1;
    -   while (Tk::MainWindow->Count)
    -    {
    -     DoOneEvent(0);
    -    }
    -  }
    -}
    -
    -sub tkinit { return MainWindow->new(@_) }
    -
    -# a wrapper on eval which turns off user $SIG{__DIE__}
    -sub catch (&)
    -{
    - my $sub = shift;
    - eval {local $SIG{'__DIE__'}; &$sub };
    -}
    -
    -my $Home;
    -
    -sub TranslateFileName
    -{
    - local $_ = shift;
    - unless (defined $Home)
    -  {
    -   $Home = $ENV{'HOME'} || (defined $ENV{'HOMEDRIVE'} && defined $ENV{'HOMEPATH'} ? $ENV{'HOMEDRIVE'}.$ENV{'HOMEPATH'} : "");
    -   $Home =~ s#\\#/#g;
    -   $Home .= '/' unless $Home =~ m#/$#;
    -  }
    - s#~/#$Home#g;
    - # warn $_;
    - return $_;
    -}
    -
    -sub findINC
    -{
    - my $file = join('/',@_);
    - my $dir;
    - $file  =~ s,::,/,g;
    - foreach $dir (@INC)
    -  {
    -   my $path;
    -   return $path if (-e ($path = "$dir/$file"));
    -  }
    - return undef;
    -}
    -
    -sub idletasks
    -{
    - shift->update('idletasks');
    -}
    -
    -sub backtrace
    -{
    - my ($self,$msg,$i) = @_;
    - $i = 1 if @_ < 3;
    - while (1)
    -  {
    -   my ($pack,$file,$line,$sub) = caller($i++);
    -   last unless defined($sub);
    -   $msg .= "\n $sub at $file line $line";
    -  }
    - return "$msg\n";
    -}
    -
    -sub die_with_trace
    -{
    - my ($self,$msg) = @_;
    - die $self->backtrace($msg,1);
    -}
    -
    -
    -
    -1;
    -
    -__END__
    -
    -sub Error
    -{my $w = shift;
    - my $error = shift;
    - if (Exists($w))
    -  {
    -   my $grab = $w->grab('current');
    -   $grab->Unbusy if (defined $grab);
    -  }
    - chomp($error);
    - warn "Tk::Error: $error\n " . join("\n ",@_)."\n";
    -}
    -
    -sub CancelRepeat
    -{
    - my $w = shift->MainWindow;
    - my $id = delete $w->{_afterId_};
    - $w->after('cancel',$id) if (defined $id);
    -}
    -
    -sub RepeatId
    -{
    - my ($w,$id) = @_;
    - $w = $w->MainWindow;
    - $w->CancelRepeat;
    - $w->{_afterId_} = $id;
    -}
    -
    -
    -
    -#----------------------------------------------------------------------------
    -# focus.tcl --
    -#
    -# This file defines several procedures for managing the input
    -# focus.
    -#
    -# @(#) focus.tcl 1.6 94/12/19 17:06:46
    -#
    -# Copyright (c) 1994 Sun Microsystems, Inc.
    -#
    -# See the file "license.terms" for information on usage and redistribution
    -# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
    -
    -sub FocusChildren { shift->children }
    -
    -#
    -# focusNext --
    -# This procedure is invoked to move the input focus to the next window
    -# after a given one. "Next" is defined in terms of the window
    -# stacking order, with all the windows underneath a given top-level
    -# (no matter how deeply nested in the hierarchy) considered except
    -# for frames and toplevels.
    -#
    -# Arguments:
    -# w - Name of a window: the procedure will set the focus
    -# to the next window after this one in the traversal
    -# order.
    -sub focusNext
    -{
    - my $w = shift;
    - my $cur = $w->getNextFocus;
    - if ($cur)
    -  {
    -   $cur->tabFocus;
    -  }
    -}
    -
    -sub getNextFocus
    -{
    - my $w = shift;
    - my $cur = $w;
    - while (1)
    -  {
    -   # Descend to just before the first child of the current widget.
    -   my $parent = $cur;
    -   my @children = $cur->FocusChildren();
    -   my $i = -1;
    -   # Look for the next sibling that isn't a top-level.
    -   while (1)
    -    {
    -     $i += 1;
    -     if ($i < @children)
    -      {
    -       $cur = $children[$i];
    -       next if ($cur->toplevel == $cur);
    -       last
    -      }
    -     # No more siblings, so go to the current widget's parent.
    -     # If it's a top-level, break out of the loop, otherwise
    -     # look for its next sibling.
    -     $cur = $parent;
    -     last if ($cur->toplevel() == $cur);
    -     $parent = $parent->parent();
    -     @children = $parent->FocusChildren();
    -     $i = lsearch(\@children,$cur);
    -    }
    -   if ($cur == $w || $cur->FocusOK)
    -    {
    -     return $cur;
    -    }
    -  }
    -}
    -# focusPrev --
    -# This procedure is invoked to move the input focus to the previous
    -# window before a given one. "Previous" is defined in terms of the
    -# window stacking order, with all the windows underneath a given
    -# top-level (no matter how deeply nested in the hierarchy) considered.
    -#
    -# Arguments:
    -# w - Name of a window: the procedure will set the focus
    -# to the previous window before this one in the traversal
    -# order.
    -sub focusPrev
    -{
    - my $w = shift;
    - my $cur = $w->getPrevFocus;
    - if ($cur)
    -  {
    -   $cur->tabFocus;
    -  }
    -}
    -
    -sub getPrevFocus
    -{
    - my $w = shift;
    - my $cur = $w;
    - my @children;
    - my $i;
    - my $parent;
    - while (1)
    -  {
    -   # Collect information about the current window's position
    -   # among its siblings. Also, if the window is a top-level,
    -   # then reposition to just after the last child of the window.
    -   if ($cur->toplevel() == $cur)
    -    {
    -     $parent = $cur;
    -     @children = $cur->FocusChildren();
    -     $i = @children;
    -    }
    -   else
    -    {
    -     $parent = $cur->parent();
    -     @children = $parent->FocusChildren();
    -     $i = lsearch(\@children,$cur);
    -    }
    -   # Go to the previous sibling, then descend to its last descendant
    -   # (highest in stacking order. While doing this, ignore top-levels
    -   # and their descendants. When we run out of descendants, go up
    -   # one level to the parent.
    -   while ($i > 0)
    -    {
    -     $i--;
    -     $cur = $children[$i];
    -     next if ($cur->toplevel() == $cur);
    -     $parent = $cur;
    -     @children = $parent->FocusChildren();
    -     $i = @children;
    -    }
    -   $cur = $parent;
    -   if ($cur == $w || $cur->FocusOK)
    -    {
    -     return $cur;
    -    }
    -  }
    -
    -}
    -
    -sub FocusOK
    -{
    - my $w = shift;
    - my $value;
    - catch { $value = $w->cget('-takefocus') };
    - if (!$@ && defined($value))
    -  {
    -   return 0 if ($value eq '0');
    -   return $w->viewable if ($value eq '1');
    -   if ($value)
    -    {
    -     $value = $w->$value();
    -     return $value if (defined $value);
    -    }
    -  }
    - if (!$w->viewable)
    -  {
    -   return 0;
    -  }
    - catch { $value = $w->cget('-state') } ;
    - if (!$@ && defined($value) && $value eq 'disabled')
    -  {
    -   return 0;
    -  }
    - $value = grep(/Key|Focus/,$w->Tk::bind(),$w->Tk::bind(ref($w)));
    - return $value;
    -}
    -
    -
    -# focusFollowsMouse
    -#
    -# If this procedure is invoked, Tk will enter "focus-follows-mouse"
    -# mode, where the focus is always on whatever window contains the
    -# mouse. If this procedure isn't invoked, then the user typically
    -# has to click on a window to give it the focus.
    -#
    -# Arguments:
    -# None.
    -
    -sub EnterFocus
    -{
    - my $w  = shift;
    - return unless $w;
    - my $Ev = $w->XEvent;
    - my $d  = $Ev->d;
    - $w->Tk::focus() if ($d eq 'NotifyAncestor' ||  $d eq 'NotifyNonlinear' ||  $d eq 'NotifyInferior');
    -}
    -
    -sub tabFocus
    -{
    - shift->Tk::focus;
    -}
    -
    -sub focusFollowsMouse
    -{
    - my $widget = shift;
    - $widget->bind('all','','EnterFocus');
    -}
    -
    -# tkTraverseToMenu --
    -# This procedure implements keyboard traversal of menus. Given an
    -# ASCII character "char", it looks for a menubutton with that character
    -# underlined. If one is found, it posts the menubutton's menu
    -#
    -# Arguments:
    -# w - Window in which the key was typed (selects
    -# a toplevel window).
    -# char - Character that selects a menu. The case
    -# is ignored. If an empty string, nothing
    -# happens.
    -sub TraverseToMenu
    -{
    - my $w = shift;
    - my $char = shift;
    - return unless(defined $char && $char ne '');
    - $w = $w->toplevel->FindMenu($char);
    -}
    -# tkFirstMenu --
    -# This procedure traverses to the first menubutton in the toplevel
    -# for a given window, and posts that menubutton's menu.
    -#
    -# Arguments:
    -# w - Name of a window. Selects which toplevel
    -# to search for menubuttons.
    -sub FirstMenu
    -{
    - my $w = shift;
    - $w = $w->toplevel->FindMenu('');
    -}
    -
    -# These wrappers don't use method syntax so need to live
    -# in same package as raw Tk routines are newXS'ed into.
    -
    -sub Selection
    -{my $widget = shift;
    - my $cmd    = shift;
    - croak 'Use SelectionOwn/SelectionOwner' if ($cmd eq 'own');
    - croak "Use Selection\u$cmd()";
    -}
    -
    -# If we have sub Clipboard in Tk then use base qw(Tk::Clipboard ....)
    -# calls it when it does its eval "require $base"
    -#sub Clipboard
    -#{my $w = shift;
    -# my $cmd    = shift;
    -# croak "Use clipboard\u$cmd()";
    -#}
    -
    -sub Receive
    -{
    - my $w = shift;
    - warn 'Receive(' . join(',',@_) .')';
    - die 'Tk rejects send(' . join(',',@_) .")\n";
    -}
    -
    -sub break
    -{
    - die "_TK_BREAK_\n";
    -}
    -
    -sub updateWidgets
    -{
    - my ($w) = @_;
    - while ($w->DoOneEvent(DONT_WAIT|IDLE_EVENTS|WINDOW_EVENTS))
    -  {
    -  }
    - $w;
    -}
    -
    -sub ImageNames
    -{
    - image('names');
    -}
    -
    -sub ImageTypes
    -{
    - image('types');
    -}
    -
    -sub interps
    -{
    - my $w = shift;
    - return $w->winfo('interps','-displayof');
    -}
    -
    -sub lsearch
    -{my $ar = shift;
    - my $x  = shift;
    - my $i;
    - for ($i = 0; $i < scalar @$ar; $i++)
    -  {
    -   return $i if ($$ar[$i] eq $x);
    -  }
    - return -1;
    -}
    -
    -
    -sub getEncoding
    -{
    - my ($class,$name) = @_;
    - eval { require Encode };
    - if ($@)
    -  {
    -   require Tk::DummyEncode;
    -   return Tk::DummyEncode->getEncoding($name);
    -  }
    - $name = $Tk::font_encoding{$name} if exists $Tk::font_encoding{$name};
    - my $enc = Encode::find_encoding($name);
    -
    - unless ($enc)
    -  {
    -   $enc = Encode::find_encoding($name) if ($name =~ s/[-_]\d+$//)
    -  }
    -# if ($enc)
    -#  {
    -#   print STDERR "Lookup '$name' => ".$enc->name."\n";
    -#  }
    -# else
    -#  {
    -#   print STDERR "Failed '$name'\n";
    -#  }
    - unless ($enc)
    -  {
    -   if ($name eq 'X11ControlChars')
    -    {
    -     require Tk::DummyEncode;
    -     $Encode::encoding{$name} = $enc = Tk::DummyEncode->getEncoding($name);
    -    }
    -  }
    - return $enc;
    -}
    -
    -
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk.pod b/Master/tlpkg/tlperl/lib/Tk.pod
    deleted file mode 100644
    index 4cdf3a0df19..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk.pod
    +++ /dev/null
    @@ -1,865 +0,0 @@
    -=head1 NAME
    -
    -Tk - a graphical user interface toolkit for Perl
    -
    -=head1 SYNOPSIS
    -
    -    use Tk;
    -    $top = new MainWindow;
    -    MainLoop;
    -
    -=head1 DESCRIPTION
    -
    -The Perl/Tk manual is split up into a number of sections:
    -
    -=head2 Introduction
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Tk Geometry Management
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Binding Events and Callbacks
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Tk Image Classes
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Tk Widget Classes
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Tix Extensions
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Tk Generic Methods
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 User Interaction
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Creating and Configuring Widgets
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Popups and Dialogs
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Derived Widgets
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 C Programming
    -
    -=over 4
    -
    -=item *
    -
    -Internals
    -
    -=item *
    -
    -pTk
    -
    -=item *
    -
    -3DBorder
    -
    -=item *
    -
    -BackgdErr
    -
    -=item *
    -
    -BindTable
    -
    -=item *
    -
    -CanvPsY
    -
    -=item *
    -
    -CanvTkwin
    -
    -=item *
    -
    -CanvTxtInfo
    -
    -=item *
    -
    -Clipboard
    -
    -=item *
    -
    -ClrSelect
    -
    -=item *
    -
    -ConfigWidg
    -
    -=item *
    -
    -ConfigWind
    -
    -=item *
    -
    -CoordToWin
    -
    -=item *
    -
    -CrtErrHdlr
    -
    -=item *
    -
    -CrtGenHdlr
    -
    -=item *
    -
    -CrtImgType
    -
    -=item *
    -
    -CrtItemType
    -
    -=item *
    -
    -CrtMainWin
    -
    -=item *
    -
    -CrtPhImgFmt
    -
    -=item *
    -
    -CrtSelHdlr
    -
    -=item *
    -
    -CrtWindow
    -
    -=item *
    -
    -DeleteImg
    -
    -=item *
    -
    -DoOneEvent
    -
    -=item *
    -
    -DoWhenIdle
    -
    -=item *
    -
    -DrawFocHlt
    -
    -=item *
    -
    -EventHndlr
    -
    -=item *
    -
    -EventInit
    -
    -=item *
    -
    -FileHndlr
    -
    -=item *
    -
    -FindPhoto
    -
    -=item *
    -
    -FontId
    -
    -=item *
    -
    -FreeXId
    -
    -=item *
    -
    -GeomReq
    -
    -=item *
    -
    -GetAnchor
    -
    -=item *
    -
    -GetBitmap
    -
    -=item *
    -
    -GetCapStyl
    -
    -=item *
    -
    -GetClrmap
    -
    -=item *
    -
    -GetColor
    -
    -=item *
    -
    -GetCursor
    -
    -=item *
    -
    -GetFont
    -
    -=item *
    -
    -GetFontStr
    -
    -=item *
    -
    -GetGC
    -
    -=item *
    -
    -GetImage
    -
    -=item *
    -
    -GetJoinStl
    -
    -=item *
    -
    -GetJustify
    -
    -=item *
    -
    -GetOption
    -
    -=item *
    -
    -GetPixels
    -
    -=item *
    -
    -GetPixmap
    -
    -=item *
    -
    -GetRelief
    -
    -=item *
    -
    -GetRootCrd
    -
    -=item *
    -
    -GetScroll
    -
    -=item *
    -
    -GetSelect
    -
    -=item *
    -
    -GetUid
    -
    -=item *
    -
    -GetVisual
    -
    -=item *
    -
    -GetVRoot
    -
    -=item *
    -
    -HandleEvent
    -
    -=item *
    -
    -IdToWindow
    -
    -=item *
    -
    -ImgChanged
    -
    -=item *
    -
    -InternAtom
    -
    -=item *
    -
    -MainLoop
    -
    -=item *
    -
    -MaintGeom
    -
    -=item *
    -
    -MainWin
    -
    -=item *
    -
    -ManageGeom
    -
    -=item *
    -
    -MapWindow
    -
    -=item *
    -
    -MeasureChar
    -
    -=item *
    -
    -MoveToplev
    -
    -=item *
    -
    -Name
    -
    -=item *
    -
    -NameOfImg
    -
    -=item *
    -
    -OwnSelect
    -
    -=item *
    -
    -ParseArgv
    -
    -=item *
    -
    -Preserve
    -
    -=item *
    -
    -QWinEvent
    -
    -=item *
    -
    -Restack
    -
    -=item *
    -
    -RestrictEv
    -
    -=item *
    -
    -SetAppName
    -
    -=item *
    -
    -SetClass
    -
    -=item *
    -
    -SetGrid
    -
    -=item *
    -
    -SetVisual
    -
    -=item *
    -
    -Sleep
    -
    -=item *
    -
    -StrictMotif
    -
    -=item *
    -
    -TextLayout
    -
    -=item *
    -
    -TimerHndlr
    -
    -=item *
    -
    -Tk_Init
    -
    -=item *
    -
    -WindowId
    -
    -=back
    -
    -=head2 Implementation
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Experimental Modules
    -
    -=over 4
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -=head2 Other Modules and Languages
    -
    -=over 4
    -
    -=item *
    -
    -Tk::Compile
    -
    -=item *
    -
    -L
    -
    -=item *
    -
    -L
    -
    -=back
    -
    -
    -=head1 AUTHOR
    -
    -Nick Ing-Simmons
    -
    -=head1 SEE ALSO
    -
    -L, L.
    -
    -Alternative Perl modules implementing the Tk toolkit: L,
    -L.
    -
    -=cut
    diff --git a/Master/tlpkg/tlperl/lib/Tk/804delta.pod b/Master/tlpkg/tlperl/lib/Tk/804delta.pod
    deleted file mode 100644
    index 1472f38c86b..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/804delta.pod
    +++ /dev/null
    @@ -1,110 +0,0 @@
    -=head1 NAME
    -
    -Tk::804delta - what is new for perl/Tk 804
    -
    -=head1 DESCRIPTION
    -
    -This document describes differences between the Tk800 series and the
    -Tk804 series.
    -
    -=head1 Incompatible Changes
    -
    -In Tk804.028, there are some additional incompatible changes:
    -
    -Return values of some B methods (e.g. B, B,
    -B, B ...) were changed from returning tclish
    -lists (e.g. "1 2 3 4") to perlish lists (1,2,3,4).
    -
    -B needs argument for setting on/off, without argument
    -just return the current value.
    -
    -All Tk804 releases have the following incompatible changes:
    -
    -Tk804 will only work with perl 5.8.0 and above. For older perl
    -versions look for Tk800.025.
    -
    -B of B now returns an array reference in
    -scalar context. This means you have to write
    -
    -	my(@selected) = $listbox->curselection
    -
    -or
    -
    -	my(@selected) = @{ $listbox->curselection }
    -
    -now.
    -
    -The B method now returns the pixel value instead of the
    -point value for B<-size>. Pixel values are expressed as negative
    -numbers.
    -
    -Some enhancements from the EdashE patches are lost for now
    -(i.e. B<-tile>, B<-troughtile> ...).
    -
    -The B<-state> option is not available anymore for B tags.
    -Use B<-elide> instead.
    -
    -=head1 Enhancements
    -
    -Tk804 is Unicode-aware.
    -
    -It is possible to build Tk with Xft support on X11. This is strongly
    -recommened if you are planning to make use of Unicode rendering
    -capabilities of Tk. It also gives anti-aliased fonts for regular text
    -(if you have TrueType or Type1 fonts and they are in your fontconfig
    -config file).
    -
    -The new method B is available as a standard directory
    -selector.
    -
    -B and B are bundled now with the perl/Tk
    -distribution, providing support for the image formats B and
    -B.
    -
    -Improvements to B: new option B<-activestyle>, new
    -methods B and B, new virtual event B<<<
    -<> >>>.
    -
    -More tests.
    -
    -=head1 New Widgets
    -
    -=over
    -
    -=item Tk::Labelframe
    -
    -An alternative to B.
    -
    -=item Tk::Panedwindow
    -
    -An alternative to B.
    -
    -=item Tk::Spinbox
    -
    -An alternative to the CPAN module B.
    -
    -=back
    -
    -=head1 Selected Bug Fixes
    -
    -=head1 Changed Internals
    -
    -=head1 Platform Specific Problems
    -
    -=head1 Future Directions
    -
    -=head1 Reporting Bugs
    -
    -If you find what you think is a bug, you might check the articles
    -recently posted to the comp.lang.perl.tk newsgroup.
    -
    -If you believe you have an unreported bug, please send a mail to  and/or .  Be sure to trim your bug down
    -to a tiny but sufficient test case.
    -
    -=head1 SEE ALSO
    -
    -L, C file in the Perl/Tk distribution.
    -
    -=cut
    -
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm b/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm
    deleted file mode 100644
    index bbe44f33dc8..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm
    +++ /dev/null
    @@ -1,438 +0,0 @@
    -package Tk::Adjuster;
    -
    -use vars qw($VERSION);
    -$VERSION = '4.008'; # $Id: //depot/Tkutf8/Tk/Adjuster.pm#7 $
    -
    -use base  qw(Tk::Frame);
    -
    -# We cannot do this :
    -
    -# Construct Tk::Widget 'packAdjust';
    -
    -# because if managed object is Derived (e.g. a Scrolled) then our 'new'
    -# will be delegated and hierachy gets turned inside-out
    -# So packAdjust is autoloaded in Widget.pm
    -
    -
    -Construct Tk::Widget qw(Adjuster);
    -
    -{package Tk::Adjuster::Item;
    -
    -use strict;
    -use base  qw(Tk::Frame);
    -
    -sub ClassInit
    -{
    - my ($class,$mw) = @_;
    - $mw->bind($class,'<1>',['BDown', 1]);
    - $mw->bind($class,'',['BDown', 0]);
    - $mw->bind($class,'',['Motion',1]);
    - $mw->bind($class,'',['Motion',0]);
    - $mw->bind($class,'',['Motion',0]);
    - return $class;
    -}
    -
    -sub BDown
    -{
    - my($w, $delay_mask) = @_;
    - $w->{'start_x'} = $w->XEvent->x;
    - $w->{'start_y'} = $w->XEvent->y;
    - my $adj  = $w->Parent;
    - delete $adj->{'lin_info'};
    - my $delay = $delay_mask && $adj->cget('-delay');
    - if ($delay)
    -  {
    -    $adj->vert ? $adj->delta_width_bar(0) : $adj->delta_height_bar(0);
    -  }
    -}
    -
    -sub Motion
    -{
    - my($w, $delay_mask) = @_;
    - my $ev = $w->XEvent;
    - my $adj  = $w->Parent;
    -
    - my $delay = $delay_mask && $adj->cget('-delay');
    - if ($adj->vert)
    -  {
    -    my $dx = $ev->x - $w->{'start_x'};
    -    $delay ?  $adj->delta_width_bar($dx) : $adj->delta_width($dx);
    -  }
    - else
    -  {
    -    my $dy = $ev->y - $w->{'start_y'};
    -    $delay ? $adj->delta_height_bar($dy) : $adj->delta_height($dy);
    -  }
    -}
    -
    -}
    -
    -
    -
    -sub packAfter
    -{
    - my ($w,$s,%args) = @_;
    - my $side = $args{'-side'} ? $args{'-side'} : 'top';
    - $w->configure(-side   => $side, -widget => $s);
    - $w->packed($s, %args);
    -}
    -
    -sub packForget
    -{
    - my ($w,$forget_slave) = @_;
    - $w->Tk::Widget::packForget;
    - $w->slave->packForget if $forget_slave;
    -}
    -
    -# Called by Tk::Widget::packAdjust. It was here before packAfter was added
    -sub packed
    -{
    - my ($w,$s,%args) = @_;
    - delete $args{'-before'};
    - delete $args{'-in'};
    - $args{'-expand'} = 0;
    - $args{'-after'} = $s;
    - $args{'-fill'} = (($w->vert) ? 'y' : 'x');
    - $w->pack(%args);
    -}
    -
    -sub gridded
    -{
    - my ($w,$s,%args) = @_;
    - # delete $args{'-before'};
    - # $args{'-expand'} = 0;
    - # $args{'-after'} = $s;
    - # $args{'-fill'} = (($w->vert) ? 'y' : 'x');
    - $w->grid(%args);
    -}
    -
    -sub ClassInit
    -{
    - my ($class,$mw) = @_;
    - $mw->bind($class,'','SizeChange');
    - $mw->bind($class,'','Restore');
    - $mw->bind($class,'','Mapped');
    - return $class;
    -}
    -
    -sub SizeChange
    -{
    - my $w = shift;
    - # reqwidth/height of Adjuster is stored here. If it is partially pushed out
    - # of the window, then $w->width/height returns that of the visible part.
    - if ($w->vert)
    -  {
    -   my $sx = ($w->Width - $w->{'sep'}->Width)/2;
    -   $w->{'but'}->place('-x' => 0, '-y' => $w->Height-18);
    -   $w->{'sep'}->place('-x' => $sx, '-y' => 0,  -relheight => 1);
    -   $w->configure(-width => $w->{'but'}->ReqWidth);
    -   $w->{'reqwidth'} = $w->reqwidth;
    -  }
    - else
    -  {
    -   my $sy = ($w->Height - $w->{'sep'}->Height)/2;
    -   $w->{'but'}->place('-x' => $w->Width-18, '-y' => 0);
    -   $w->{'sep'}->place('-x' => 0, '-y' => $sy,  -relwidth => 1);
    -   $w->configure(-height => $w->{'but'}->ReqHeight);
    -   $w->{'reqheight'} = $w->reqheight;
    -  }
    - # Turn off geometry propagation in the slave. Do only if necessary, as this
    - # causes repacking.
    - my $s = $w->slave;
    - $s->packPropagate('0') if $s->packSlaves && $s->packPropagate();
    - $s->gridPropagate('0') if $s->gridSlaves && $s->gridPropagate();
    -}
    -
    -sub Mapped
    -{
    - my $w = shift;
    - $w->idletasks;
    - my $m = $w->manager;
    - if ($m =~ /^(?:pack|grid)$/)
    -  {
    -   my %info = $w->$m('info');
    -   my $master = $info{'-in'};
    -   $master->$m('propagate',0);
    -   $w->{'master'} = $master;
    -  }
    - $w->slave_expand_off;
    -}
    -
    -sub Populate
    -{
    - my ($w,$args) = @_;
    - $w->SUPER::Populate($args);
    - $w->{'sep'} = Tk::Adjuster::Item->new($w,-bd => 1, -relief => 'sunken');
    - $w->{'but'} = Tk::Adjuster::Item->new($w,-bd => 1, -width => 8, -height => 8, -relief => 'raised');
    -
    - # Force creation of Frame in widget's Toplevel. This makes a difference
    - # where the widget's Toplevel has Delegates('Construct') set.
    - # Need to explicitly set frame width to 0 for Win32
    - my $l = $w->{'lin'} = Tk::Frame->new($w->toplevel, -bd => 0);
    - # my $l = $w->{'lin'} = $w->toplevel->Frame(-bd => 0);
    -
    - my $cs = $w->ConfigSpecs(-widget => ['PASSIVE','widget','Widget',$w->Parent],
    -                 -side       => ['METHOD','side','Side','top'],
    -                 -delay      => ['PASSIVE','delay','Delay', 1],
    -                 -background => [['SELF',$w->{'sep'},$w->{'but'}],'background','Background',undef],
    -                 -foreground => [Tk::Configure->new($w->{'lin'},'-background'),'foreground','Foreground','black'],
    -		 -restore    => ['PASSIVE','restore', 'Restore', 1],
    -                );
    - $w->_OnDestroy(qw(sep but lin master));
    -}
    -
    -sub side
    -{
    - my ($w,$val) = @_;
    - if (@_ > 1)
    -  {
    -   $w->{'side'} = $val;
    -   my $cursor;
    -   if ($w->vert)
    -    {
    -     $cursor = 'sb_h_double_arrow';
    -     $w->{'sep'}->configure(-width => 2, -height => 10000);
    -    }
    -   else
    -    {
    -     $cursor = 'sb_v_double_arrow';
    -     $w->{'sep'}->configure(-height => 2, -width => 10000);
    -    }
    -   my $x;
    -   foreach $x ($w->{'sep'},$w->{'but'})
    -    {
    -     $x->configure(-cursor => $cursor);
    -    }
    -  }
    - return $w->{'side'};
    -}
    -
    -sub slave
    -{
    - my $w = shift;
    - my $s = $w->cget('-widget');
    - return $s;
    -}
    -
    -sub vert
    -{
    - my $w = shift;
    - my $side = $w->cget('-side');
    - return  1 if $side eq 'left';
    - return -1 if $side eq 'right';
    - return  0;
    -}
    -
    -# If the Adjuster gets unmapped, it attempts to restore itself. If its
    -# slave is mapped, then it reduces the size of the slave so that there is
    -# then room in the master for the Adjuster widget.
    -sub Restore
    -{
    - my $w = shift;
    - return if ! $w->toplevel->IsMapped ||
    - 	   ! $w->slave->IsMapped ||
    -	   ! $w->cget('-restore');
    - $w->vert ? $w->delta_width(0) : $w->delta_height(0);
    -}
    -
    -sub delta_width_bar
    -{
    - my ($w,$dx) = @_;
    - my $l = $w->{'lin'};
    - my $r = $w->{'sep'};
    - my $t = $w->toplevel;
    - my $m = $w->{'master'};
    - my $s = $w->slave;
    - my ($min_rootx, $max_rootx, $t_border);
    - if (! $w->{'lin_info'})
    -  {
    -   my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
    -   $t_border    = $t->cget('-bd') + $t->cget('-highlightthickness');
    -   if ($w->cget('-side') eq 'right')
    -    {
    -     $min_rootx = $m->rootx + $m_border;
    -     $max_rootx = $s->rootx + $s->width - 1;
    -    }
    -   else
    -    {
    -     $min_rootx = $s->rootx;
    -     $max_rootx = $m->rootx + $m->width - $m_border - 1;
    -    }
    -   $w->{'lin_info'} = [$min_rootx, $max_rootx, $t_border];
    -  }
    -  else
    -   {
    -    ($min_rootx, $max_rootx, $t_border) = @{$w->{'lin_info'}};
    -   }
    - $l->configure(-width => 1, -height => $w->height) unless $l->IsMapped;
    -
    - my $new_rootx = $w->rootx + $w->{'reqwidth'}/2 + $dx;
    - $new_rootx = $min_rootx if $new_rootx < $min_rootx;
    - $new_rootx = $max_rootx if $new_rootx > $max_rootx;
    - my $placex = $new_rootx - $t->rootx - $t_border;
    - my $placey = $w->rooty  - $t->rooty - $t_border;
    - $l->place(-in => $t, -anchor => 'n', '-x' => $placex, '-y' => $placey);
    - my $this = $w->containing($new_rootx, $w->rooty + 1);
    - $l->raise($this) if $this && $this ne $t;
    -}
    -
    -sub delta_width
    -{
    - my ($w,$dx) = @_;
    - my $l = $w->{'lin'};
    - $l->placeForget;
    - my $s = $w->slave;
    - if ($s)
    -  {
    -   my $m = $w->{'master'};
    -   my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
    -   my $w_width = $w->{'reqwidth'};
    -   my $m_width = $m->width;
    -   my $s_width = $s->width;
    -   my $max_width = $m_width - $w_width;
    -   my $max_s_width;
    -   if ($w->cget('-side') eq 'right')
    -    {
    -     $dx = -$dx;
    -     $max_s_width = $max_width -
    -		      ($m->rootx + $m_width - ($s->rootx+$s_width)) - $m_border;
    -    }
    -   else
    -    {
    -     $max_s_width = $max_width - ($s->rootx - $m->rootx) - $m_border;
    -    }
    -   my $new_width = $s_width+$dx;
    -   $new_width = $max_s_width if $new_width > $max_s_width;
    -   $new_width = 0 if $new_width < 0;
    -   $s->GeometryRequest($new_width, $s->height);
    -  }
    -}
    -
    -sub delta_height_bar
    -{
    - my ($w,$dy) = @_;
    - my $l = $w->{'lin'};
    - my $r = $w->{'sep'};
    - my $t = $w->toplevel;
    - my $m = $w->{'master'};
    - my $s = $w->slave;
    - my ($min_rooty, $max_rooty, $t_border);
    - if (! $w->{'lin_info'})
    -  {
    -   my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
    -   $t_border    = $t->cget('-bd') + $t->cget('-highlightthickness');
    -   if ($w->cget('-side') eq 'bottom')
    -    {
    -     $min_rooty = $m->rooty + $m_border;
    -     $max_rooty = $s->rooty + $s->height - 1;
    -    }
    -   else
    -    {
    -     $min_rooty = $s->rooty;
    -     $max_rooty = $m->rooty + $m->height - $m_border - 1;
    -    }
    -   $w->{'lin_info'} = [$min_rooty, $max_rooty, $t_border];
    -  }
    - else
    -  {
    -   ($min_rooty, $max_rooty, $t_border) = @{$w->{'lin_info'}};
    -  }
    - $l->configure(-height => 1, -width => $w->width) unless $l->IsMapped;
    -
    - my $new_rooty = $w->rooty + $w->{'reqheight'}/2 + $dy;
    - $new_rooty = $min_rooty if $new_rooty < $min_rooty;
    - $new_rooty = $max_rooty if $new_rooty > $max_rooty;
    - my $placey = $new_rooty - $t->rooty - $t_border;
    - my $placex = $w->rootx  - $t->rootx - $t_border;
    - $l->place(-in => $t, -anchor => 'w', '-x' => $placex, '-y' => $placey);
    - my $this = $w->containing($w->rootx + 1, $new_rooty);
    - $l->raise($this) if $this && $this ne $t;
    -}
    -
    -sub delta_height
    -{
    - my ($w,$dy) = @_;
    - my $l = $w->{'lin'};
    - $l->placeForget;
    - my $s = $w->slave;
    - if ($s)
    -  {
    -   my $m = $w->{'master'};
    -   my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
    -   my $w_height = $w->{'reqheight'};
    -   my $m_height = $m->height;
    -   my $s_height = $s->height;
    -   my $max_height = $m_height - $w_height;
    -   my $max_s_height;
    -   if ($w->cget('-side') eq 'bottom')
    -    {
    -     $dy = -$dy;
    -     $max_s_height = $max_height -
    -		    ($m->rooty + $m_height - ($s->rooty+$s_height)) - $m_border;
    -    }
    -   else
    -    {
    -     $max_s_height = $max_height - ($s->rooty - $m->rooty) - $m_border;
    -    }
    -   my $new_height = $s_height+$dy;
    -
    -   $new_height = $max_s_height if $new_height > $max_s_height;
    -   $new_height = 0 if $new_height < 0;
    -   $s->GeometryRequest($s->width, $new_height);
    -  }
    -}
    -
    -# Turn off expansion in the slave.
    -# This is done only if necessary, as calls to pack/gridConfigure cause
    -# repacking.
    -# Before call to pack/gridConfigure, the reqwidth/reqheight is set to the
    -# current width/height. This is because the geometry managers use
    -# the requested values, not the actual, to calculate the new geometry.
    -sub slave_expand_off
    -{
    - my $w = shift;
    - my $s = $w->slave;
    - return if ! $s;
    -
    - my $manager = $s->manager;
    - if ($manager eq 'pack')
    -  {
    -   my %info = $s->packInfo;
    -   my $expand = $info{'-expand'};
    -   if ($expand)
    -    {
    -     $s->GeometryRequest($s->width, $s->height);
    -     $s->packConfigure(-expand => 0);
    -    }
    -  }
    - elsif ($manager eq 'grid')
    -  {
    -   my %info = $s->gridInfo;
    -   my $master = $info{'-in'};
    -   if ($w->vert)
    -    {
    -     my $col = $info{'-column'};
    -     my $expand = $master->gridColumnconfigure($col, '-weight');
    -     if ($expand)
    -      {
    -       $s->GeometryRequest($s->width, $s->height);
    -       $master->gridColumnconfigure($col, -weight => 0);
    -      }
    -    }
    -   else
    -    {
    -     my $row = $info{'-row'};
    -     my $expand = $master->gridRowconfigure($row, '-weight');
    -     if ($expand)
    -      {
    -       $s->GeometryRequest($s->width, $s->height);
    -       $master->gridRowconfigure($row, -weight => 0);
    -      }
    -    }
    -  }
    -}
    -
    -1;
    -
    -__END__
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/Adjuster.pod b/Master/tlpkg/tlperl/lib/Tk/Adjuster.pod
    deleted file mode 100644
    index 7d094f4e262..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/Adjuster.pod
    +++ /dev/null
    @@ -1,223 +0,0 @@
    -
    -=head1 NAME
    -
    -Tk::Adjuster - Allow size of packed widgets to be adjusted by user
    -
    -=for pm Tk/Adjuster.pm
    -
    -=for category Tk Geometry Management
    -
    -=head1 SYNOPSIS
    -
    -use Tk::Adjuster;
    -
    -I<$adjuster> = I<$widget>->BI<(?options?)>;
    -
    -=head1 WIDGET-SPECIFIC OPTIONS
    -
    -=over 4
    -
    -=item Name: B
    -
    -=item Class: B
    -
    -=item Switch: B<-restore>
    -
    -Specifies a boolean value that determines whether the Adjuster
    -should forcibly attempt to make room
    -for itself (by reducing the size of its managed widget) when it is
    -unmapped (for example, due to a size change in a top level window).
    -The default value is 1.
    -
    -=item Name: B
    -
    -=item Class: B
    -
    -=item Switch: B<-side>
    -
    -Specifies the side on which the managed widget lies relative to the
    -Adjuster. In conjunction with the pack geometry manager, this relates to
    -the side of the master against which the managed widget and the Adjuster
    -are packed.
    -Must be B, B, B, or B. Defaults to B.
    -
    -=item Name: B
    -
    -=item Class: B
    -
    -=item Switch: B<-widget>
    -
    -Specifies the widget which is to be managed by the Adjuster.
    -
    -=back
    -
    -=head1 DESCRIPTION
    -
    -B is a Frame containing a "line" and a "blob".
    -
    -Dragging with Mouse Button-1 results in a line being dragged
    -to indicate new size. Releasing Button-1 submits GeometryRequests
    -on behalf of the managed widget which will cause the packer to change the
    -widget's size.
    -
    -If Drag is done with Shift button down, then GeometryRequests are made
    -in "real time" so that text-flow effects can be seen, but as a lot more
    -work is done behaviour may be sluggish.
    -
    -If widget is packed with -side => left or -side => right then width is
    -adjusted. If packed -side => top or -side => bottom then height is adjusted.
    -
    -B is turned off for the master window to prevent adjustment
    -changing overall window size. Similarly B is turned off
    -for the managed widget if it has things packed inside it. This is so that
    -the GeometryRequests made by B are not overridden by pack.
    -
    -In addition, the managed widget is made non-expandable
    -to prevent the geometry manager reallocating freed space in the master
    -back to the managed widget.
    -Note however that expansion is turned off only after the Adjuster is mapped,
    -which allows the managed widget to expand naturally on window creation.
    -
    -The Tk::Widget method, B, calls pack on the widget, then
    -creates an instance of B,
    -and packs that "after" the widget. Its use has two disadvantages however: the
    -Adjuster widget is not made available to the caller, and
    -options cannot be set on the Adjuster. For these reasons, the Tk::Adjuster
    -method, B is preferred, but B is retained
    -for backwards compatibility.
    -
    -=head1 WIDGET METHODS
    -
    -=over 4
    -
    -=item I<$adjuster>->B(I)
    -
    -This command configures the Adjuster's B<-widget> and B<-side> options
    -respectively to I and the B<-side> value specified in
    -I (B if not specified). It then packs the Adjuster
    -after I, with B<-fill> set to B or B as appropriate.
    -
    -=item I<$adjuster>->BI
    -
    -This command calls B on the Adjuster.
    -If a parameter is provided and it has a true boolean value, then
    -B is also called on the managed widget.
    -
    -=item I<$adjuster>->B
    -
    -This command returns the value I<$adjuster>->I, ie. the
    -reference to the managed widget.
    -
    -=back
    -
    -=head1 EXAMPLES
    -
    -B
    -
    -a) Using packAfter (preferred interface)
    -
    -  use Tk;
    -  use Tk::Adjuster;
    -
    -  my $f = MainWindow->new;
    -  my $lst1 = $f->Listbox();
    -  my $adj1 = $f->Adjuster();
    -  my $lst2 = $f->Listbox();
    -
    -  my $side = 'left';
    -  $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
    -  $adj1->packAfter($lst1, -side => $side);
    -  $lst2->pack(-side => $side, -fill => 'both', -expand => 1);
    -  MainLoop;
    -
    -b) Using packAdjust
    -
    -  use Tk;
    -  use Tk::Adjuster;
    -
    -  my $f = MainWindow->new;
    -  my $lst1 = $f->Listbox();
    -  my $lst2 = $f->Listbox();
    -
    -  my $side = 'left';
    -  $lst1->packAdjust(-side => $side, -fill => 'both');
    -  $lst2->pack      (-side => $side, -fill => 'both', -expand => 1);
    -  MainLoop;
    -
    -c) Using the standard Tk::Widget::pack
    -
    -  use Tk;
    -  use Tk::Adjuster;
    -
    -  my $f = MainWindow->new;
    -  my $side = 'left';
    -  my $lst1 = $f->Listbox();
    -  my $adj  = $f->Adjuster(-widget => $lst1, -side => $side);
    -  my $lst2 = $f->Listbox();
    -
    -  $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
    -  $adj->pack (-side => $side, -fill => 'y');
    -  $lst2->pack(-side => $side, -fill => 'both', -expand => 1);
    -
    -  MainLoop;
    -
    -Changing the above examples so that $side has the value 'right' means the
    -left widget expands to fill space on a window resize.
    -
    -Changing the above examples so that $side has the value 'top'
    -produces a testcase with a horizontal Adjuster.
    -Here the bottom widget expands to fill space on a window resize.
    -Packing to the 'bottom' makes the top widget expand to fill space on window
    -resize.
    -
    -B 0 for multiple columns>
    -
    -In the case of multiple columns (or rows) the "restore" functionality of the
    -Adjuster can be inconvenient. When the user adjusts the width of one column
    -and thereby pushes the Adjuster of another column off the window, this
    -adjuster tries to restore itself by reducing the size of its managed widget.
    -This has the effect that column widths shrink; and the original size
    -is not restored when
    -the user reverses the originating change. The B<-restore> option can be
    -used to turn off this functionality. (It makes some sense, however, to
    -leave B<-restore>
    -turned on for the first-packed Adjuster, so that at least one Adjuster
    -always remains visible.)
    -
    -  use Tk;
    -  use Tk::Adjuster;
    -  my $f = MainWindow->new;
    -  my $lst1 = $f->Listbox();
    -  my $adj1 = $f->Adjuster();
    -  my $lst2 = $f->Listbox();
    -  my $adj2 = $f->Adjuster(-restore => 0);
    -  my $lst3 = $f->Listbox();
    -
    -  my $side = 'left';
    -  $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
    -  $adj1->packAfter($lst1, -side => $side);
    -  $lst2->pack(-side => $side, -fill => 'both', -expand => 1);
    -  $adj2->packAfter($lst2, -side => $side);
    -  $lst3->pack(-side => $side, -fill => 'both', -expand => 1);
    -
    -  MainLoop;
    -
    -=head1 BUGS
    -
    -It is currently not possible to configure the appearance of the Adjuster.
    -It would be nice to be able to set the width and relief of the Adjuster "line"
    -and the presence/absence of the "blob" on the Adjuster.
    -
    -Tk::Adjuster works theoretically with the grid geometry manager but there
    -are currently some problems which seem to be due to bugs in grid:
    -
    -  a) There's never an Unmap event for the adjuster, so the "restore"
    -     functionality has no effect.
    -  b) After adjusting, widgets protrude into the border of the master.
    -  c) grid('Propagate', 0) on MainWindow has no effect - window shrinks/grows
    -     when widgets are adjusted.
    -  d) Widgets shuffle to correct position on startup
    -
    -=cut
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/After.pm b/Master/tlpkg/tlperl/lib/Tk/After.pm
    deleted file mode 100644
    index 9b36ff24b9c..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/After.pm
    +++ /dev/null
    @@ -1,105 +0,0 @@
    -# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
    -# This program is free software; you can redistribute it and/or
    -# modify it under the same terms as Perl itself.
    -package Tk::After;
    -use Carp;
    -
    -use vars qw($VERSION);
    -$VERSION = '4.008'; # $Id: //depot/Tkutf8/Tk/After.pm#11 $
    -
    -sub _cancelAll
    -{
    - my $w = shift;
    - my $h = delete $w->{_After_};
    - foreach my $obj (values %$h)
    -  {
    -   # carp "Auto cancel ".$obj->[1]." for ".$obj->[0]->PathName;
    -   $obj->cancel;
    -   bless $obj,"Tk::After::Cancelled";
    -  }
    -}
    -
    -sub Tk::After::Cancelled::once { }
    -sub Tk::After::Cancelled::repeat { }
    -sub Tk::After::Cancelled::cancel { }
    -
    -sub submit
    -{
    - my $obj     = shift;
    - my $w       = $obj->[0];
    - my $id      = $obj->[1];
    - my $t       = $obj->[2];
    - my $method  = $obj->[3];
    - delete($w->{_After_}{$id}) if (defined $id);
    - $id  = $w->Tk::after($t,[$method => $obj]);
    - unless (exists $w->{_After_})
    -  {
    -   $w->{_After_} = {};
    -   $w->OnDestroy([\&_cancelAll, $w]);
    -  }
    - $w->{_After_}{$id} = $obj;
    - $obj->[1] = $id;
    - return $obj;
    -}
    -
    -sub DESTROY
    -{
    - my $obj = shift;
    - $obj->cancel;
    - undef $obj->[0];
    - undef $obj->[4];
    -}
    -
    -sub new
    -{
    - my ($class,$w,$t,$method,@cb) = @_;
    - my $cb    = (@cb == 1) ? shift(@cb) : [@cb];
    - my $obj   = bless [$w,undef,$t,$method,Tk::Callback->new($cb)],$class;
    - return $obj->submit;
    -}
    -
    -sub cancel
    -{
    - my $obj = shift;
    - my $id  = $obj->[1];
    - my $w   = $obj->[0];
    - if ($id)
    -  {
    -   $w->Tk::after('cancel'=> $id) if Tk::Exists($w);
    -   delete $w->{_After_}{$id} if exists $w->{_After_};
    -   $obj->[1] = undef;
    -  }
    - return $obj;
    -}
    -
    -sub repeat
    -{
    - my $obj = shift;
    - $obj->submit;
    - local $Tk::widget = $obj->[0];
    - $obj->[4]->Call;
    -}
    -
    -sub once
    -{
    - my $obj = shift;
    - my $w   = $obj->[0];
    - my $id  = $obj->[1];
    - delete $w->{_After_}{$id};
    - local $Tk::widget = $w;
    - $obj->[4]->Call;
    -}
    -
    -sub time {
    -    my $obj = shift;
    -    my $delay = shift;
    -    if (defined $delay) {
    -	$obj->cancel if $delay == 0;
    -	$obj->[2] = $delay;
    -    }
    -    $obj->[2];
    -}
    -
    -1;
    -__END__
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/Animation.pm b/Master/tlpkg/tlperl/lib/Tk/Animation.pm
    deleted file mode 100644
    index 24cfacb4a7c..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/Animation.pm
    +++ /dev/null
    @@ -1,230 +0,0 @@
    -package Tk::Animation;
    -
    -use vars qw($VERSION);
    -$VERSION = '4.008'; # $Id: //depot/Tkutf8/Tk/Animation.pm#8 $
    -
    -use Tk::Photo;
    -use base  qw(Tk::Photo);
    -
    -Construct Tk::Widget 'Animation';
    -
    -sub MainWindow
    -{
    - return shift->{'_MainWIndow_'};
    -}
    -
    -sub add_frame
    -{
    - my $obj = shift;
    - $obj->{'_frames_'} = [] unless exists $obj->{'_frames_'};
    - push(@{$obj->{'_frames_'}},@_);
    -}
    -
    -sub new
    -{
    - my ($class,$widget,%args) = @_;
    - my $obj = $class->SUPER::new($widget,%args);
    - $obj->{'_MainWIndow_'} = $widget->MainWindow;
    - if ($args{'-format'} eq 'gif')
    -  {
    -   my @images;
    -   local $@;
    -   while (1)
    -    {
    -     my $index = @images;
    -     $args{'-format'} = "gif -index $index";
    -     my $img;
    -     eval {local $SIG{'__DIE__'};  $img = $class->SUPER::new($widget,%args) };
    -     last if $@;
    -     push(@images,$img);
    -    }
    -   if (@images > 1)
    -    {
    -     $obj->add_frame(@images);
    -     $obj->{'_frame_index_'}  = 0;
    -    }
    -  }
    - $obj->set_image( 0 );
    - $obj->_get_gif_info;
    - return $obj;
    -}
    -
    -sub fast_forward {
    -
    -    my( $self, $delta) = @_;
    -
    -    $self->{_delta_} = $delta;
    -    if( not exists $self->{_playing_} ) {
    -	my $playing = exists $self->{'_NextId_'};
    -	$self->{_playing_} = $playing;
    -	$self->resume_animation if not $playing;
    -    } else {
    -	my $playing = delete $self->{_playing_};
    -	$self->pause_animation if not $playing;
    -    }
    -
    -} # end fast_forward
    -
    -*fast_reverse = \&fast_forward;
    -
    -sub frame_count {
    -    my $frames = shift->{'_frames_'};
    -    return -1 unless $frames;
    -    return @$frames;
    -}
    -
    -sub set_disposal_method {
    -    my( $self, $blank ) = @_;
    -    $blank = 1 if not defined $blank;
    -    $self->{_blank_} = $blank;
    -    $blank;
    -}
    -
    -sub set_image
    -{
    - my ($obj,$index)  = @_;
    - my $frames = $obj->{'_frames_'};
    - return unless $frames && @$frames;
    - $index = 0 unless $index < @$frames;
    - $obj->blank if $obj->{_blank_};  # helps some make others worse
    - $obj->copy($frames->[$index]);
    - $obj->{'_frame_index_'} = $index;
    -}
    -
    -sub next_image
    -{
    - my ($obj, $delta)  = @_;
    - $obj->_next_image($delta);
    -}
    -
    -sub _next_image
    -{
    - my ($obj, $delta, $in_animation)  = @_;
    - $delta = $obj->{_delta_} unless $delta;
    - my $frames = $obj->{'_frames_'};
    - return unless $frames && @$frames;
    - my $next_index = (($obj->{'_frame_index_'} || 0) + $delta);
    - if ($next_index > @$frames && $in_animation && $obj->{'_loop_'} ne 'forever')
    -  {
    -   return 0; # signal to stop animation
    -  }
    - $next_index %= @$frames;
    - $obj->set_image($next_index);
    - 1;
    -}
    -
    -sub prev_image { shift->next_image( -1 ) }
    -
    -sub next_image_in_animation
    -{
    - my ($obj, $delta) = @_;
    - my $continue = $obj->_next_image($delta, 1);
    - if (!$continue && $self->{'_NextId_'})
    -  {
    -   $obj->pause_animation;
    -  }
    -}
    -
    -sub pause_animation { 
    -    my $self = shift;
    -    my $id = delete $self->{'_NextId_'};
    -    Tk::catch { $id->cancel } if $id;
    -}
    -
    -sub resume_animation {
    -    my( $self, $period ) = @_;
    -    if( not defined $self->{'_period_'} ) {
    -	$self->{'_period_'} = defined( $period ) ? $period : 100;
    -    }
    -    $period = $self->{'_period_'};
    -    my $w = $self->MainWindow;
    -    $self->{'_NextId_'} = $w->repeat( $period => [ $self => 'next_image_in_animation' ] );
    -}
    -
    -sub start_animation
    -{
    - my ($obj,$period) = @_;
    - my $frames = $obj->{'_frames_'};
    - return unless $frames && @$frames;
    - my $w = $obj->MainWindow;
    - $obj->stop_animation;
    - $obj->{'_period_'} = $period if $period;
    - $obj->{'_NextId_'} = $w->repeat($obj->{'_period_'},[$obj,'next_image_in_animation']);
    -}
    -
    -sub stop_animation
    -{
    - my ($obj) = @_;
    - my $id = delete $obj->{'_NextId_'};
    - Tk::catch { $id->cancel } if $id;
    - $obj->set_image(0);
    -}
    -
    -sub _get_gif_info
    -{
    - my ($obj) = @_;
    - my $info;
    - if (defined(my $file = $obj->cget(-file)) && eval { require Image::Info; 1; })
    -  {
    -   $info = Image::Info::image_info($file);
    -  }
    - elsif (defined(my $data = $obj->cget(-data)))
    -  {
    -   if ($data =~ m{^GIF8} && eval { require Image::Info; 1; })
    -    {
    -     $info = Image::Info::image_info(\$data);
    -    }
    -   elsif (eval { require Image::Info; require MIME::Base64; 1; })
    -    {
    -     $data = MIME::Base64::decode_base64($data);
    -     $info = Image::Info::image_info(\$data);
    -    }
    -  }
    - if ($info)
    -  {
    -   $obj->{'_blank_'} = $info->{DisposalMethod} == 2 || $info->{DisposalMethod} == 3;
    -   $obj->{'_period_'} = $info->{Delay}*1000 if defined $info->{Delay};
    -   $obj->{'_loop_'} = $info->{GIF_Loop};
    -  }
    - $obj->{'_blank_'} = 0 if !defined $obj->{'_blank_'};
    - $obj->{'_period_'} = 100 if !defined $obj->{'_period_'};
    - $obj->{'_loop_'} = 'forever' if !defined $obj->{'_loop_'};
    - $obj->{'_delta_'} = 1;
    -}
    -
    -1;
    -
    -__END__
    -
    -#
    -# This almost works for changing the animation on the fly
    -# but does not resize things correctly
    -#
    -
    -sub gif_sequence
    -{
    - my ($obj,%args) = @_;
    - my $widget = $obj->MainWindow;
    - my @images;
    - local $@;
    - while (1)
    -  {
    -   my $index = @images;
    -   $args{'-format'} = "gif -index $index";
    -   my $img;
    -   eval
    -    {local $SIG{'__DIE__'};
    -     my $img = $widget->Photo(%args);
    -     push(@images,$img);
    -    };
    -   last if $@;
    -  }
    - if (@images)
    -  {
    -   delete $obj->{'_frames_'};
    -   $obj->add_frame(@images);
    -   $obj->configure(-width => 0, -height => 0);
    -   $obj->set_frame(0);
    -  }
    -}
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/Animation.pod b/Master/tlpkg/tlperl/lib/Tk/Animation.pod
    deleted file mode 100644
    index 996b035b1c5..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/Animation.pod
    +++ /dev/null
    @@ -1,92 +0,0 @@
    -
    -=head1 NAME
    -
    -Tk::Animation - Display sequence of Tk::Photo images
    -
    -=for pm Tk/Animation.pm
    -
    -=for category Tk Image Classes
    -
    -=head1 SYNOPSIS
    -
    -  use Tk::Animation
    -  my $img = $widget->Animation('-format' => 'gif', -file => 'somefile.gif');
    -
    -  $img->add_frame(@images);
    -
    -  $img->start_animation;
    -  $img->start_animation( $period );
    -
    -  $img->next_image;
    -  $img->prev_image;
    -  $img->set_image( 0 .. $#frames );
    -
    -  $img->pause_animation;
    -  $img->resume_animation( $period );
    -
    -  $img->fast_forward( $multiplier );
    -  $img->fast_reverse( $multiplier );
    -
    -  $img->stop_animation;
    -
    -  $img->set_disposal_method( $boolean );
    -
    -=head1 DESCRIPTION
    -
    -In the simple case when C is passed a GIF89 style GIF with
    -multiple 'frames', it will build an internal array of C images.
    -
    -The C method adds images to the sequence. It is provided
    -to allow animations to be constructed from separate images.
    -All images must be Cs and should all be the same size.
    -
    -C then initiates a C with specified
    -I<$period> to sequence through these images. As for raw C
    -I<$period> is in milliseconds, for a 50Hz monitor it should be at
    -least 20ms. If I<$period> is omitted it is determined from the GIF
    -metadata (see below), or if this is not possible it defaults to 100
    -milliseconds.
    -
    -C cancels the C and resets the image to the first
    -image in the sequence.
    -
    -For fine-grained control C and C move one frame forward
    -or backward.  C randomly positions the animation to a particular frame.
    -
    -C pauses the movie and C continues from the
    -pause point.
    -
    -C and C speed through the movie either
    -forwards or backwards.  $multiplier specifies how much faster the
    -animation moves.
    -
    -If L is installed, then the repeat period time and
    -disposal method of GIF animations are determined from the GIF metadata
    -directly. Otherwise the disposal method must be set manually by using
    -C (1 for blanking the previous images, 0 for
    -leaving the previous images as is). The repeat period time may be
    -given in the C method.
    -
    -=head1 NOTES
    -
    -C was formerly known as C method, but the
    -naming of this method was a mistake.
    -
    -If the disposal method is not set correctly, either by
    -C or by determining from the GIF metadata, then
    -the following may happen: By default Animation leaves the previous
    -movie frame in the animation photo. Many times overlaying subsequent
    -frames produces a composite that looks blurred.
    -
    -=head1 BUGS
    -
    -This module should not depend on a module which is not declared as a
    -dependency (Image::Info).
    -
    -The delays between images may vary in a GIF animation. This cannot be
    -handled by this module yet.
    -
    -The handling of the various disposal methods is not correct.
    -
    -=cut
    -
    diff --git a/Master/tlpkg/tlperl/lib/Tk/Balloon.pm b/Master/tlpkg/tlperl/lib/Tk/Balloon.pm
    deleted file mode 100644
    index 4be9f6db9ae..00000000000
    --- a/Master/tlpkg/tlperl/lib/Tk/Balloon.pm
    +++ /dev/null
    @@ -1,644 +0,0 @@
    -#
    -# The help widget that provides both "balloon" and "status bar"
    -# types of help messages.
    -#
    -# This is a patched version of Balloon 3.037 - it adds support
    -# for different orientations of the balloon widget, depending
    -# on wether there's enough space for it. The little arrow now
    -# should always point directly to the client.
    -# Added by Gerhard Petrowitsch (gerhard.petrowitsch@philips.com)
    -#
    -# Nov 1, 2003 - Jack Dunnigan
    -# Added support for more than one screen in single logical
    -# screen mode (i.e. xinerama, dual monitors)
    -
    -package Tk::Balloon;
    -
    -use vars qw($VERSION);
    -$VERSION = '4.012'; # was: sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/;
    -
    -use Tk qw(Ev Exists);
    -use Carp;
    -require Tk::Toplevel;
    -
    -Tk::Widget->Construct('Balloon');
    -use base qw(Tk::Toplevel);
    -
    -# use UNIVERSAL; avoid the UNIVERSAL.pm file subs are XS in perl core
    -
    -use strict;
    -
    -my @balloons;
    -my $button_up = 0;
    -my %arrows = ( TL => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAINjA0HAEdwLCwMKIQfBQA7',
    -	       TR => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIRBGMDwAEQkgAIAAoCABEEuwAAOw==',
    -	       BR => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIPDOHHhYVRAIgIAEISQLELADs=',
    -	       BL => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIPhB1xAUFALCIMKAaAWQAVADs=',
    -	       NO => 'R0lGODlhAQABAJEAANnZ2f///////////yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='
    -	     );
    -
    -
    -sub ClassInit {
    -    my ($class, $mw) = @_;
    -    $mw->bind('all', '', ['Tk::Balloon::Motion', Ev('X'), Ev('Y'), Ev('s')]);
    -    $mw->bind('all', '',  ['Tk::Balloon::Motion', Ev('X'), Ev('Y'), Ev('s')]);
    -    $mw->bind('all', '