Mike W Ellwood <mwe@rl.ac.uk>
Milton Hankins <webtools@uewrhp03.msd.ray.com>
Milton L. Hankins <mlh@swl.msd.ray.com>
-Molnar Laszlo <molnarl@cdata.tvnet.hu>
Murray Nesbitt <murray@nesbitt.ca>
Nathan Kurz <nate@valleytel.net>
Nathan Torkington <gnat@frii.com>
Version v5.7.1 Development release working toward v5.8
--------------
____________________________________________________________________________
+[ 11180] By: jhi on 2001/07/06 13:20:08
+ Log: Regen toc.
+ Branch: perl
+ ! pod/perltoc.pod
+____________________________________________________________________________
+[ 11179] By: jhi on 2001/07/06 12:57:13
+ Log: Nit from Abhijit.
+ Branch: perl
+ ! lib/CPAN.pm
+____________________________________________________________________________
+[ 11178] By: jhi on 2001/07/06 12:53:04
+ Log: Retract #11172.
+ Branch: perl
+ ! t/op/method.t
+____________________________________________________________________________
+[ 11177] By: jhi on 2001/07/06 12:44:51
+ Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt)
+ Message-Id: <200107061339.JAA12582@bottesini.harvard.edu>
+ Branch: perl
+ ! lib/Cwd.pm
+____________________________________________________________________________
+[ 11176] By: jhi on 2001/07/06 12:42:45
+ Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt)
+ Message-Id: <200107061339.JAA12582@bottesini.harvard.edu>
+ Branch: perl
+ ! utf8.h
+____________________________________________________________________________
+[ 11175] By: jhi on 2001/07/06 12:29:56
+ Log: Retract #11165 since Sarathy pointed out it'll not
+ work properly under threads, the problem should be
+ solved using "the savestack, either via SSNEW() or
+ using a newSVpv()+SAVEFREESV() combo."
+ Branch: perl
+ ! ext/POSIX/POSIX.xs
+____________________________________________________________________________
+[ 11174] By: jhi on 2001/07/06 12:27:31
+ Log: Retract #11125 since NI-S pointed out it'll not work in
+ cases where the extension has their own handcrafted INC
+ et alia.
+ Branch: perl
+ ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11173] By: jhi on 2001/07/06 12:20:50
+ Log: Subject: RE: [PATCH] -I and MakeMaker again
+ From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+ Date: Fri, 6 Jul 2001 09:18:29 +0200
+ Message-ID: <E3FB32585BF1D411B9E900805FF51A0808C221@RU0022EXCH001U>
+ Branch: perl
+ ! lib/ExtUtils/MM_NW5.pm lib/ExtUtils/MM_VMS.pm
+ ! lib/ExtUtils/MM_Win32.pm
+____________________________________________________________________________
+[ 11172] By: jhi on 2001/07/06 12:18:39
+ Log: (Retracted by #11178)
+ Subject: [PATCH t/op/method.t] SUPER:: strangeness
+ From: Piers Cawley <pdcawley@iterative-software.com>
+ Date: 06 Jul 2001 10:49:01 +0100
+ Message-ID: <m2ith6xu9e.fsf@despairon.bofh.org.uk>
+ Branch: perl
+ ! t/op/method.t
+____________________________________________________________________________
+[ 11171] By: jhi on 2001/07/06 01:38:55
+ Log: VOS README update from Paul Green.
+ Branch: perl
+ ! README.vos
+____________________________________________________________________________
+[ 11170] By: jhi on 2001/07/06 01:19:33
+ Log: Subject: [PATCH README.qnx hints/qnx.sh]
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Message-Id: <200107051755.NAA21422@bottesini.harvard.edu>
+ Date: Thu, 5 Jul 2001 13:55:11 -0400 (edt)
+ Branch: perl
+ ! README.qnx hints/qnx.sh
+____________________________________________________________________________
+[ 11169] By: jhi on 2001/07/06 01:17:43
+ Log: Subject: [PATCH] Doc patch for Tie::Hash
+ From: Artur Bergman <artur@contiller.se>
+ Date: Thu, 05 Jul 2001 22:51:18 +0200
+ Message-ID: <B76A9FE6.1F04%artur@contiller.se>
+ Branch: perl
+ ! lib/Tie/Hash.pm
+____________________________________________________________________________
+[ 11168] By: jhi on 2001/07/06 01:16:27
+ Log: Subject: [PATCH] perlfaq4.pod
+ From: "Liney, Dave" <dave.liney@gbr.conoco.com>
+ Message-ID: <1BB544A41666D311836C00902751FF6D01FD2D07@LONEX02>
+ Date: Thu, 5 Jul 2001 18:44:10 +0100
+ Branch: perl
+ ! pod/perlfaq4.pod
+____________________________________________________________________________
+[ 11167] By: jhi on 2001/07/06 01:14:41
+ Log: Subject: [PATCH B::Deparse] Make warnings handling more robust
+ From: Robin Houston <robin@kitsite.com>
+ Date: Thu, 5 Jul 2001 18:33:21 +0100
+ Message-ID: <20010705183321.A27345@robin.kitsite.com>
+ Branch: perl
+ ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11166] By: jhi on 2001/07/06 01:11:50
+ Log: Subject: Re: [PATCH] mkdir() mode argument is missing initial 0
+ From: Abhijit Menon-Sen <ams@wiw.org>
+ Date: Fri, 6 Jul 2001 01:26:32 +0530
+ Message-ID: <20010706012632.A28327@lustre.dyn.wiw.org>
+ Branch: perl
+ ! dump.c op.c op.h opcode.h opcode.pl pod/perldiag.pod pp.sym
+ ! pp_proto.h t/lib/warnings/op t/lib/warnings/toke toke.c
+ ! warnings.pl
+____________________________________________________________________________
+[ 11165] By: jhi on 2001/07/06 00:19:26
+ Log: (Retracted by #11175)
+ Subject: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Message-Id: <200107051734.NAA13375@bottesini.harvard.edu>
+ Date: Thu, 5 Jul 2001 13:34:51 -0400 (edt)
+ Branch: perl
+ ! ext/POSIX/POSIX.xs
+____________________________________________________________________________
+[ 11164] By: jhi on 2001/07/06 00:14:57
+ Log: Unterminated C< (noticed by Richard Hatch), and few other
+ small Unicode doc tweaks.
+ Branch: perl
+ ! pod/perlretut.pod
+____________________________________________________________________________
+[ 11163] By: jhi on 2001/07/05 19:33:34
+ Log: More flexible argument understanding; add charblocks() and
+ charscripts(); make charblock() and charscript() two-way;
+ add charinrange(); separate the $Unicode::UCD::VERSION and
+ the version of the Unicode by adding UnicodeVersion().
+ Branch: perl
+ ! lib/Unicode/UCD.pm lib/Unicode/UCD.t
+____________________________________________________________________________
+[ 11162] By: jhi on 2001/07/05 13:38:36
+ Log: Update Unicode::UCD on \p{In...}.
+ Branch: perl
+ ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11161] By: jhi on 2001/07/05 13:26:00
+ Log: Subject: Re: [PATCH lib/ExtUtils.t] Extra Files for QNX
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Date: Thu, 5 Jul 2001 09:57:14 -0400 (edt)
+ Message-Id: <200107051357.JAA06285@bottesini.harvard.edu>
+ Branch: perl
+ ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11160] By: jhi on 2001/07/05 13:06:53
+ Log: POSIX-BC tweaks from Thomas Dorner.
+ Branch: perl
+ ! hints/posix-bc.sh perlio.h
+____________________________________________________________________________
+[ 11159] By: jhi on 2001/07/05 04:17:18
+ Log: Module updates for the delta.
+ Branch: perl
+ ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11158] By: jhi on 2001/07/05 03:45:19
+ Log: Subject: [PATCH ext/IO/lib/IO/t/io_sock.t] for QNX
+ From: Norton Allen <allen@huarp.harvard.edu>
+ Message-Id: <200107050259.WAA06843@bottesini.harvard.edu>
+ Date: Wed, 4 Jul 2001 22:59:00 -0400 (edt)
+ Branch: perl
+ ! ext/IO/lib/IO/t/io_sock.t
+____________________________________________________________________________
+[ 11157] By: jhi on 2001/07/05 03:44:19
+ Log: Subject: [PATCH perldiag.pod] Quick fixes
+ From: Simon Cozens <simon@netthink.co.uk>
+ Date: Wed, 4 Jul 2001 20:22:12 +0100
+ Message-ID: <20010704202212.A3690@deep-dark-truthful-mirror>
+ Branch: perl
+ ! pod/perldiag.pod
+____________________________________________________________________________
+[ 11156] By: jhi on 2001/07/05 03:43:28
+ Log: Subject: [PATCH perl@11099]Re: [ID 20010704.003] Taint mode breaks global match
+ From: Radu Greab <radu@netsoft.ro>
+ Date: Wed, 4 Jul 2001 22:13:31 +0300
+ Message-ID: <15171.27355.895094.128142@ix.netsoft.ro>
+ Branch: perl
+ ! op.c sv.c t/op/pos.t
+____________________________________________________________________________
+[ 11155] By: jhi on 2001/07/05 03:40:24
+ Log: Subject: [PATCH] -I and MakeMaker again
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Wed, 4 Jul 2001 15:03:07 -0400
+ Message-ID: <20010704150307.I20340@blackrider>
+
+ (and retract #11145)
+ Branch: perl
+ ! ext/util/make_ext lib/ExtUtils/MM_Unix.pm
+ ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11154] By: jhi on 2001/07/05 03:32:43
+ Log: Subject: Re: PERFORCE change 11142 for review
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Wed, 4 Jul 2001 20:46:26 +0200
+ Message-Id: <200107041841.VAA25380@taas.iki.fi>
+ Branch: perl
+ ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11153] By: jhi on 2001/07/05 03:29:21
+ Log: Subject: Re: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings')
+ From: Jonathan Stowe <gellyfish@gellyfish.com>
+ Date: Mon, 2 Jul 2001 20:45:53 +0100 (BST)
+ Message-ID: <Pine.LNX.4.33.0107022042570.8640-100000@orpheus.gellyfish.com>
+ Branch: perl
+ ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11152] By: gsar on 2001/07/05 00:52:57
+ Log: fix the binary compatibility issue when building with/without
+ usemymalloc by exporting Perl_malloc() et al as simple wrappers
+ around the system functions (this allows most extensions built
+ using one mode to coexist with perls built in the other mode)
+
+ XXX the Perl_mfree() wrapper might need to do return(free()) on
+ platforms where Free_t isn't "void"
+ Branch: perl
+ ! embed.h embed.pl makedef.pl proto.h util.c
+____________________________________________________________________________
+[ 11151] By: gsar on 2001/07/05 00:42:49
+ Log: perl built with USE_ITHREADS can deadlock during fork() or backticks
+ since it doesn't ensure threads other than the one calling fork()
+ aren't holding any locks; the fix is to use pthread_atfork() to
+ hold global locks
+
+ building perl with -Dusemymalloc exacerbates the problem since
+ Perl_malloc() holds a mutex, and perl's exec() calls New()
+
+ XXX the code in win32thread.h may be needed on platforms that have
+ no pthread_atfork()
+ Branch: perl
+ ! perl.c thread.h win32/win32thread.h
+____________________________________________________________________________
+[ 11150] By: pudge on 2001/07/04 20:07:54
+ Log: Integrate #11009 from maintperl.
+ Branch: maint-5.6/macperl
+ !> lib/ExtUtils/Manifest.pm
+____________________________________________________________________________
+[ 11149] By: pudge on 2001/07/04 19:54:46
+ Log: Flexing my Perforce muscles.
+ Branch: maint-5.6/macperl
+ ! README.macos
+____________________________________________________________________________
+[ 11148] By: jhi on 2001/07/04 17:14:51
+ Log: Update Changes.
+ Branch: perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 11147] By: jhi on 2001/07/04 16:41:25
+ Log: Metaconfig unit change for #11146.
+ Branch: metaconfig/U/perl
+ ! d_fcntl_can_lock.U
+____________________________________________________________________________
+[ 11146] By: jhi on 2001/07/04 16:36:31
+ Log: Somehow the #ifdefs of the added code (in #11093) made
+ HP-UX to fail the fcntl locking test, without the ifdefs
+ the test seems to be working again. Reason unknown:
+ HP-UX cc doesn't complain either way.
+ Branch: perl
+ ! Configure
+____________________________________________________________________________
+[ 11145] By: jhi on 2001/07/04 16:08:00
+ Log: PERLRUNINST needed in some spots.
+ Branch: perl
+ ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11144] By: jhi on 2001/07/04 16:07:35
+ Log: gcc -Wall nit.
+ Branch: perl
+ ! pp_hot.c
+____________________________________________________________________________
+[ 11143] By: jhi on 2001/07/04 15:08:26
+ Log: When removing tests updating the test count is a good idea, too.
+ Branch: perl
+ ! lib/Net/t/require.t
+____________________________________________________________________________
+[ 11142] By: jhi on 2001/07/04 14:57:51
+ Log: Document #11134 and add the new symbols to the list of
+ of MakeMaker known ones.
+ Branch: perl
+ ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11141] By: jhi on 2001/07/04 14:34:11
+ Log: Microperl update.
+ Branch: perl
+ ! uconfig.h
+____________________________________________________________________________
+[ 11140] By: jhi on 2001/07/04 14:32:27
+ Log: Update the libnet tests as per #11138.
+ Branch: perl
+ - lib/Net/t/ph.t
+ ! MANIFEST lib/Net/t/require.t
+____________________________________________________________________________
+[ 11139] By: jhi on 2001/07/04 14:14:33
+ Log: Regen toc and modlib.
+ Branch: perl
+ ! pod/perlmodlib.pod pod/perltoc.pod
+____________________________________________________________________________
+[ 11138] By: jhi on 2001/07/04 14:10:38
+ Log: Remove DummyInetd, PH, and SNPP from the libnet, as per
+ Graham's request.
+ Branch: perl
+ - lib/Net/DummyInetd.pm lib/Net/PH.pm lib/Net/SNPP.pm
+ ! MANIFEST
+____________________________________________________________________________
+[ 11137] By: jhi on 2001/07/04 14:06:35
+ Log: Add the OS/390 harness results to the delta.
+ Branch: perl
+ ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11136] By: jhi on 2001/07/04 13:59:01
+ Log: Avoid the two study tests in OS/390 until the bug has been solved.
+ Branch: perl
+ ! t/op/study.t
+____________________________________________________________________________
+[ 11135] By: jhi on 2001/07/04 13:49:08
+ Log: DOS/DJGPP tweaks from Laszlo Molnar.
+ Branch: perl
+ ! AUTHORS djgpp/djgppsed.sh hints/dos_djgpp.sh t/op/write.t
+____________________________________________________________________________
+[ 11134] By: jhi on 2001/07/04 13:47:46
+ Log: Subject: [PATCH lib/ExtUtils/MM_Unix.pm and others] Fixing extra -I's with PERL_CORE
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Wed, 4 Jul 2001 00:01:16 -0400
+ Message-ID: <20010704000116.C591@blackrider>
+ Branch: perl
+ ! ext/util/make_ext lib/ExtUtils.t lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11133] By: jhi on 2001/07/04 01:55:20
+ Log: The #11132 missed singleton characters (not part
+ of a unilo..unihi range) in Unicode scripts.
+ Branch: perl
+ ! lib/unicode/In/0.pl lib/unicode/In/1.pl lib/unicode/In/10.pl
+ ! lib/unicode/In/11.pl lib/unicode/In/12.pl lib/unicode/In/13.pl
+ ! lib/unicode/In/15.pl lib/unicode/In/16.pl lib/unicode/In/17.pl
+ ! lib/unicode/In/18.pl lib/unicode/In/19.pl lib/unicode/In/20.pl
+ ! lib/unicode/In/21.pl lib/unicode/In/24.pl lib/unicode/In/29.pl
+ ! lib/unicode/In/3.pl lib/unicode/In/30.pl lib/unicode/In/34.pl
+ ! lib/unicode/In/35.pl lib/unicode/In/37.pl lib/unicode/In/39.pl
+ ! lib/unicode/In/4.pl lib/unicode/In/5.pl lib/unicode/In/6.pl
+ ! lib/unicode/In/8.pl lib/unicode/In/9.pl lib/unicode/Scripts.pl
+ ! lib/unicode/mktables.PL t/op/pat.t
+____________________________________________________________________________
+[ 11132] By: jhi on 2001/07/04 01:32:11
+ Log: Support preferentially the Unicode 'scripts' definition
+ in the \p{In...} notation since according to Unicode the
+ scripts concept is more natural for matching than using
+ the somewhat artificial block names. The block names are
+ still available, though, and if there's a name conflict,
+ the scripts one wins and the blocks one has to do with
+ 'Block' appended to its name. For more information see
+
+ http://www.unicode.org/unicode/reports/tr24/
+ Branch: perl
+ + lib/unicode/In/100.pl lib/unicode/In/101.pl
+ + lib/unicode/In/102.pl lib/unicode/In/103.pl
+ + lib/unicode/In/104.pl lib/unicode/In/105.pl
+ + lib/unicode/In/106.pl lib/unicode/In/107.pl
+ + lib/unicode/In/108.pl lib/unicode/In/109.pl
+ + lib/unicode/In/110.pl lib/unicode/In/111.pl
+ + lib/unicode/In/112.pl lib/unicode/In/113.pl
+ + lib/unicode/In/114.pl lib/unicode/In/115.pl
+ + lib/unicode/In/116.pl lib/unicode/In/117.pl
+ + lib/unicode/In/118.pl lib/unicode/In/119.pl
+ + lib/unicode/In/120.pl lib/unicode/In/121.pl
+ + lib/unicode/In/122.pl lib/unicode/In/123.pl
+ + lib/unicode/In/124.pl lib/unicode/In/125.pl
+ + lib/unicode/In/126.pl lib/unicode/In/127.pl
+ + lib/unicode/In/128.pl lib/unicode/In/129.pl
+ + lib/unicode/In/130.pl lib/unicode/In/131.pl
+ + lib/unicode/In/132.pl lib/unicode/In/133.pl
+ + lib/unicode/In/134.pl lib/unicode/In/135.pl
+ + lib/unicode/In/96.pl lib/unicode/In/97.pl lib/unicode/In/98.pl
+ + lib/unicode/In/99.pl lib/unicode/Scripts.pl
+ ! (edit 106 files)
+____________________________________________________________________________
+[ 11131] By: jhi on 2001/07/03 23:02:02
+ Log: Better document the difference between a block and a script.
+ Branch: perl
+ ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11130] By: jhi on 2001/07/03 22:49:15
+ Log: Subject: [ perl 5.6.1 ] CPAN.pm doc patch
+ From: Elaine -HFB- Ashton <elaine@chaos.wustl.edu>
+ Date: Tue, 3 Jul 2001 15:04:23 -0500
+ Message-ID: <20010703150423.C9787@chaos.wustl.edu>
+ Branch: perl
+ ! lib/CPAN.pm
+____________________________________________________________________________
+[ 11129] By: jhi on 2001/07/03 22:45:41
+ Log: Add tests for charscript().
+ Branch: perl
+ ! lib/Unicode/UCD.pm lib/Unicode/UCD.t
+____________________________________________________________________________
+[ 11128] By: jhi on 2001/07/03 20:41:54
+ Log: Add charscript() to get the UTR#24 script names of characters.
+ Branch: perl
+ ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11127] By: jhi on 2001/07/03 19:53:29
+ Log: Todo updates.
+ Branch: perl
+ ! pod/perltodo.pod
+____________________________________________________________________________
+[ 11126] By: jhi on 2001/07/03 19:45:30
+ Log: Unicode::UCD updates.
+ Branch: perl
+ ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11125] By: jhi on 2001/07/03 16:12:20
+ Log: Subject: MakeMaker should pass through DEFINE and INC to subdirs
+ From: Alan Burlison <Alan.Burlison@sun.com>
+ Date: Tue, 03 Jul 2001 15:20:13 +0100
+ Message-ID: <3B41D49D.A923D4F9@sun.com>
+ Branch: perl
+ ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11124] By: jhi on 2001/07/03 16:06:53
+ Log: Subject: Patch needed for UTS
+ From: hom00@utsglobal.com (Hal Morris)
+ Date: Tue, 3 Jul 2001 09:38:22 -0700 (PDT)
+ Message-Id: <200107031638.JAA11998@cepheus.utsglobal.com>
+
+ Replace #11113 with a better version.
+ Branch: perl
+ ! perl.h
+____________________________________________________________________________
+[ 11123] By: jhi on 2001/07/03 16:04:49
+ Log: Subject: Re: POINTERRIGOR
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Tue, 3 Jul 2001 11:49:28 -0400 (EDT)
+ Message-ID: <Pine.SOL.4.10.10107031040030.1982-100000@maxwell.phys.lafayette.edu>
+ Branch: perl
+ ! util.c
+____________________________________________________________________________
+[ 11122] By: jhi on 2001/07/03 16:03:31
+ Log: Subject: Re: [PATCH @11016] Fixes compile errors in four files
+ From: "Philip Newton" <pnewton@gmx.de>
+ Date: Tue, 3 Jul 2001 17:03:34 +0200
+ Message-ID: <3B41FAE6.29564.660E117@localhost>
+ Branch: perl
+ ! pp_hot.c
+____________________________________________________________________________
+[ 11121] By: jhi on 2001/07/03 13:26:08
+ Log: Typos.
+ Branch: perl
+ ! INSTALL
+____________________________________________________________________________
+[ 11120] By: jhi on 2001/07/03 11:34:47
+ Log: Subject: [PATCH 5.6.1] debugger fixes
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Tue, 3 Jul 2001 03:38:18 -0400
+ Message-ID: <20010703033818.A16788@math.ohio-state.edu>
+
+ The $^S is working again.
+ Branch: perl
+ ! lib/perl5db.pl
+____________________________________________________________________________
+[ 11119] By: jhi on 2001/07/03 11:33:27
+ Log: Subject: Re: [PATCH 5.6.1] OS/2 improvements
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Tue, 3 Jul 2001 03:34:06 -0400
+ Message-ID: <20010703033406.A16776@math.ohio-state.edu>
+ Branch: perl
+ ! os2/OS2/Process/Process.pm
+____________________________________________________________________________
+[ 11118] By: jhi on 2001/07/03 11:29:54
+ Log: Subject: [PATCH bleadperl] Bad lishp in change 11084
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Tue, 3 Jul 2001 09:11:27 +0200
+ Message-Id: <200107030706.KAA04596@taas.iki.fi>
+ Branch: perl
+ ! lib/FindBin.pm
+____________________________________________________________________________
+[ 11117] By: jhi on 2001/07/03 11:25:14
+ Log: Delta delta.
+ Branch: perl
+ ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11116] By: jhi on 2001/07/02 23:06:50
+ Log: Metaconfig unit change for 11115.
+ Branch: metaconfig
+ ! U/modified/libc.U
+____________________________________________________________________________
+[ 11115] By: jhi on 2001/07/02 23:06:27
+ Log: Whitespace allowed at the ends of /lib/syscalls.exp lines
+ (from Richard Hatch) (this was the cause of pipes() and
+ times() myeteriously not being found)
+ Branch: perl
+ ! Configure
+____________________________________________________________________________
+[ 11114] By: jhi on 2001/07/02 22:58:41
+ Log: Retract #10142, the real culprit found by Richard Hatch,
+ coming soon to Configure near you.
+ Branch: perl
+ ! hints/aix.sh
+____________________________________________________________________________
+[ 11113] By: jhi on 2001/07/02 22:56:09
+ Log: (Replaced by #11124) UTS workaround from Hal Morris.
+ Branch: perl
+ ! perl.h
+____________________________________________________________________________
+[ 11112] By: jhi on 2001/07/02 22:53:29
+ Log: Subject: [PATCH] grok not grocking correctly
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Tue, 3 Jul 2001 00:19:08 +0100
+ Message-ID: <20010703001908.H59620@plum.flirble.org>
+ Branch: perl
+ ! numeric.c
+____________________________________________________________________________
+[ 11111] By: jhi on 2001/07/02 22:48:42
+ Log: Subject: [PATCH Deparse.t] test just-posted patches
+ From: Robin Houston <robin@kitsite.com>
+ Date: Mon, 2 Jul 2001 23:46:15 +0100
+ Message-Id: <E15HCUN-0000Rh-00.2001-07-02-23-48-19@mail18.svr.pol.co.uk>
+ Branch: perl
+ ! ext/B/Deparse.t
+____________________________________________________________________________
+[ 11110] By: jhi on 2001/07/02 22:27:10
+ Log: Subject: [PATCH toke.c] autosplit into @F
+ From: Robin Houston <robin@kitsite.com>
+ Date: Mon, 2 Jul 2001 23:18:20 +0100
+ Message-Id: <E15HC3M-0007jL-00.2001-07-02-23-20-24@mail18.svr.pol.co.uk>
+ Branch: perl
+ ! perl.c toke.c
+____________________________________________________________________________
+[ 11109] By: jhi on 2001/07/02 22:25:03
+ Log: Subject: [PATCH B::Deparse] hash key auto-quoting
+ From: Robin Houston <robin@kitsite.com>
+ Date: Mon, 2 Jul 2001 23:00:48 +0100
+ Message-Id: <E15HBmR-0006mc-00.2001-07-02-23-02-55@mail18.svr.pol.co.uk>
+ Branch: perl
+ ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11108] By: jhi on 2001/07/02 19:21:18
+ Log: Subject: Re: [PATCH perlsnap] '-' !~ /\w/
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Mon, 2 Jul 2001 22:06:22 +0200
+ (no Message-Id)
+ Branch: perl
+ ! ext/NDBM_File/hints/linux.pl
+____________________________________________________________________________
+[ 11107] By: jhi on 2001/07/02 19:19:25
+ Log: Subject: Re: Fixed pack problem - sort of
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Mon, 2 Jul 2001 20:59:20 +0100
+ Message-ID: <20010702205919.F59620@plum.flirble.org>
+ Branch: perl
+ ! pp_pack.c t/op/pack.t
+____________________________________________________________________________
+[ 11106] By: jhi on 2001/07/02 19:18:28
+ Log: Subject: Re: [PATCH 5.6.1] OS/2 cwd
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Mon, 2 Jul 2001 15:45:41 -0400
+ Message-ID: <20010702154541.B24295@math.ohio-state.edu>
+ Branch: perl
+ ! os2/os2.c
+____________________________________________________________________________
+[ 11105] By: jhi on 2001/07/02 19:17:27
+ Log: (Mistaken retraction)
+ Branch: perl
+ ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11104] By: jhi on 2001/07/02 18:56:15
+ Log: Detypo in #11103.
+ Branch: perl
+ ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11103] By: jhi on 2001/07/02 18:54:53
+ Log: Subject: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings')
+ From: Jonathan Stowe <gellyfish@gellyfish.com>
+ Date: Mon, 2 Jul 2001 19:17:21 +0100 (BST)
+ Message-ID: <Pine.LNX.4.33.0107021904530.7401-100000@orpheus.gellyfish.com>
+ Branch: perl
+ ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11102] By: jhi on 2001/07/02 18:16:09
+ Log: Subject: [PATCH perl@11059] UCD.pm: if at first you don't succeed, croak?
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Mon, 02 Jul 2001 14:11:23 -0500
+ Message-Id: <5.1.0.14.0.20010702140058.01b6c9c0@exchi01>
+ Branch: perl
+ ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11101] By: jhi on 2001/07/02 18:14:51
+ Log: Subject: [PATCH] Re: op/numconvert.t failures
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Mon, 2 Jul 2001 20:10:48 +0100
+ Message-ID: <20010702201048.E59620@plum.flirble.org>
+ Branch: perl
+ ! t/op/numconvert.t
+____________________________________________________________________________
+[ 11100] By: jhi on 2001/07/02 17:51:44
+ Log: Update Changes.
+ Branch: perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 11099] By: jhi on 2001/07/02 17:46:31
+ Log: Retract #11055, didn't help much (2736 bytes vs 2725 bytes leaked).
+ The real fix must be more involved. The line of code all the leaky
+ call stacks seem to go through is op.c:2949, the PmopSTASH_set()
+ line of Perl_newPMOP().
+ Branch: perl
+ ! op.h
+____________________________________________________________________________
+[ 11098] By: jhi on 2001/07/02 17:37:44
+ Log: Based on
+
+ Subject: Re: sizeof(struct sembuf)
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Sun, 1 Jul 2001 22:26:48 +0100
+ Message-ID: <20010701222648.W59620@plum.flirble.org>
+
+ but do semop() always the slow way.
+ Branch: perl
+ ! doio.c
+____________________________________________________________________________
+[ 11097] By: jhi on 2001/07/02 17:22:14
+ Log: Subject: [PATCH] Encode/Tcl.t, for esc-seq encodings
+ From: SADAHIRO Tomoyuki <BQW10602@nifty.com>
+ Date: Tue, 03 Jul 2001 00:56:30 +0900
+ Message-Id: <20010703005600.2225.BQW10602@nifty.com>
+ Branch: perl
+ ! ext/Encode/Encode/Tcl.t
+____________________________________________________________________________
+[ 11096] By: jhi on 2001/07/02 17:11:24
+ Log: Subject: [PATCH] Encode/Tcl.pm, continuous sequences
+ From: SADAHIRO Tomoyuki <BQW10602@nifty.com>
+ Date: Tue, 03 Jul 2001 00:55:46 +0900
+ Message-Id: <20010703005516.2222.BQW10602@nifty.com>
+ Branch: perl
+ ! ext/Encode/Encode/Tcl.pm
+____________________________________________________________________________
+[ 11095] By: jhi on 2001/07/02 17:07:14
+ Log: Regen api and toc.
+ Branch: perl
+ ! pod/perlapi.pod pod/perltoc.pod
+____________________________________________________________________________
+[ 11094] By: jhi on 2001/07/02 16:29:42
+ Log: Metaconfig unit change for #11093.
+ Branch: metaconfig/U/perl
+ ! d_fcntl_can_lock.U
+____________________________________________________________________________
+[ 11093] By: jhi on 2001/07/02 16:28:56
+ Log: The fcntl locking test may hang if NFS locking messed up;
+ break out with alarm(10).
+ Branch: perl
+ ! Configure
+____________________________________________________________________________
+[ 11092] By: jhi on 2001/07/02 14:11:31
+ Log: Move the mdelete.bat from win32/bin to win32.
+ Branch: perl
+ ! MANIFEST
+____________________________________________________________________________
+[ 11091] By: jhi on 2001/07/02 14:10:01
+ Log: Typo in #11083.
+ Branch: perl
+ ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11090] By: jhi on 2001/07/02 13:36:58
+ Log: Netware tweaks from Guruprasad.
+ Branch: perl
+ - NetWare/perlsdio.h
+ ! MANIFEST NetWare/Makefile NetWare/interface.c
+ ! NetWare/interface.h NetWare/iperlhost.h NetWare/nwtinfo.h
+ ! perlsdio.h
+____________________________________________________________________________
+[ 11089] By: jhi on 2001/07/02 13:25:40
+ Log: Subject: Re: [PATH] shared -> unique;
+ From: Abhijit Menon-Sen <ams@wiw.org>
+ Date: Wed, 27 Jun 2001 03:51:27 +0530
+ Message-ID: <20010627035127.A17623@lustre.lustre.dyn.wiw.org>
+ Branch: perl
+ ! dump.c gv.c gv.h op.c pp_sys.c sv.c toke.c xsutils.c
+____________________________________________________________________________
+[ 11088] By: jhi on 2001/07/02 13:24:27
+ Log: Subject: Re: AIX / gcc-3.0
+ From: "H.Merijn Brand" <h.m.brand@hccnet.nl>
+ Date: Mon, 02 Jul 2001 15:20:21 +0200
+ Message-Id: <20010702151904.49BB.H.M.BRAND@hccnet.nl>
+ Branch: perl
+ ! hints/aix.sh
+____________________________________________________________________________
+[ 11087] By: jhi on 2001/07/02 13:23:21
+ Log: Subject: Re: Bug report: split splits on wrong pattern
+ From: Abhijit Menon-Sen <ams@wiw.org>
+ Message-ID: <20010702163133.A23186@lustre.dyn.wiw.org>
+ Date: Mon, 2 Jul 2001 16:31:33 +0530
+ Branch: perl
+ ! pp_ctl.c
+____________________________________________________________________________
+[ 11086] By: jhi on 2001/07/02 13:22:30
+ Log: Subject: [PATCH 5.6.1] test harness
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Mon, 2 Jul 2001 06:29:21 -0400
+ Message-ID: <20010702062921.A1810@math.ohio-state.edu>
+ Branch: perl
+ ! lib/Test/Harness.pm
+____________________________________________________________________________
+[ 11085] By: jhi on 2001/07/02 13:21:39
+ Log: Subject: [PATCH 5.6.1] debugger goof
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Mon, 2 Jul 2001 06:27:22 -0400
+ Message-ID: <20010702062722.A1746@math.ohio-state.edu>
+ Branch: perl
+ ! lib/perl5db.pl
+____________________________________________________________________________
+[ 11084] By: jhi on 2001/07/02 13:20:50
+ Log: Subject: [PATCH 5.6.1] OS/2 cwd
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Mon, 2 Jul 2001 06:21:17 -0400
+ Message-ID: <20010702062117.A1401@math.ohio-state.edu>
+ Branch: perl
+ ! lib/Cwd.pm lib/File/Find/taint.t lib/FindBin.pm os2/os2.c
+____________________________________________________________________________
+[ 11083] By: jhi on 2001/07/02 13:19:18
+ Log: Make #11082 more OS/2-specific.
+ Branch: perl
+ ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11082] By: jhi on 2001/07/02 13:14:36
+ Log: Subject: [PATCH 5.6.1] OS/2 gmtime()
+ From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Date: Mon, 2 Jul 2001 06:06:34 -0400
+ Message-ID: <20010702060634.A1356@math.ohio-state.edu>
+ Branch: perl
+ ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11081] By: jhi on 2001/07/02 13:13:08
+ Log: Subject: [PATCH B::Deparse] version number & changes
+ From: Robin Houston <robin@kitsite.com>
+ Date: Sun, 1 Jul 2001 17:17:29 +0100
+ Message-ID: <20010701171729.A30678@puffinry.freeserve.co.uk>
+ Branch: perl
+ ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11080] By: jhi on 2001/07/02 13:11:48
+ Log: Subject: a small fix.
+ From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+ Date: Mon, 2 Jul 2001 12:17:53 +0200
+ Message-ID: <E3FB32585BF1D411B9E900805FF51A08074B35@RU0022EXCH001U>
+ Branch: perl
+ ! ext/Thread/Thread.xs
+____________________________________________________________________________
+[ 11079] By: jhi on 2001/07/02 13:10:39
+ Log: Subject: RE: perl@10907
+ From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+ Date: Mon, 2 Jul 2001 12:06:16 +0200
+ Message-ID: <E3FB32585BF1D411B9E900805FF51A08074B2C@RU0022EXCH001U>
+
+ Borland C vs PerlIO.
+ Branch: perl
+ ! win32/config.bc win32/config_H.bc
+____________________________________________________________________________
+[ 11078] By: jhi on 2001/07/02 13:03:44
+ Log: Subject: [PATCH] Report /pro/3gl/CPAN/perl-5.7.1
+ From: "H.M. Brand" <merijn@l1.procura.nl>
+ Date: Mon, 02 Jul 2001 11:18:57 +0200
+ Message-Id: <20010702100811.4999.MERIJN@l1.procura.nl>
+ Branch: perl
+ ! t/op/write.t
+____________________________________________________________________________
+[ 11077] By: jhi on 2001/07/02 12:58:27
+ Log: Subject: [PATCH] Deleting ext/util/mkbootstrap
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Mon, 2 Jul 2001 00:26:24 -0400
+ Message-ID: <20010702002624.A18302@blackrider>
+ Branch: perl
+ - ext/util/mkbootstrap
+____________________________________________________________________________
+[ 11076] By: jhi on 2001/07/02 12:56:20
+ Log: Subject: [PATCH op.h] v minor comment tweak
+ From: Robin Houston <robin@puffinry.freeserve.co.uk>
+ Date: Mon, 2 Jul 2001 00:42:01 +0100
+ Message-Id: <E15GqxK-0006WZ-00.2001-07-02-00-48-46@mail18.svr.pol.co.uk>
+ Branch: perl
+ ! op.h
+____________________________________________________________________________
+[ 11075] By: jhi on 2001/07/02 12:53:48
+ Log: SysV IPC semops use native shorts, not forced-to-16-bit-shorts.
+ Branch: perl
+ ! pod/perlfunc.pod
+____________________________________________________________________________
+[ 11074] By: jhi on 2001/07/02 12:52:28
+ Log: Subject: Re: sizeof(struct sembuf)
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Sun, 1 Jul 2001 19:23:16 +0100
+ Message-ID: <20010701192316.V59620@plum.flirble.org>
+
+ s/signaling/signalling/
+ Branch: perl
+ ! pod/perlfunc.pod
+____________________________________________________________________________
+[ 11073] By: jhi on 2001/07/02 12:49:51
+ Log: Subject: [PATCH perlsnap] Suggestion for mnemonic for $^N
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Sun, 1 Jul 2001 09:37:56 +0200
+ Message-Id: <200107010733.KAA03920@taas.iki.fi>
+ Branch: perl
+ ! pod/perlvar.pod
+____________________________________________________________________________
+[ 11072] By: jhi on 2001/07/02 12:48:03
+ Log: Subject: [PATCH perlsnap] /^qnx|nto$/ --> /^(?:qnx|nto)$/
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Sun, 1 Jul 2001 09:37:56 +0200
+ Message-Id: <200107010733.KAA03925@taas.iki.fi>
+ Branch: perl
+ ! lib/ExtUtils/MM_Unix.pm lib/File/Spec/Unix.pm
+____________________________________________________________________________
+[ 11071] By: jhi on 2001/07/02 12:45:12
+ Log: Metaconfig unit change for #11070.
+ Branch: metaconfig
+ ! U/compline/randfunc.U
+____________________________________________________________________________
+[ 11070] By: jhi on 2001/07/02 12:43:58
+ Log: Subject: [PATCH perlsnap] its --> it's --> its
+ From: "Philip Newton" <Philip.Newton@gmx.net>
+ Date: Sun, 1 Jul 2001 09:37:56 +0200
+ Message-Id: <200107010733.KAA03914@taas.iki.fi>
+ Branch: perl
+ ! Porting/config_H
+____________________________________________________________________________
+[ 11069] By: jhi on 2001/07/02 12:01:52
+ Log: Sync with Sarathy; integrate with perlio.
+ Branch: perl
+ !> gv.c
+____________________________________________________________________________
+[ 11068] By: gsar on 2001/07/02 08:07:54
+ Log: regenerate win32/config_H.?c files
+ Branch: perl
+ ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
+____________________________________________________________________________
+[ 11067] By: gsar on 2001/07/02 08:03:55
+ Log: rename s/sv_getcwd/getcwd_sv/ for better conformance to existing
+ naming discipline
+
+ win32 fix: enable getcwd_sv() to work on windows (POSIX.t was failing
+ because of this)
+
+ fix a warning about "fd" being used without being set in Cwd.xs
+ Branch: perl
+ ! embed.h embed.pl ext/Cwd/Cwd.xs ext/POSIX/POSIX.t
+ ! ext/POSIX/POSIX.xs global.sym objXSUB.h perlapi.c
+ ! pod/perlapi.pod proto.h util.c win32/config.bc win32/config.gc
+ ! win32/config.vc
+____________________________________________________________________________
+[ 11066] By: gsar on 2001/07/02 07:12:10
+ Log: win32 fixes: fix various syntax errors ("no preprocessor directives
+ within macro arguments") and warnings ("unary minus applied to
+ unsigned type", among others)
+ Branch: perl
+ ! gv.c hv.c op.c pp.c sv.c toke.c
+____________________________________________________________________________
+[ 11065] By: gsar on 2001/07/02 06:26:22
+ Log: win32 fixes: more spurious CRs
+ Branch: perl
+ ! win32/mdelete.bat
+____________________________________________________________________________
+[ 11064] By: gsar on 2001/07/02 06:25:22
+ Log: win32 tweaks: remove extra CRs from makefile.mk; move mdelete.bat
+ from win32/bin (or it gets deleted by distclean); don't delete
+ lib/Cwd.pm during distclean; mdelete.bat doesn't work properly on
+ NT (should be made Win9x specific, and added to makefile.mk)
+ Branch: perl
+ +> win32/mdelete.bat
+ - win32/bin/mdelete.bat
+ ! win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 11063] By: nick on 2001/07/01 18:54:09
+ Log: Quick for for #ifdef mess
+ Branch: perlio
+ ! gv.c
+____________________________________________________________________________
+[ 11062] By: nick on 2001/07/01 18:47:42
+ Log: Raw integrate - does not build #if mess in gv.c
+ Branch: perlio
+ !> (integrate 29 files)
+____________________________________________________________________________
+[ 11061] By: jhi on 2001/07/01 15:20:38
+ Log: Make 'compile' target a little less broken.
+ Still very broken, though: -Wall warnings from
+ the generated code, boot_Foo prototypes missing,
+ can't autoload Fcntl::SEEK_CUR et alia, ...
+ Branch: perl
+ ! ext/B/B/C.pm pod/Makefile.SH t/TEST utils/Makefile
+ ! utils/perlcc.PL x2p/Makefile.SH
+____________________________________________________________________________
+[ 11060] By: jhi on 2001/07/01 14:04:20
+ Log: Upgrade to Storable 1.0.12, from Raphael Manfredi.
+ Branch: perl
+ ! ext/Storable/ChangeLog ext/Storable/Storable.pm
+ ! ext/Storable/Storable.xs ext/Storable/t/freeze.t
+____________________________________________________________________________
+[ 11059] By: jhi on 2001/07/01 05:02:59
+ Log: Update Changes.
+ Branch: perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
[ 11058] By: jhi on 2001/07/01 04:57:05
Log: Still one typo, regen toc.
Branch: perl
# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
#
-# Generated on Fri Jun 29 17:44:53 EET DST 2001 [metaconfig 3.0 PL70]
+# Generated on Wed Jul 4 20:30:41 EET DST 2001 [metaconfig 3.0 PL70]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
if $test -f /lib/syscalls.exp; then
echo " "
echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
- $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
+ $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list
fi
;;
esac
echo " "
: See if fcntl-based locking works.
-$cat >try.c <<'EOCP'
+$cat >try.c <<EOCP
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
+#include <signal.h>
+$signal_t blech(x) int x; { exit(3); }
int main() {
#if defined(F_SETLK) && defined(F_SETLKW)
struct flock flock;
flock.l_type = F_RDLCK;
flock.l_whence = SEEK_SET;
flock.l_start = flock.l_len = 0;
+ signal(SIGALRM, blech);
+ alarm(10);
retval = fcntl(fd, F_SETLK, &flock);
close(fd);
(retval < 0 ? exit(2) : exit(0));
else
echo "Nope, it didn't work."
val="$undef"
+ case "$?" in
+ 3) $cat >&4 <<EOM
+***
+*** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
+*** This is (almost) impossible.
+*** If your NFS lock daemons are not feeling well, something like
+*** this may happen, please investigate. Cannot continue, aborting.
+***
+EOM
+ exit 1
+ ;;
+ esac
fi
else
echo "I'm unable to compile the test program, so I'll assume not."
=head1 suidperl
-suiperl is an optional component, which is built or installed by default.
+suidperl is an optional component, which is built or installed by default.
From perlfaq1:
On some systems, setuid and setgid scripts (scripts written
Since the functionality is so lacking, it must be considered
highly experimental. It is so experimental that it is not even
-mentioned during an interactive Configure session, a direct comand
+mentioned during an interactive Configure session, a direct command
line invocation (detailed shortly) is required to access the
functionality.
ext/Time/Piece/README Time::Piece extension
ext/Time/Piece/Seconds.pm Time::Piece extension
ext/util/make_ext Used by Makefile to execute extension Makefiles
-ext/util/mkbootstrap Turns ext/*/*_BS into bootstrap info
ext/XS/Typemap/Makefile.PL XS::Typemap extension
ext/XS/Typemap/README XS::Typemap extension
ext/XS/Typemap/stdio.c XS::Typemap extension
lib/Net/demos/snpp libnet
lib/Net/demos/time libnet
lib/Net/Domain.pm libnet
-lib/Net/DummyInetd.pm libnet
lib/Net/FTP.pm libnet
lib/Net/FTP/A.pm libnet
lib/Net/FTP/dataconn.pm libnet
lib/Net/netent.t See if Net::netent works
lib/Net/Netrc.pm libnet
lib/Net/NNTP.pm libnet
-lib/Net/PH.pm libnet
lib/Net/Ping.pm Hello, anybody home?
lib/Net/POP3.pm libnet
lib/Net/protoent.pm By-name interface to Perl's builtin getproto*
lib/Net/servent.pm By-name interface to Perl's builtin getserv*
lib/Net/servent.t See if Net::servtent works
lib/Net/SMTP.pm libnet
-lib/Net/SNPP.pm libnet
lib/Net/t/ftp.t libnet
lib/Net/t/hostname.t libnet
lib/Net/t/nntp.t libnet
-lib/Net/t/ph.t libnet
lib/Net/t/require.t libnet
lib/Net/t/smtp.t libnet
lib/Net/Time.pm libnet
lib/Time/localtime.t Test for Time::localtime
lib/Time/tm.pm Internal object for Time::{gm,local}time
lib/timelocal.pl Perl library supporting inverse of localtime, gmtime
-lib/Unicode/UCD.pm Unicode character database
-lib/Unicode/UCD.t See if Unicode character database works
lib/unicode/ArabLink.pl Unicode character database
lib/unicode/ArabLnkGrp.pl Unicode character database
lib/unicode/ArabShap.txt Unicode character database
lib/unicode/In/0.pl Unicode character database
lib/unicode/In/1.pl Unicode character database
lib/unicode/In/10.pl Unicode character database
+lib/unicode/In/100.pl Unicode character database
+lib/unicode/In/101.pl Unicode character database
+lib/unicode/In/102.pl Unicode character database
+lib/unicode/In/103.pl Unicode character database
+lib/unicode/In/104.pl Unicode character database
+lib/unicode/In/105.pl Unicode character database
+lib/unicode/In/106.pl Unicode character database
+lib/unicode/In/107.pl Unicode character database
+lib/unicode/In/108.pl Unicode character database
+lib/unicode/In/109.pl Unicode character database
lib/unicode/In/11.pl Unicode character database
+lib/unicode/In/110.pl Unicode character database
+lib/unicode/In/111.pl Unicode character database
+lib/unicode/In/112.pl Unicode character database
+lib/unicode/In/113.pl Unicode character database
+lib/unicode/In/114.pl Unicode character database
+lib/unicode/In/115.pl Unicode character database
+lib/unicode/In/116.pl Unicode character database
+lib/unicode/In/117.pl Unicode character database
+lib/unicode/In/118.pl Unicode character database
+lib/unicode/In/119.pl Unicode character database
lib/unicode/In/12.pl Unicode character database
+lib/unicode/In/120.pl Unicode character database
+lib/unicode/In/121.pl Unicode character database
+lib/unicode/In/122.pl Unicode character database
+lib/unicode/In/123.pl Unicode character database
+lib/unicode/In/124.pl Unicode character database
+lib/unicode/In/125.pl Unicode character database
+lib/unicode/In/126.pl Unicode character database
+lib/unicode/In/127.pl Unicode character database
+lib/unicode/In/128.pl Unicode character database
+lib/unicode/In/129.pl Unicode character database
lib/unicode/In/13.pl Unicode character database
+lib/unicode/In/130.pl Unicode character database
+lib/unicode/In/131.pl Unicode character database
+lib/unicode/In/132.pl Unicode character database
+lib/unicode/In/133.pl Unicode character database
+lib/unicode/In/134.pl Unicode character database
+lib/unicode/In/135.pl Unicode character database
lib/unicode/In/14.pl Unicode character database
lib/unicode/In/15.pl Unicode character database
lib/unicode/In/16.pl Unicode character database
lib/unicode/In/93.pl Unicode character database
lib/unicode/In/94.pl Unicode character database
lib/unicode/In/95.pl Unicode character database
+lib/unicode/In/96.pl Unicode character database
+lib/unicode/In/97.pl Unicode character database
+lib/unicode/In/98.pl Unicode character database
+lib/unicode/In/99.pl Unicode character database
lib/unicode/Index.txt Unicode character database
lib/unicode/Is/Alnum.pl Unicode character database
lib/unicode/Is/Alpha.pl Unicode character database
lib/unicode/README.perl Unicode character database
lib/unicode/ReadMe.txt Unicode character database info
lib/unicode/rename Filename mappings used
+lib/unicode/Scripts.pl Unicode character database
lib/unicode/Scripts.txt Unicode character database
lib/unicode/SpecCase.txt Unicode character database
lib/unicode/syllables.txt Unicode character database
lib/unicode/To/Title.pl Unicode character database
lib/unicode/To/Upper.pl Unicode character database
lib/unicode/UCD.html Unicode character database
+lib/Unicode/UCD.pm Unicode character database
+lib/Unicode/UCD.t See if Unicode character database works
lib/unicode/Unicode.html Unicode character database
lib/unicode/Unicode.txt Unicode character database
lib/unicode/version The version of the Unicode
NetWare/nwtinfo.h Netware port
NetWare/NWUtil.c Netware port
NetWare/nwutil.h Netware port
-NetWare/perlsdio.h Netware port
NetWare/t/NWModify.pl Netware port
NetWare/t/NWScripts.pl Netware port
NetWare/t/Readme.txt Netware port
warnings.h The warning numbers
warnings.pl Program to write warnings.h and lib/warnings.pm
win32/bin/exetype.pl Set executable type to CONSOLE or WINDOWS
-win32/bin/mdelete.bat multifile delete
win32/bin/perlglob.pl Win32 globbing
win32/bin/pl2bat.pl wrap perl scripts into batch files
win32/bin/runperl.pl run perl script via batch file namesake
win32/include/sys/socket.h Win32 port
win32/Makefile Win32 makefile for NMAKE (Visual C++ build)
win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds)
+win32/mdelete.bat multifile delete
win32/perlglob.c Win32 port
win32/perlhost.h Perl "host" implementation
win32/perllib.c Win32 port
## This file is created by using the makefile that creates Windows Perl as the reference
## Author: sgp
## Date Created: 13th July 2000
-## Date Modified: 30th June 2001
+## Date Modified: 2nd July 2001
# Name of the NLM
NLM_NAME = perl.nlm
cd ..\netware
!if "$(NW_EXTNS)"=="yes"
cd cgi2perl
- -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err
+ -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map
cd ..
+ cd $(EXTDIR)\Perl2UCS
+ -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map *.c
+ cd ..\..\netware
!endif
-rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
-rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
*/
/*
- * FILENAME : interface.c
- * DESCRIPTION : Perl parsing and running functions.
- * Author : SGP
- * Date : January 2001.
- *
+ * FILENAME : interface.c
+ * DESCRIPTION : Calling Perl APIs.
+ * Author : SGP
+ * Date Created : January 2001.
+ * Date Modified: July 2nd 2001.
*/
#include "interface.h"
-
+#include "nwtinfo.h"
static void xs_init(pTHX);
return 0;
}
+bool
+ClsPerlHost::RegisterWithThreadTable()
+{
+ return(fnRegisterWithThreadTable());
+}
+
+bool
+ClsPerlHost::UnregisterWithThreadTable()
+{
+ return(fnUnregisterWithThreadTable());
+}
+
int
ClsPerlHost::PerlCreate(PerlInterpreter *my_perl)
{
*/
/*
- * FILENAME : interface.c
- * DESCRIPTION : Perl parsing and running functions.
- * Author : SGP
- * Date : January 2001.
- *
+ * FILENAME : interface.c
+ * DESCRIPTION : Perl parsing and running functions.
+ * Author : SGP
+ * Date Created : January 2001.
+ * Date Modified: July 2nd 2001.
*/
int PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env);
int PerlRun(PerlInterpreter *my_perl);
void PerlDestroy(PerlInterpreter *my_perl);
-
+ bool RegisterWithThreadTable(void);
+ bool UnregisterWithThreadTable(void);
};
*/
/*
- * FILENAME : iperlhost.h
- * DESCRIPTION : IPerlHost class file.
- * Author : SGP
- * Date : January 2001.
- *
+ * FILENAME : iperlhost.h
+ * DESCRIPTION : IPerlHost class file.
+ * Author : SGP
+ * Date Created : January 2001.
+ * Date Modified: July 2nd 2001.
*/
virtual int PerlParse(PerlInterpreter *my_perl,int argc, char** argv, char** env) = 0;
virtual int PerlRun(PerlInterpreter *my_perl) = 0;
virtual void PerlDestroy(PerlInterpreter *my_perl) = 0;
-
+ virtual bool RegisterWithThreadTable(void)=0;
+ virtual bool UnregisterWithThreadTable(void)=0;
};
extern "C" IPerlHost* AllocStdPerl();
*/
/*
- * FILENAME : NWTInfo.h
- * DESCRIPTION : Thread-local storage for Perl.
- * Author : SGP, HYAK
- * Date : January 2001.
- *
+ * FILENAME : NWTInfo.h
+ * DESCRIPTION : Thread-local storage for Perl.
+ * Author : SGP, HYAK
+ * Date Created : January 2001.
+ * Date Modified: July 2nd 2001.
*/
void fnInitializeThreadInfo(void);
BOOL fnTerminateThreadInfo(void);
-BOOL fnRegisterWithThreadTable(void);
-BOOL fnUnregisterWithThreadTable(void);
ThreadInfo* fnAddThreadInfo(int tid);
BOOL fnRemoveThreadInfo(int tid);
ThreadInfo* fnGetThreadInfo(int tid);
-//For storing and retrieving Watcom Hash list address
#ifdef __cplusplus
+ //For storing and retrieving Watcom Hash list address
extern "C" BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList);
+ //Registering with the Thread table
+ extern "C" BOOL fnRegisterWithThreadTable(void);
+ extern "C" BOOL fnUnregisterWithThreadTable(void);
#else
+ //For storing and retrieving Watcom Hash list address
BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList);
+ //Registering with the Thread table
+ BOOL fnRegisterWithThreadTable(void);
+ BOOL fnUnregisterWithThreadTable(void);
#endif
+
BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList);
//New TLS to set and get the thread contex - may be redundant,
+++ /dev/null
---- perlsdio.h.old Sat Jun 30 14:42:22 2001
-+++ perlsdio.h Sat Jun 30 14:59:49 2001
-@@ -1,4 +1,9 @@
- #ifdef PERLIO_IS_STDIO
-+
-+#ifdef NETWARE
-+ #include "nwstdio.h"
-+#else
-+
- /*
- * This file #define-s the PerlIO_xxx abstraction onto stdio functions.
- * Make this as close to original stdio as possible.
-@@ -136,4 +141,5 @@
- #define PerlIO_get_bufsiz(f) (abort(),0)
- #endif
-
-+#endif /* NETWARE */
- #endif /* PERLIO_IS_STDIO */
=head1 DESCRIPTION
-As of perl5.004_04, all tests pass under:
+As of perl5.8.0 all tests pass under:
- QNX 4.23A
+ QNX 4.24G
Watcom 10.6 with Beta/970211.wcc.update.tar.F
socket3r.lib Nov21 1996.
-Update June 2001: Perl 5.6.1 works fine in QNX4 with
-a few 'known' failures in the test suite.
+Some tests may complain under known circumstances. See
+below and hints/qnx.sh for more information.
[ Perl 5.6.0 is shipping with QNX RTP (aka QNX6, Neutrino), but
the build does not appear to be straightforward. If anyone has
PATH. The PATH test is triggered because cwd calls
`fullpath -t`.
-ext/IO/lib/IO/t/io_sock.t Still investigating
-ext/POSIX/sigaction.t Still investigating
+ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to
+the fact that the functionality to read back the non-blocking
+status of a socket is not implemented in QNX's TCP/IP. This
+has been reported to QNX and it may work with later versions
+of TCP/IP.
=head2 QNX auxiliary files
=head1 SYNOPSIS
-This is a port of Perl version 5, revision 7, to VOS. Perl is a
-scripting or macro language that is popular on many systems. See your
-local computer bookstore for a number of good books on Perl.
+This is a port of Perl version 5 to VOS. Perl is a scripting or
+macro language that is popular on many systems. See your local
+computer bookstore for a number of good books on Perl.
=head2 Stratus POSIX Support
Note that there are two different implementations of POSIX.1
support on VOS. There is an alpha version of POSIX that is
available from the Stratus anonymous ftp site
-(ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html). There
-is a generally-available version of POSIX that comes with the
-VOS Standard C compiler and C runtime in VOS Release 14.3.0 or
-higher. This port of POSIX will compile and bind with either
+(ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html). There is
+a generally-available version of POSIX that comes with the VOS
+Standard C Compiler or VOS C runtime in VOS Release 14.3.0 or
+higher. This port of perl will compile and bind with either
version of POSIX.
Most of the Perl features should work on VOS regardless of which
attempt by perl.pm to call the following unimplemented POSIX
functions will result in an error message and an immediate and
fatal call to the VOS debugger. They are "dup", "fork", and
-"waitpid". The lack of these functions pretty much prevents you
-from starting VOS commands and grabbing their output in perl.
-The workaround is to run the commands outside of perl, then have
-perl process the output file. These functions are all available
-in the generally-available version of POSIX.
+"waitpid". The lack of these functions prevents you from
+starting VOS commands and grabbing their output in perl. The
+workaround is to run the commands outside of perl, then have perl
+process the output file. These functions are all available in
+the generally-available version of POSIX.
=head1 INSTALLING PERL IN VOS
=item 5
-If you are using the generally-available version of VOS
-POSIX support, then you should also acquire the VOS GNU
-C/C++ Compiler and GNU Tools product. When perl is built
-with this version of POSIX support, it assumes that it can
-find "bash", "sed" and other POSIX-compatible commands in
-the directory /system/gnu_library/bin.
+If you are using the generally-available version of VOS POSIX
+support, then you should also acquire the VOS GNU C/C++ Compiler
+and GNU Tools product because it provides many common Unix or
+POSIX commands. When perl is built with this version of POSIX
+support, it assumes that it can find "bash", "sed" and other
+POSIX-compatible commands in the directory
+/system/gnu_library/bin.
=back
=head1 LAST UPDATE
-June 11, 2001
+July 4, 2001
=cut
sed -e $SCPP t/comp/cpp.aux |tr -d '\r' >s; mv -f s t/comp/cpp.aux
sed -e $SARGV -e $SDOTTMP t/io/argv.t >s; mv -f s t/io/argv.t
sed -e $SABC t/io/inplace.t >s; mv -f s t/io/inplace.t
-sed -e $SDBMX t/lib/anydbm.t >s; mv -f s t/lib/anydbm.t
-sed -e $SDBMX -e $SDBHASH t/lib/gdbm.t >s; mv -f s t/lib/gdbm.t
-sed -e $SDBMX -e $SDBHASH t/lib/sdbm.t >s; mv -f s t/lib/sdbm.t
+sed -e $SDBMX -e $SDBHASH ext/GDBM_File/gdbm.t >s; mv -f s ext/GDBM_File/gdbm.t
sed -e $SSTAT -e $STMP2 t/op/stat.t >s; mv -f s t/op/stat.t
sed -e $SLIST x2p/Makefile.SH |tr -d '\r' >s; mv -f s x2p/Makefile.SH
sed -e 's=^#define.\([A-Z]\+\)_EXP.*$=#define \1_EXP djgpp_pathexp("\1")=g' config_h.SH >s; mv -f s config_h.SH
id = SvIVx(*++mark);
opstr = *++mark;
opbuf = SvPV(opstr, opsize);
- if (opsize < sizeof(struct sembuf)
- || (opsize % sizeof(struct sembuf)) != 0) {
+ if (opsize < 3 * SHORTSIZE
+ || (opsize % (3 * SHORTSIZE))) {
SETERRNO(EINVAL,LIB$_INVARG);
return -1;
}
SETERRNO(0,0);
- return semop(id, (struct sembuf *)opbuf, opsize/sizeof(struct sembuf));
+ /* We can't assume that sizeof(struct sembuf) == 3 * sizeof(short). */
+ {
+ int nsops = opsize / (3 * sizeof (short));
+ int i = nsops;
+ short *ops = (short *) opbuf;
+ short *o = ops;
+ struct sembuf *temps, *t;
+ I32 result;
+
+ New (0, temps, nsops, struct sembuf);
+ t = temps;
+ while (i--) {
+ t->sem_num = *o++;
+ t->sem_op = *o++;
+ t->sem_flg = *o++;
+ t++;
+ }
+ result = semop(id, temps, nsops);
+ t = temps;
+ o = ops;
+ i = nsops;
+ while (i--) {
+ *o++ = t->sem_num;
+ *o++ = t->sem_op;
+ *o++ = t->sem_flg;
+ t++;
+ }
+ Safefree(temps);
+ return result;
+ }
#else
Perl_croak(aTHX_ "semop not implemented");
#endif
else if (o->op_type == OP_CONST) {
if (o->op_private & OPpCONST_BARE)
sv_catpv(tmpsv, ",BARE");
+ if (o->op_private & OPpCONST_OCTAL)
+ sv_catpv(tmpsv, ",OCTAL");
if (o->op_private & OPpCONST_STRICT)
sv_catpv(tmpsv, ",STRICT");
if (o->op_private & OPpCONST_ARYBASE)
case SVt_PVGV:
if (GvINTRO(sv)) sv_catpv(d, "INTRO,");
if (GvMULTI(sv)) sv_catpv(d, "MULTI,");
- if (GvSHARED(sv)) sv_catpv(d, "SHARED,");
+ if (GvUNIQUE(sv)) sv_catpv(d, "UNIQUE,");
if (GvASSUMECV(sv)) sv_catpv(d, "ASSUMECV,");
if (GvIN_PAD(sv)) sv_catpv(d, "IN_PAD,");
if (flags & SVpad_OUR) sv_catpv(d, "OUR,");
#define sv_collxfrm Perl_sv_collxfrm
#endif
#define sv_compile_2op Perl_sv_compile_2op
-#define sv_getcwd Perl_sv_getcwd
+#define getcwd_sv Perl_getcwd_sv
#define sv_dec Perl_sv_dec
#define sv_dump Perl_sv_dump
#define sv_derived_from Perl_sv_derived_from
#define sv_collxfrm(a,b) Perl_sv_collxfrm(aTHX_ a,b)
#endif
#define sv_compile_2op(a,b,c,d) Perl_sv_compile_2op(aTHX_ a,b,c,d)
-#define sv_getcwd(a) Perl_sv_getcwd(aTHX_ a)
+#define getcwd_sv(a) Perl_getcwd_sv(aTHX_ a)
#define sv_dec(a) Perl_sv_dec(aTHX_ a)
#define sv_dump(a) Perl_sv_dump(aTHX_ a)
#define sv_derived_from(a,b) Perl_sv_derived_from(aTHX_ a,b)
# if defined(PERL_IMPLICIT_SYS)
# endif
#endif
-#if defined(MYMALLOC)
#define malloc Perl_malloc
#define calloc Perl_calloc
#define realloc Perl_realloc
#define mfree Perl_mfree
+#if defined(MYMALLOC)
#define malloced_size Perl_malloced_size
#endif
#define get_context Perl_get_context
#endif
#define Perl_sv_compile_2op CPerlObj::Perl_sv_compile_2op
#define sv_compile_2op Perl_sv_compile_2op
-#define Perl_sv_getcwd CPerlObj::Perl_sv_getcwd
-#define sv_getcwd Perl_sv_getcwd
+#define Perl_getcwd_sv CPerlObj::Perl_getcwd_sv
+#define getcwd_sv Perl_getcwd_sv
#define Perl_sv_dec CPerlObj::Perl_sv_dec
#define sv_dec Perl_sv_dec
#define Perl_sv_dump CPerlObj::Perl_sv_dump
# endif
#endif
-#if defined(MYMALLOC)
Ajnop |Malloc_t|malloc |MEM_SIZE nbytes
Ajnop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
Ajnop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
Ajnop |Free_t |mfree |Malloc_t where
+#if defined(MYMALLOC)
jnp |MEM_SIZE|malloced_size |void *p
#endif
Apd |char* |sv_collxfrm |SV* sv|STRLEN* nxp
#endif
Ap |OP* |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
-Apd |int |sv_getcwd |SV* sv
+Apd |int |getcwd_sv |SV* sv
Apd |void |sv_dec |SV* sv
Ap |void |sv_dump |SV* sv
Apd |bool |sv_derived_from|SV* sv|const char* name
CVf_METHOD CVf_LOCKED CVf_LVALUE
PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
-$VERSION = 0.60;
+$VERSION = 0.61;
use strict;
use warnings ();
# - separate recognition of constant subs
# - rewrote continue block handling, now recoginizing for loops
# - added more control of expanding control structures
+# Changes between 0.60 and 0.61 (mostly by Robin Houston)
+# - many bug-fixes
+# - support for pragmas and 'use'
+# - support for the little-used $[ variable
+# - support for __DATA__ sections
+# - UTF8 support
+# - BEGIN, CHECK, INIT and END blocks
+# - scoping of subroutine declarations fixed
+# - compile-time output from the input program can be suppressed, so that the
+# output is just the deparsed code. (a change to O.pm in fact)
+# - our() declarations
+# - *all* the known bugs are now listed in the BUGS section
+# - comprehensive test mechanism (TEST -deparse)
# Todo:
# (See also BUGS section at the end of this file)
return $self;
}
-sub WARN_MASK () {
- # Mask out the bits that C<use vars> uses
- $warnings::Bits{all} | $warnings::DeadBits{all};
+{
+ # Mask out the bits that L<warnings::register> uses
+ my $WARN_MASK;
+ BEGIN {
+ $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
+ }
+ sub WARN_MASK () {
+ return $WARN_MASK;
+ }
}
# Initialise the contextual information, either from
elsif ($name eq 'warnings') {
if ($val eq 'none') {
- $warning_bits = "\0"x12;
+ $warning_bits = $warnings::NONE;
next();
}
@names = split/\s+/, $val;
}
- $warning_bits = "\0"x12 if !defined ($warning_bits);
+ $warning_bits = $warnings::NONE if !defined ($warning_bits);
$warning_bits |= warnings::bits(@names);
}
my $warnings = $op->warnings;
my $warning_bits;
if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
- $warning_bits = $warnings::Bits{"all"};
+ $warning_bits = $warnings::Bits{"all"} & WARN_MASK;
}
elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
- $warning_bits = "\0"x12;
+ $warning_bits = $warnings::NONE;
}
elsif ($warnings->isa("B::SPECIAL")) {
$warning_bits = undef;
#
$idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
+ # Hash-element braces will autoquote a bareword inside themselves.
+ # We need to make sure that C<$hash{warn()}> doesn't come out as
+ # C<$hash{warn}>, which has a quite different meaning. Currently
+ # B::Deparse will always quote strings, even if the string was a
+ # bareword in the original (i.e. the OPpCONST_BARE flag is ignored
+ # for constant strings.) So we can cheat slightly here - if we see
+ # a bareword, we know that it is supposed to be a function call.
+ #
+ $idx =~ s/^([A-Za-z_]\w*)$/$1()/;
+
return "\$" . $array . $left . $idx . $right;
}
=item *
+In fact, the above is a specific instance of a more general problem:
+we can't guarantee to produce BEGIN blocks or C<use> declarations in
+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 be very hard
+to fix.
+
+=item *
+
If a keyword is over-ridden, and your program explicitly calls
the built-in version by using CORE::keyword, the output of B::Deparse
-will not reflect this.
+will not reflect this. If you run the resulting code, it will call
+the over-ridden version rather than the built-in one. (Maybe there
+should be an option to B<always> print keyword calls as C<CORE::name>.)
=item *
use strict;
use Config;
-print "1..14\n";
+print "1..15\n";
use B::Deparse;
my $deparse = B::Deparse->new() or print "not ";
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
- @F = split(" ", $_, 0);
+ our(@F) = split(" ", $_, 0);
'???';
}
print "ok " . $i++ . "\n";
__DATA__
-# 1
+# 2
1;
####
-# 2
+# 3
{
no warnings;
'???';
2;
}
####
-# 3
+# 4
my $test;
++$test and $test /= 2;
>>>>
my $test;
$test /= 2 if ++$test;
####
-# 4
+# 5
-((1, 2) x 2);
####
-# 5
+# 6
{
my $test = sub : lvalue {
my $x;
;
}
####
-# 6
+# 7
{
my $test = sub : method {
my $x;
;
}
####
-# 7
+# 8
{
my $test = sub : locked method {
my $x;
;
}
####
-# 8
+# 9
{
234;
}
123;
}
####
-# 9
+# 10
my $x;
print $main::x;
####
-# 10
+# 11
my @x;
print $main::x[1];
+####
+# 12
+my %x;
+$x{warn()};
#else
(void)chdir(wd);
#endif
-err2: (void)close(fd);
+
+err2:
+#ifdef HAS_FCHDIR
+ (void)close(fd);
+#endif
errno = serrno;
return (NULL);
#endif
PPCODE:
{
dXSTARG;
- sv_getcwd(TARG);
+ getcwd_sv(TARG);
XSprePUSH; PUSHTARG;
}
sub read
{
my ($obj,$fh,$name) = @_;
- my(%tbl, @esc, $enc);
+ my(%tbl, @seq, $enc, @esc);
while (<$fh>)
{
my ($key,$val) = /^(\S+)\s+(.*)$/;
$val =~ s/\\x([0-9a-f]{2})/chr(hex($1))/ge;
if($enc = Encode->getEncoding($key)){
$tbl{$val} = ref($enc) eq 'Encode::Tcl' ? $enc->loadEncoding : $enc;
- push @esc, $val;
+ push @seq, $val;
}else{
$obj->{$key} = $val;
}
+ if($val =~ /^\e(.*)/){ push(@esc, quotemeta $1) }
}
- $obj->{'Ctl'} = \@esc;
- $obj->{'Tbl'} = \%tbl;
+ $obj->{'Seq'} = \@seq; # escape sequences
+ $obj->{'Tbl'} = \%tbl; # encoding tables
+ $obj->{'Esc'} = join('|', @esc); # regex of sequences following ESC
return $obj;
}
{
my ($obj,$str,$chk) = @_;
my $tbl = $obj->{'Tbl'};
- my $ctl = $obj->{'Ctl'};
+ my $seq = $obj->{'Seq'};
+ my $esc = $obj->{'Esc'};
my $ini = $obj->{'init'};
my $fin = $obj->{'final'};
- my $std = $ctl->[0];
+ my $std = $seq->[0];
my $cur = $std;
my $uni;
while (length($str)){
my $uch = substr($str,0,1,'');
if($uch eq "\e"){
- $str =~ s/^([\x20-\x2F]*[\x30-\x7E](?:\x1b[\x20-\x2F]*[\x30-\x7E])*)//;
- my $esc = "\e$1";
- if($tbl->{$esc}){ $cur = $esc }
- elsif($esc eq $ini || $esc eq $fin){ $cur = $std }
- else{carp "unknown escape sequence" }
+ if($str =~ s/^($esc)//)
+ {
+ my $esc = "\e$1";
+ $cur = $tbl->{$esc} ? $esc :
+ ($esc eq $ini || $esc eq $fin) ? $std :
+ $cur;
+ }
+ else
+ {
+ $str =~ s/^([\x20-\x2F]*[\x30-\x7E])//;
+ carp "unknown escape sequence: ESC $1";
+ }
next;
}
if($uch eq "\x0e" || $uch eq "\x0f"){
$cur = $uch and next;
}
- my $x;
if(ref($tbl->{$cur}) eq 'Encode::XS'){
$uni .= $tbl->{$cur}->decode($uch);
next;
}
- my $ch = ord($uch);
+ my $ch = ord($uch);
my $rep = $tbl->{$cur}->{'Rep'};
my $touni = $tbl->{$cur}->{'ToUni'};
+ my $x;
if (&$rep($ch) eq 'C')
{
$x = $touni->[0][$ch];
{
my ($obj,$uni,$chk) = @_;
my $tbl = $obj->{'Tbl'};
- my $ctl = $obj->{'Ctl'};
+ my $seq = $obj->{'Seq'};
my $ini = $obj->{'init'};
my $fin = $obj->{'final'};
- my $std = $ctl->[0];
+ my $std = $seq->[0];
my $str = $ini;
my $pre = $std;
my $cur = $pre;
: $tbl->{$pre}->{FmUni}->{$ch};
unless(defined $x){
- foreach my $esc (@$ctl){
- $x = ref($tbl->{$esc}) eq 'Encode::XS'
- ? $tbl->{$esc}->encode($ch,1)
- : $tbl->{$esc}->{FmUni}->{$ch};
- $cur = $esc and last if defined $x;
+ foreach my $e_seq (@$seq){
+ $x = ref($tbl->{$e_seq}) eq 'Encode::XS'
+ ? $tbl->{$e_seq}->encode($ch,1)
+ : $tbl->{$e_seq}->{FmUni}->{$ch};
+ $cur = $e_seq and last if defined $x;
}
}
if($x == 0x0d && !($ini eq '' && $fin eq '') && substr($uni,0,1) eq "\x0a")
);
my @ideodigit = qw(one two three four five six seven eight nine ten);
-plan test => $n*@encodings + $n*@encodings*@greek + $n*@encodings*@ideodigit;
+my $jis = '7bit-jis';
+my $kr = '7bit-kr';
+my %esc_str;
+
+$esc_str{$jis} = {qw(
+ 1b24422422242424262428242a1b2842
+ 3042304430463048304a
+ 1b284931323334355d1b2842
+ ff71ff72ff73ff74ff75ff9d
+ 1b2442467c4b5c1b2842
+ 65e5672c
+ 3132331b244234413b7a1b28425065726c
+ 0031003200336f225b57005000650072006c
+ 546573740a1b24422546253925481b28420a
+ 0054006500730074000a30c630b930c8000a
+)};
+
+$esc_str{$kr} = {qw(
+ 1b2429430e2a22213e0f410d0a
+ 304200b10041000d000a
+ 1b2429430e3021332a34593673383639593b673e46405a0f0d0a
+ ac00b098b2e4b77cb9c8bc14c0acc544c790000d000a
+ 1b2429434142430d0a
+ 004100420043000d000a
+)};
+
+my $num_esc = $n * keys(%esc_str);
+foreach (values %esc_str){ $num_esc += $n * keys %$_ }
+
+plan test => $n*@encodings + $n*@encodings*@greek
+ + $n*@encodings*@ideodigit + $num_esc;
foreach my $enc (@encodings)
{
}
}
+{
+ sub to_unicode
+ {
+ my $enc = shift;
+ return unpack('H*', pack 'n*', unpack 'U*',
+ decode $enc, pack 'H*', join '', @_);
+ }
+
+ sub from_unicode
+ {
+ my $enc = shift;
+ return unpack('H*', encode $enc,
+ pack 'U*', unpack 'n*', pack 'H*', join '', @_);
+ }
+
+ foreach my $enc (sort keys %esc_str)
+ {
+ my $tab = Encode->getEncoding($enc);
+ ok(1,defined($tab),"Could not load $enc");
+ my %strings = %{ $esc_str{$enc} };
+ foreach my $estr (sort keys %strings)
+ {
+ my $ustr = to_unicode($enc, $estr);
+ ok($ustr, $strings{$estr},
+ "$enc mangled translating to Unicode");
+ ok(from_unicode($enc, $ustr), $estr,
+ "$enc mangled translating from Unicode");
+ }
+ ok(to_unicode($enc, keys %strings), join('', values %strings),
+ "$enc mangled translating to Unicode");
+ }
+}
print "not " unless $server->blocking;
print "ok 13\n";
-$server->blocking(0);
-print "not " if $server->blocking;
-print "ok 14\n";
+if ( $^O eq 'qnx' ) {
+ # QNX library bug: Can set non-blocking on socket, but
+ # cannot return that status.
+ print "ok 14 # skipped\n";
+} else {
+ $server->blocking(0);
+ print "not " if $server->blocking;
+ print "ok 14\n";
+}
### TEST 15
### Set up some data to be transfered between the server and
# (no null key support)
# Jonathan Stowe <gellyfish@gellyfish.com>
use Config;
-$self->{LIBS} = ['-lgdbm'] if $Config{libs} =~ /\b-lgdbm\b/;
+$self->{LIBS} = ['-lgdbm'] if $Config{libs} =~ /(?:^|\s)-lgdbm(?:\s|$)/;
print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n"
}
-print getcwd() =~ m#/t$# ? "ok 13\n" : "not ok 13\n";
+print getcwd() =~ m#[/\\]t$# ? "ok 13\n" : "not ok 13\n";
# Check string conversion functions.
PPCODE:
{
dXSTARG;
- sv_getcwd(TARG);
+ getcwd_sv(TARG);
XSprePUSH; PUSHTARG;
}
handle_thread_signal(int sig)
{
unsigned char c = (unsigned char) sig;
+ dTHX;
/*
* We're not really allowed to call fprintf in a signal handler
* so don't be surprised if this isn't robust while debugging
# In GMT there should be no daylight savings ever.
-print "not " unless $t->isdst == 0;
-print "ok 22\n";
-
-print "not " unless $t->daylight_savings == 0;
-print "ok 23\n";
+my $dst = 0;
+my $dst_mess = '';
+if ($^O eq 'os2') {
+ # OS/2 EMX bug
+ $dst = (CORE::gmtime(0))[8];
+ $dst_mess = ' # skipped: gmtime(0) thinks DST gmtime 0 == -1';
+}
+print "not " unless $t->isdst == $dst;
+print "ok 22$dst_mess\n";
+
+print "not " unless $t->daylight_savings == $dst;
+print "ok 23$dst_mess\n";
print "not " unless $t->hms eq '12:34:56';
print "ok 24\n";
esac
if test ! -f $makefile ; then
- test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl $passthru
+ test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl PERL_CORE=1 $passthru
fi
if test ! -f $makefile ; then
if test -f Makefile.SH; then
+++ /dev/null
-#!../../miniperl -w -I../../lib
-
-use ExtUtils::MakeMaker;
-&mkbootstrap(join(" ",@ARGV));
-exit;
Perl_sv_cmp_locale
Perl_sv_collxfrm
Perl_sv_compile_2op
-Perl_sv_getcwd
+Perl_getcwd_sv
Perl_sv_dec
Perl_sv_dump
Perl_sv_derived_from
if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
Perl_croak(aTHX_ "Bad symbol for filehandle");
if (!GvIOp(gv)) {
-#ifdef GV_SHARED_CHECK
- if (GvSHARED(gv)) {
- Perl_croak(aTHX_ "Bad symbol for filehandle (GV is shared)");
+#ifdef GV_UNIQUE_CHECK
+ if (GvUNIQUE(gv)) {
+ Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
}
#endif
GvIOp(gv) = newIO();
{
HV* stash = gv_stashpvn("Errno",5,FALSE);
- if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
+ if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
dSP;
PUTBACK;
ENTER;
gv_init(gv, stash, name, len, add & GV_ADDMULTI);
gv_init_sv(gv, sv_type);
- if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
+ if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
: (PL_dowarn & G_WARN_ON ) ) )
GvMULTI_on(gv) ;
AMT *amtp=NULL, *oamtp=NULL;
int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
+#ifdef DEBUGGING
int fl=0;
+#endif
HV* stash=NULL;
if (!(AMGf_noleft & flags) && SvAMAGIC(left)
- && (mg = mg_find((SV*)(
- stash=
- SvSTASH(SvRV(left))),
- PERL_MAGIC_overload_table))
+ && (stash = SvSTASH(SvRV(left)))
+ && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
&& (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
: (CV **) NULL))
|| (assign && amtp->fallback > AMGfallNEVER && /* fallback to
* usual method */
(
+#ifdef DEBUGGING
fl = 1,
+#endif
cv = cvp[off=method])))) {
lr = -1; /* Call method for left argument */
} else {
}
if (!cv) goto not_found;
} else if (!(AMGf_noright & flags) && SvAMAGIC(right)
- && (mg = mg_find((SV*)(
- stash=
- SvSTASH(SvRV(right))),
- PERL_MAGIC_overload_table))
+ && (stash = SvSTASH(SvRV(right)))
+ && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
&& (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
? (amtp = (AMT*)mg->mg_ptr)->table
: (CV **) NULL))
flags & AMGf_unary? "" :
lr==1 ? " for right argument": " for left argument",
flags & AMGf_unary? " for argument" : "",
- HvNAME(stash),
+ stash ? HvNAME(stash) : "null",
fl? ",\n\tassignment variant used": "") );
}
#endif
/* XXX: all GvFLAGS options are used, borrowing GvGPFLAGS for the moment */
-#define GVf_SHARED 0x0001
-#define GvSHARED(gv) (GvGP(gv) && (GvGPFLAGS(gv) & GVf_SHARED))
-#define GvSHARED_on(gv) (GvGPFLAGS(gv) |= GVf_SHARED)
-#define GvSHARED_off(gv) (GvGPFLAGS(gv) &= ~GVf_SHARED)
+#define GVf_UNIQUE 0x0001
+#define GvUNIQUE(gv) (GvGP(gv) && (GvGPFLAGS(gv) & GVf_UNIQUE))
+#define GvUNIQUE_on(gv) (GvGPFLAGS(gv) |= GVf_UNIQUE)
+#define GvUNIQUE_off(gv) (GvGPFLAGS(gv) &= ~GVf_UNIQUE)
#ifdef USE_ITHREADS
-#define GV_SHARED_CHECK
+#define GV_UNIQUE_CHECK
#else
-#undef GV_SHARED_CHECK
+#undef GV_UNIQUE_CHECK
#endif
#define Nullgv Null(GV*)
exit 1
;;
esac
- # XXX In 64-bit AIX 5L (oslevel 5.1.0.0, ccversion 5.0.2.0)
- # the Configure library symbol probe mysteriously finds all
- # symbols but these two --jhi XXX
- d_pipe='define'
- d_times='define'
;;
esac
EOCBU
if test $usenativedlopen = 'true'
then
- ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
- ldflags="$ldflags -brtl"
+ ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
+ case "$cc" in
+ *gcc*) ldflags="$ldflags -Wl,-brtl" ;;
+ *) ldflags="$ldflags -brtl" ;;
+ esac
else
# If the C++ libraries, libC and libC_r, are available we will prefer them
# over the vanilla libc, because the libC contain loadAndInit() and
;;
esac
EOCBU
+
+useperlio='undef'
# -D_XOPEN_SOURCE_EXTENDED alters system headers.
# -DPERL_IGNORE_FPUSIG=SIGFPE
# Prepend your favorites with Configure -Dccflags=your_favorites
-case "$ccflags" in
-'') ccflags='-K enum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE' ;;
-*) ccflags='$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE' ;;
-esac
+ccflags="$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE"
# ccdlflags have yet to be determined.
#case "$ccdlflags" in
# PATH. The PATH test is triggered because cwd calls
# `fullpath -t`.
#
-# lib/ExtUtils.t: If you follow these hints and include
-# -w4 in your ccflags, this test will complain about
-# extra .err files appearing in its test directory.
-#
-# ext/IO/lib/IO/t/io_sock.t Still investigating
-# ext/POSIX/sigaction.t Still investigating
+# ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to
+# the fact that the functionality to read back the non-blocking
+# status of a socket is not implemented in QNX's TCP/IP. This
+# has been reported to QNX and it may work with later versions
+# of TCP/IP.
#
# Older issues:
# lib/posix.t test failed on test 17 because acos(1) != 0.
#ifdef ENV_IS_CASELESS
else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
key = savepvn(key,klen);
- key = strupr(key);
+ key = (const char*)strupr((char*)key);
hash = 0;
}
#endif
entry = new_HE();
if (HvSHAREKEYS(hv))
- HeKEY_hek(entry) = share_hek(key, is_utf8?-klen:klen, hash);
+ HeKEY_hek(entry) = share_hek(key, is_utf8?-(I32)klen:klen, hash);
else /* gotta do the real thing */
- HeKEY_hek(entry) = save_hek(key, is_utf8?-klen:klen, hash);
+ HeKEY_hek(entry) = save_hek(key, is_utf8?-(I32)klen:klen, hash);
if (key != keysave)
Safefree(key);
HeVAL(entry) = val;
} else {
$self->{writemakefile} =
qq{NO Makefile.PL refused to write a Makefile.};
- # It's probably worth to record the reason, so let's retry
+ # It's probably worth it to record the reason, so let's retry
# local $/;
# my $fh = IO::File->new("$system |"); # STDERR? STDIN?
# $self->{writemakefile} .= <$fh>;
Modules know their associated Distribution objects. They always refer
to the most recent official release. Developers may mark their releases
as unstable development versions (by inserting an underbar into the
-visible version number), so the really hottest and newest distribution
-file is not always the default. If a module Foo circulates on CPAN in
-both version 1.23 and 1.23_90, CPAN.pm offers a convenient way to
-install version 1.23 by saying
+module version number which will also be reflected in the distribution
+name when you run 'make dist'), so the really hottest and newest
+distribution is not always the default. If a module Foo circulates
+on CPAN in both version 1.23 and 1.23_90, CPAN.pm offers a convenient
+way to install version 1.23 by saying
install Foo
our @EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
our @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
+# sys_cwd may keep the builtin command
+
+# All the functionality of this module may provided by builtins,
+# there is no sense to process the rest of the file.
+# The best choice may be to have this in BEGIN, but how to return from BEGIN?
+
+if ($^O eq 'os2' && defined &sys_cwd && defined &sys_abspath) {
+ local $^W = 0;
+ *cwd = \&sys_cwd;
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+ *abs_path = \&sys_abspath;
+ *fast_abs_path = \&abs_path;
+ *realpath = \&abs_path;
+ *fast_realpath = \&abs_path;
+ return 1;
+}
+
eval {
require XSLoader;
XSLoader::load('Cwd');
*fastcwd = \&_dos_cwd;
*abs_path = \&fast_abs_path;
}
- elsif ($^O eq 'qnx') {
+ elsif ($^O =~ m/^(?:qnx|nto)$/ ) {
*cwd = \&_qnx_cwd;
*getcwd = \&_qnx_cwd;
*fastgetcwd = \&_qnx_cwd;
chdir $dir or die $!; push @INC, '../../lib';
END {chdir ".." or warn $!};
-my @perlout = `$runperl Makefile.PL`;
+my @perlout = `$runperl Makefile.PL PERL_CORE=1`;
if ($?) {
print "not ok 1 # $runperl Makefile.PL failed: $?\n";
print "# $_" foreach @perlout;
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
- PERL_INC PERL FULLPERL LIBPTH BASE_IMPORT
+ PERL_INC PERL FULLPERL LIBPTH BASE_IMPORT PERLRUN
+ PERLRUNINST TEST_LIBS FULL_AR PERL_CORE
NLM_VERSION MPKTOOL TOOLPATH
/ ) {
# Handle POSIX-style node names beginning with double slash
my $node = '';
- if ( $^O =~ m/^qnx|nto$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+ if ( $^O =~ m/^(?:qnx|nto)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
$node = $1;
}
$path =~ s|(?<=[^/])/+|/|g ; # xx////xx -> xx/xx
}
my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
+ if ( $^O eq 'qnx' ) {
+ my @errfiles = @{$self->{C}};
+ for ( @errfiles ) {
+ s/.c$/.err/;
+ }
+ push( @otherfiles, @errfiles, 'perlmain.err' );
+ }
push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
perlmain.c tmon.out mon.out core core.*perl.*.?
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
- PERL_INC PERL FULLPERL FULL_AR
+ PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS
+ FULL_AR PERL_CORE
/ ) {
next unless defined $self->{$tmp};
push @m, q{
distcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \\
+ $(PERLRUN) -MExtUtils::Manifest=fullcheck \\
-e fullcheck
};
push @m, q{
skipcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \\
+ $(PERLRUN) -MExtUtils::Manifest=skipcheck \\
-e skipcheck
};
push @m, q{
manifest :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \\
+ $(PERLRUN) -MExtUtils::Manifest=mkmanifest \\
-e mkmanifest
};
my @m;
push @m, q{
ci :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
+ $(PERLRUN) -MExtUtils::Manifest=maniread \\
-e "@all = keys %{ maniread() };" \\
-e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
-e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
push @m, q{
distdir :
$(RM_RF) $(DISTVNAME)
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \\
+ $(PERLRUN) -MExtUtils::Manifest=manicopy,maniread \\
-e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
};
join "", @m;
my @m;
push @m, q{
disttest : distdir
- cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
+ cd $(DISTVNAME) && $(PERLRUN) Makefile.PL
cd $(DISTVNAME) && $(MAKE)
cd $(DISTVNAME) && $(MAKE) test
};
push(@m,"
$self->{BASEEXT}.exp: Makefile.PL
-",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
+",' $(PERLRUN) -e \'use ExtUtils::Mksymlists; \\
Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
', "DL_VARS" => ', neatvalue($vars), ');\'
# The DynaLoader only reads a non-empty file.
$(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)/.exists
'.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
+ '.$self->{NOECHO}.'$(PERLRUN) \
-MExtUtils::Mkbootstrap \
-e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
'.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
$self->{MAKEFILE}, q[";' \\
-e 'print "Htmlifying $$m{$$_}\n";' \\
-e '$$dir = dirname($$m{$$_}); mkpath($$dir) unless -d $$dir;' \\
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
+-e 'system(q[$(PERLRUN) $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
-e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
];
push @m, "\nhtmlifypods : pure_all ";
# Define 'FULLPERL' to be a non-miniperl (used in test: target)
($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
unless ($self->{FULLPERL});
+
+ # Are we building the core?
+ $self->{PERL_CORE} = 0 unless exists $self->{PERL_CORE};
+
+ # How do we run perl?
+ $self->{PERLRUN} = $self->{PERL};
+
+ # How do we run perl when installing libraries?
+ $self->{PERLRUNINST} .= $self->{PERL}. ' -I$(INST_ARCHLIB) -I$(INST_LIB)';
+
+ # What extra library dirs do we need when running the tests?
+ $self->{TEST_LIBS} .= ' -I$(INST_ARCHLIB) -I$(INST_LIB)';
+
+ # When building the core, we need to add some helper libs since
+ # perl's @INC won't work (we're not installed yet).
+ foreach my $targ (qw(PERLRUN PERLRUNINST TEST_LIBS)) {
+ $self->{$targ} .= ' -I$(PERL_ARCHLIB) -I$(PERL_LIB)'
+ if $self->{PERL_CORE};
+ }
}
=item init_others
EXE_FILES = @{$self->{EXE_FILES}}
} . ($Is_Win32
- ? q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ ? q{FIXIN = $(PERLRUN) \
-e "system qq[pl2bat.bat ].shift"
-} : q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::MakeMaker \
+} : q{FIXIN = $(PERLRUN) -MExtUtils::MakeMaker \
-e "MY->fixin(shift)"
}).qq{
pure_all :: @to
$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
}.$self->{NOECHO}.q{echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
- }.$self->{NOECHO}.q{$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ }.$self->{NOECHO}.q{$(PERLRUNINST) \
Makefile.PL DIR=}, $dir, q{ \
MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
-}.$self->{NOECHO}.q{$(RM_F) }."$self->{MAKEFILE}.old".q{
-}.$self->{NOECHO}.q{$(MV) }."$self->{MAKEFILE} $self->{MAKEFILE}.old".q{
-$(MAKE) -f }.$self->{MAKEFILE}.q{.old clean $(DEV_NULL) || $(NOOP)
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL }.join(" ",map(qq["$_"],@ARGV)).q{
+ $(PERLRUN) Makefile.PL }.join(" ",map(qq["$_"],@ARGV)).q{
}.$self->{NOECHO}.q{echo "==> Your Makefile has been rebuilt. <=="
}.$self->{NOECHO}.q{echo "==> Please rerun the make command. <=="
false
q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
$self->{MAKEFILE}, q[";' \\
-e 'print "Manifying $$m{$$_}\n";' \\
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
+-e 'system(q[$(PERLRUN) $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
-e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
];
push @m, "\nmanifypods : pure_all ";
my($autodir) = $self->catdir('$(INST_LIB)','auto');
return q{
pm_to_blib: $(TO_INST_PM)
- }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
- "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
+ }.$self->{NOECHO}.q{$(PERLRUNINST) -MExtUtils::Install \
-e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{','$(PM_FILTER)')"
}.$self->{NOECHO}.q{$(TOUCH) $@
};
$self->{NOECHO}\$(NOOP)
$target :: $plfile
- \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile $target
+ \$(PERLRUNINST) $plfile $target
";
}
}
sub test_via_harness {
my($self, $perl, $tests) = @_;
$perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
- "\t$perl".q! -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
+ "\t$perl".q! $(TEST_LIBS) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
}
=item test_via_script (o)
sub test_via_script {
my($self, $perl, $script) = @_;
$perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
- qq{\t$perl}.q{ -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) }.qq{$script
+ qq{\t$perl}.q{ $(TEST_LIBS) }.qq{$script
};
}
$asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
q{
# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
-AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
+AUTOSPLITFILE = $(PERLRUN) -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
};
}
push @m, q{
# The following is a portable way to say mkdir -p
# To see which directories are created, change the if 0 to if 1
-MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
+MKPATH = $(PERLRUN) -MExtUtils::Command -e mkpath
# This helps us to minimize the effect of the .exists files A yet
# better solution would be to have a stable file in the perl
# distribution with a timestamp of zero. But this solution doesn't
# need any changes to the core distribution and works with older perls
-EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
+EQUALIZE_TIMESTAMP = $(PERLRUN) -MExtUtils::Command -e eqtime
};
push @m, q{
Version_check:
- }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ }.$self->{NOECHO}.q{$(PERLRUN) \
-MExtUtils::MakeMaker=Version_check \
-e "Version_check('$(MM_VERSION)')"
};
return '' unless $self->needs_linking();
'
.xs.c:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
+ $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
';
}
return '' unless $self->needs_linking();
'
.xs.cpp:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
+ $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
';
}
return '' unless $self->needs_linking();
'
.xs$(OBJ_EXT):
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
+ $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
$(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
';
}
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC PERL_VMS
- PERL_INC PERL FULLPERL
+ PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS
+ FULL_AR PERL_CORE
/ ) {
next unless defined $self->{$macro};
push @m, "$macro = $self->{$macro}\n";
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
- PERL_INC PERL FULLPERL
+ PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS
+ FULL_AR PERL_CORE
/ ) {
next unless defined $self->{$tmp};
LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
PERL_MALLOC_OK
NAME NEEDS_LINKING NOECHO NORECURS NO_VC OBJECT OPTIMIZE PERL PERLMAINCC
- PERL_ARCHLIB PERL_LIB PERL_SRC PERM_RW PERM_RWX
+ PERLRUN PERLRUNINST PERL_ARCHLIB PERL_CORE
+ PERL_LIB PERL_SRC PERM_RW PERM_RWX
PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC
- PPM_INSTALL_SCRIPT PREFIX
- PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
+ PPM_INSTALL_SCRIPT PREFIX
+ PREREQ_PM SKIP TEST_LIBS TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
XS_VERSION clean depend dist dynamic_lib linkext macro realclean
tool_autosplit
-
MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED
/;
}
if ($self->{PARENT}) {
$self->{PARENT}->{CHILDREN}->{$newclass} = $self;
- foreach my $opt (qw(CAPI POLLUTE)) {
+ foreach my $opt (qw(CAPI POLLUTE PERL_CORE)) {
if (exists $self->{PARENT}->{$opt}
and not exists $self->{$opt})
{
make perl
That produces a new perl binary in the current directory with all
-extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP,
+extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP,
and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
UNIX, this is called Makefile.aperl (may be system dependent). If you
want to force the creation of a new perl, it is recommended, that you
Perl binary for tasks that can be done by miniperl
+=item PERL_CORE
+
+Set only when MakeMaker is building the extensions of the Perl core
+distribution.
+
=item PERLMAINCC
The call to the program that is able to compile perlmain.c. Defaults
=item PERL_ARCHLIB
-Same as below, but for architecture dependent files.
+Same as for PERL_LIB, but for architecture dependent files.
+
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
=item PERL_LIB
Directory containing the Perl library to use.
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_LIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
+
=item PERL_MALLOC_OK
defaults to 0. Should be set to TRUE if the extension can work with
system resources, error detection, memory usage reporting, catchable failure
of memory allocations, etc.
+=item PERLRUN
+
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run perl.
+It will set up extra necessary flags for you.
+
+=item PERLRUNINST
+
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run
+perl to work with modules. It will add things like -I$(INST_ARCH)
+and other necessary flags.
+
=item PERL_SRC
Directory containing the Perl source code (use of this should be
=item SKIP
-Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
+Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
Makefile. Caution! Do not use the SKIP attribute for the negligible
speedup. It may seriously damage the resulting Makefile. Only use it
if you really need it.
+=item TEST_LIBS
+
+The set of -I's necessary to run a "make test". Use as:
+$(PERL) $(TEST_LIBS) -e '...' for example.
+
=item TYPEMAPS
Ref to array of typemap file names. Use this when the typemaps are
use Cwd;
-my $NonTaintedCwd = $^O eq 'MSWin32' || $^O eq 'cygwin';
+my $NonTaintedCwd = $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'os2';
cleanup();
# Handle POSIX-style node names beginning with double slash
my $node = '';
- if ( $^O =~ m/^qnx|nto$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+ if ( $^O =~ m/^(?:qnx|nto)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
$node = $1;
}
$path =~ s|/+|/|g unless($^O eq 'cygwin'); # xx////xx -> xx/xx
}
else
{
- my $IsWin32 = $^O eq 'MSWin32';
- unless(($script =~ m#/# || ($IsWin32 && $script =~ m#\\#))
+ my $dosish = ($^O eq 'MSWin32' or $^O eq 'os2');
+ unless(($script =~ m#/# || ($dosish && $script =~ m#\\#))
&& -f $script)
{
my $dir;
foreach $dir (File::Spec->path)
{
my $scr = File::Spec->catfile($dir, $script);
- if(-r $scr && (!$IsWin32 || -x _))
+ if(-r $scr && (!$dosish || -x _))
{
$script = $scr;
+++ /dev/null
-# Net::DummyInetd.pm
-#
-# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package Net::DummyInetd;
-
-require 5.002;
-
-use IO::Handle;
-use IO::Socket;
-use strict;
-use vars qw($VERSION);
-use Carp;
-
-$VERSION = do { my @r=(q$Revision: 1.6 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
-
-
-sub _process
-{
- my $listen = shift;
- my @cmd = @_;
- my $vec = '';
- my $r;
-
- vec($vec,fileno($listen),1) = 1;
-
- while(select($r=$vec,undef,undef,undef))
- {
- my $sock = $listen->accept;
- my $pid;
-
- if($pid = fork())
- {
- sleep 1;
- close($sock);
- }
- elsif(defined $pid)
- {
- my $x = IO::Handle->new_from_fd($sock,"r");
- open(STDIN,"<&=".fileno($x)) || die "$! $@";
- close($x);
-
- my $y = IO::Handle->new_from_fd($sock,"w");
- open(STDOUT,">&=".fileno($y)) || die "$! $@";
- close($y);
-
- close($sock);
- exec(@cmd) || carp "$! $@";
- }
- else
- {
- close($sock);
- carp $!;
- }
- }
- exit -1;
-}
-
-sub new
-{
- my $self = shift;
- my $type = ref($self) || $self;
-
- my $listen = IO::Socket::INET->new(Listen => 5, Proto => 'tcp');
- my $pid;
-
- return bless [ $listen->sockport, $pid ]
- if($pid = fork());
-
- _process($listen,@_);
-}
-
-sub port
-{
- my $self = shift;
- $self->[0];
-}
-
-sub DESTROY
-{
- my $self = shift;
- kill 9, $self->[1];
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::DummyInetd - A dummy Inetd server
-
-=head1 SYNOPSIS
-
- use Net::DummyInetd;
- use Net::SMTP;
-
- $inetd = new Net::DummyInetd qw(/usr/lib/sendmail -ba -bs);
-
- $smtp = Net::SMTP->new('localhost', Port => $inetd->port);
-
-=head1 DESCRIPTION
-
-C<Net::DummyInetd> is just what its name says, it is a dummy inetd server.
-Creation of a C<Net::DummyInetd> will cause a child process to be spawned off
-which will listen to a socket. When a connection arrives on this socket
-the specified command is fork'd and exec'd with STDIN and STDOUT file
-descriptors duplicated to the new socket.
-
-This package was added as an example of how to use C<Net::SMTP> to connect
-to a C<sendmail> process, which is not the default, via SIDIN and STDOUT.
-A C<Net::Inetd> package will be available in the next release of C<libnet>
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( CMD )
-
-Creates a new object and spawns a child process which listens to a socket.
-C<CMD> is a list, which will be passed to C<exec> when a new process needs
-to be created.
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item port
-
-Returns the port number on which the I<DummyInetd> object is listening
-
-=back
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995-1997 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.
-
-=cut
+++ /dev/null
-#
-# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com> and
-# Alex Hristov <hristov@slb.com>. All rights reserved. This program is free
-# software; you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-
-package Net::PH;
-
-require 5.001;
-
-use strict;
-use vars qw(@ISA $VERSION);
-use Carp;
-
-use Socket 1.3;
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-
-$VERSION = "2.20"; # $Id: //depot/libnet/Net/PH.pm#7$
-@ISA = qw(Exporter Net::Cmd IO::Socket::INET);
-
-sub new
-{
- my $pkg = shift;
- my $host = shift if @_ % 2;
- my %arg = @_;
- my $hosts = defined $host ? [ $host ] : $NetConfig{ph_hosts};
- my $ph;
-
- my $h;
- foreach $h (@{$hosts})
- {
- $ph = $pkg->SUPER::new(PeerAddr => ($host = $h),
- PeerPort => $arg{Port} || 'csnet-ns(105)',
- Proto => 'tcp',
- Timeout => defined $arg{Timeout}
- ? $arg{Timeout}
- : 120
- ) and last;
- }
-
- return undef
- unless defined $ph;
-
- ${*$ph}{'net_ph_host'} = $host;
-
- $ph->autoflush(1);
-
- $ph->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- $ph;
-}
-
-sub status
-{
- my $ph = shift;
-
- $ph->command('status')->response;
- $ph->code;
-}
-
-sub login
-{
- my $ph = shift;
- my($user,$pass,$encrypted) = @_;
- my $resp;
-
- $resp = $ph->command("login",$user)->response;
-
- if(defined($pass) && $resp == CMD_MORE)
- {
- if($encrypted)
- {
- my $challenge_str = $ph->message;
- chomp($challenge_str);
- Net::PH::crypt::crypt_start($pass);
- my $cryptstr = Net::PH::crypt::encryptit($challenge_str);
-
- $ph->command("answer", $cryptstr);
- }
- else
- {
- $ph->command("clear", $pass);
- }
- $resp = $ph->response;
- }
-
- $resp == CMD_OK;
-}
-
-sub logout
-{
- my $ph = shift;
-
- $ph->command("logout")->response == CMD_OK;
-}
-
-sub id
-{
- my $ph = shift;
- my $id = @_ ? shift : $<;
-
- $ph->command("id",$id)->response == CMD_OK;
-}
-
-sub siteinfo
-{
- my $ph = shift;
-
- $ph->command("siteinfo");
-
- my $ln;
- my %resp;
- my $cur_num = 0;
-
- while(defined($ln = $ph->getline))
- {
- $ph->debug_print(0,$ln)
- if ($ph->debug & 2);
- chomp($ln);
- my($code,$num,$tag,$data);
-
- if($ln =~ /^-(\d+):(\d+):(?:\s*([^:]+):)?\s*(.*)/o)
- {
- ($code,$num,$tag,$data) = ($1, $2, $3 || "",$4);
- $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
- }
- else
- {
- $ph->set_status($ph->parse_response($ln));
- return \%resp;
- }
- }
-
- return undef;
-}
-
-sub query
-{
- my $ph = shift;
- my $search = shift;
-
- my($k,$v);
-
- my @args = ('query', _arg_hash($search));
-
- push(@args,'return',_arg_list( shift ))
- if @_;
-
- unless($ph->command(@args)->response == CMD_INFO)
- {
- return $ph->code == 501
- ? []
- : undef;
- }
-
- my $ln;
- my @resp;
- my $cur_num = 0;
-
- my($last_tag);
-
- while(defined($ln = $ph->getline))
- {
- $ph->debug_print(0,$ln)
- if ($ph->debug & 2);
- chomp($ln);
- my($code,$idx,$num,$tag,$data);
-
- if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
- {
- ($code,$idx,$tag,$data) = ($1,$2,$3,$4);
- my $num = $idx - 1;
-
- $resp[$num] ||= {};
-
- $tag = $last_tag
- unless(length($tag));
-
- $last_tag = $tag;
-
- if(exists($resp[$num]->{$tag}))
- {
- $resp[$num]->{$tag}->[3] .= "\n" . $data;
- }
- else
- {
- $resp[$num]->{$tag} = bless [$code, $idx, $tag, $data], "Net::PH::Result";
- }
- }
- else
- {
- $ph->set_status($ph->parse_response($ln));
- return \@resp;
- }
- }
-
- return undef;
-}
-
-sub change
-{
- my $ph = shift;
- my $search = shift;
- my $make = shift;
-
- $ph->command(
- "change", _arg_hash($search),
- "make", _arg_hash($make)
- )->response == CMD_OK;
-}
-
-sub _arg_hash
-{
- my $hash = shift;
-
- return $hash
- unless(ref($hash));
-
- my($k,$v);
- my @r;
-
- while(($k,$v) = each %$hash)
- {
- my $a = $v;
- $a =~ s/\n/\\n/sog;
- $a =~ s/\t/\\t/sog;
- $a = '"' . $a . '"'
- if $a =~ /\W/;
- $a = '""'
- unless length $a;
-
- push(@r, "$k=$a");
- }
- join(" ", @r);
-}
-
-sub _arg_list
-{
- my $arr = shift;
-
- return $arr
- unless(ref($arr));
-
- my $v;
- my @r;
-
- foreach $v (@$arr)
- {
- my $a = $v;
- $a =~ s/\n/\\n/sog;
- $a =~ s/\t/\\t/sog;
- $a = '"' . $a . '"'
- if $a =~ /\W/;
- push(@r, $a);
- }
-
- join(" ",@r);
-}
-
-sub add
-{
- my $ph = shift;
- my $arg = @_ > 1 ? { @_ } : shift;
-
- $ph->command('add', _arg_hash($arg))->response == CMD_OK;
-}
-
-sub delete
-{
- my $ph = shift;
- my $arg = @_ > 1 ? { @_ } : shift;
-
- $ph->command('delete', _arg_hash($arg))->response == CMD_OK;
-}
-
-sub force
-{
- my $ph = shift;
- my $search = shift;
- my $force = shift;
-
- $ph->command(
- "change", _arg_hash($search),
- "force", _arg_hash($force)
- )->response == CMD_OK;
-}
-
-
-sub fields
-{
- my $ph = shift;
-
- $ph->command("fields", _arg_list(\@_));
-
- my $ln;
- my %resp;
- my $cur_num = 0;
- my @tags = ();
-
- while(defined($ln = $ph->getline))
- {
- $ph->debug_print(0,$ln)
- if ($ph->debug & 2);
- chomp($ln);
-
- my($code,$num,$tag,$data,$last_tag);
-
- if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
- {
- ($code,$num,$tag,$data) = ($1,$2,$3,$4);
-
- $tag = $last_tag
- unless(length($tag));
-
- $last_tag = $tag;
-
- if(exists $resp{$tag})
- {
- $resp{$tag}->[3] .= "\n" . $data;
- }
- else
- {
- $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
- push @tags, $tag;
- }
- }
- else
- {
- $ph->set_status($ph->parse_response($ln));
- return wantarray ? (\%resp, \@tags) : \%resp;
- }
- }
-
- return;
-}
-
-sub quit
-{
- my $ph = shift;
-
- $ph->close
- if $ph->command("quit")->response == CMD_OK;
-}
-
-##
-## Net::Cmd overrides
-##
-
-sub parse_response
-{
- return ()
- unless $_[1] =~ s/^(-?)(\d\d\d):?//o;
- ($2, $1 eq "-");
-}
-
-sub debug_text { $_[2] =~ /^(clear)/i ? "$1 ....\n" : $_[2]; }
-
-package Net::PH::Result;
-
-sub code { shift->[0] }
-sub value { shift->[1] }
-sub field { shift->[2] }
-sub text { shift->[3] }
-
-package Net::PH::crypt;
-
-# The code in this package is based upon 'cryptit.c', Copyright (C) 1988 by
-# Steven Dorner, and Paul Pomes, and the University of Illinois Board
-# of Trustees, and by CSNET.
-
-use integer;
-use strict;
-
-sub ROTORSZ () { 256 }
-sub MASK () { 255 }
-
-my(@t1,@t2,@t3,$n1,$n2);
-
-sub crypt_start {
- my $pass = shift;
- $n1 = 0;
- $n2 = 0;
- crypt_init($pass);
-}
-
-sub crypt_init {
- my $pw = shift;
- my $i;
-
- @t2 = @t3 = (0) x ROTORSZ;
-
- my $buf = crypt($pw,$pw);
- return -1 unless length($buf) > 0;
- $buf = substr($buf . "\0" x 13,0,13);
- my @buf = map { ord $_ } split(//, $buf);
-
-
- my $seed = 123;
- for($i = 0 ; $i < 13 ; $i++) {
- $seed = $seed * $buf[$i] + $i;
- }
- @t1 = (0 .. ROTORSZ-1);
-
- for($i = 0 ; $i < ROTORSZ ; $i++) {
- $seed = 5 * $seed + $buf[$i % 13];
- my $random = $seed % 65521;
- my $k = ROTORSZ - 1 - $i;
- my $ic = ($random & MASK) % ($k + 1);
- $random >>= 8;
- @t1[$k,$ic] = @t1[$ic,$k];
- next if $t3[$k] != 0;
- $ic = ($random & MASK) % $k;
- while($t3[$ic] != 0) {
- $ic = ($ic + 1) % $k;
- }
- $t3[$k] = $ic;
- $t3[$ic] = $k;
- }
- for($i = 0 ; $i < ROTORSZ ; $i++) {
- $t2[$t1[$i] & MASK] = $i
- }
-}
-
-sub encode {
- my $sp = shift;
- my $ch;
- my $n = scalar(@$sp);
- my @out = ($n);
- my $i;
-
- for($i = 0 ; $i < $n ; ) {
- my($f0,$f1,$f2) = splice(@$sp,0,3);
- push(@out,
- $f0 >> 2,
- ($f0 << 4) & 060 | ($f1 >> 4) & 017,
- ($f1 << 2) & 074 | ($f2 >> 6) & 03,
- $f2 & 077);
- $i += 3;
- }
- join("", map { chr((($_ & 077) + 35) & 0xff) } @out); # ord('#') == 35
-}
-
-sub encryptit {
- my $from = shift;
- my @from = map { ord $_ } split(//, $from);
- my @sp = ();
- my $ch;
- while(defined($ch = shift @from)) {
- push(@sp,
- $t2[($t3[($t1[($ch + $n1) & MASK] + $n2) & MASK] - $n2) & MASK] - $n1);
-
- $n1++;
- if($n1 == ROTORSZ) {
- $n1 = 0;
- $n2++;
- $n2 = 0 if $n2 == ROTORSZ;
- }
- }
- encode(\@sp);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::PH - CCSO Nameserver Client class
-
-=head1 SYNOPSIS
-
- use Net::PH;
-
- $ph = Net::PH->new("some.host.name",
- Port => 105,
- Timeout => 120,
- Debug => 0);
-
- if($ph) {
- $q = $ph->query({ field1 => "value1" },
- [qw(name address pobox)]);
-
- if($q) {
- }
- }
-
- # Alternative syntax
-
- if($ph) {
- $q = $ph->query('field1=value1',
- 'name address pobox');
-
- if($q) {
- }
- }
-
-=head1 DESCRIPTION
-
-C<Net::PH> is a class implementing a simple Nameserver/PH client in Perl
-as described in the CCSO Nameserver -- Server-Client Protocol. Like other
-modules in the Net:: family the C<Net::PH> object inherits methods from
-C<Net::Cmd>.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ HOST ] [, OPTIONS ])
-
- $ph = Net::PH->new("some.host.name",
- Port => 105,
- Timeout => 120,
- Debug => 0
- );
-
-This is the constructor for a new Net::PH object. C<HOST> is the
-name of the remote host to which a PH connection is required.
-
-If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
-will be used.
-
-C<OPTIONS> is an optional list of named options which are passed in
-a hash like fashion, using key and value pairs. Possible options are:-
-
-B<Port> - Port number to connect to on remote host.
-
-B<Timeout> - Maximum time, in seconds, to wait for a response from the
-Nameserver, a value of zero will cause all IO operations to block.
-(default: 120)
-
-B<Debug> - Enable the printing of debugging information to STDERR
-
-=back
-
-=head1 METHODS
-
-Unless otherwise stated all methods return either a I<true> or I<false>
-value, with I<true> meaning that the operation was a success. When a method
-states that it returns a value, failure will be returned as I<undef> or an
-empty list.
-
-=over 4
-
-=item query( SEARCH [, RETURN ] )
-
- $q = $ph->query({ name => $myname },
- [qw(name email schedule)]);
-
- foreach $handle (@{$q}) {
- foreach $field (keys %{$handle}) {
- $c = ${$handle}{$field}->code;
- $v = ${$handle}{$field}->value;
- $f = ${$handle}{$field}->field;
- $t = ${$handle}{$field}->text;
- print "field:[$field] [$c][$v][$f][$t]\n" ;
- }
- }
-
-
-
-Search the database and return fields from all matching entries.
-
-The C<SEARCH> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver as the search criteria.
-
-C<RETURN> is optional, but if given it should be a reference to a list which
-contains field names to be returned.
-
-The alternative syntax is to pass strings instead of references, for example
-
- $q = $ph->query('name=myname',
- 'name email schedule');
-
-The C<SEARCH> argument is a string that is passed to the Nameserver as the
-search criteria. The strings being passed should B<not> contain any carriage
-returns, or else the query command might fail or return invalid data.
-
-C<RETURN> is optional, but if given it should be a string which will
-contain field names to be returned.
-
-Each match from the server will be returned as a HASH where the keys are the
-field names and the values are C<Net::PH:Result> objects (I<code>, I<value>,
-I<field>, I<text>).
-
-Returns a reference to an ARRAY which contains references to HASHs, one
-per match from the server.
-
-=item change( SEARCH , MAKE )
-
- $r = $ph->change({ email => "*.domain.name" },
- { schedule => "busy");
-
-Change field values for matching entries.
-
-The C<SEARCH> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver as the search criteria.
-
-The C<MAKE> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver that
-will set new values to designated fields.
-
-The alternative syntax is to pass strings instead of references, for example
-
- $r = $ph->change('email="*.domain.name"',
- 'schedule="busy"');
-
-The C<SEARCH> argument is a string to be passed to the Nameserver as the
-search criteria. The strings being passed should B<not> contain any carriage
-returns, or else the query command might fail or return invalid data.
-
-
-The C<MAKE> argument is a string to be passed to the Nameserver that
-will set new values to designated fields.
-
-Upon success all entries that match the search criteria will have
-the field values, given in the Make argument, changed.
-
-=item login( USER, PASS [, ENCRYPT ])
-
- $r = $ph->login('username','password',1);
-
-Enter login mode using C<USER> and C<PASS>. If C<ENCRYPT> is given and
-is I<true> then the password will be used to encrypt a challenge text
-string provided by the server, and the encrypted string will be sent back
-to the server. If C<ENCRYPT> is not given, or I<false> then the password
-will be sent in clear text (I<this is not recommended>)
-
-=item logout()
-
- $r = $ph->logout();
-
-Exit login mode and return to anonymous mode.
-
-=item fields( [ FIELD_LIST ] )
-
- $fields = $ph->fields();
- foreach $field (keys %{$fields}) {
- $c = ${$fields}{$field}->code;
- $v = ${$fields}{$field}->value;
- $f = ${$fields}{$field}->field;
- $t = ${$fields}{$field}->text;
- print "field:[$field] [$c][$v][$f][$t]\n";
- }
-
-In a scalar context, returns a reference to a HASH. The keys of the HASH are
-the field names and the values are C<Net::PH:Result> objects (I<code>,
-I<value>, I<field>, I<text>).
-
-In an array context, returns a two element array. The first element is a
-reference to a HASH as above, the second element is a reference to an array
-which contains the tag names in the order that they were returned from the
-server.
-
-C<FIELD_LIST> is a string that lists the fields for which info will be
-returned.
-
-=item add( FIELD_VALUES )
-
- $r = $ph->add( { name => $name, phone => $phone });
-
-This method is used to add new entries to the Nameserver database. You
-must successfully call L<login> before this method can be used.
-
-B<Note> that this method adds new entries to the database. To modify
-an existing entry use L<change>.
-
-C<FIELD_VALUES> is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver and will be used to
-initialize the new entry.
-
-The alternative syntax is to pass a string instead of a reference, for example
-
- $r = $ph->add('name=myname phone=myphone');
-
-C<FIELD_VALUES> is a string that consists of field/value pairs which the
-new entry will contain. The strings being passed should B<not> contain any
-carriage returns, or else the query command might fail or return invalid data.
-
-
-=item delete( FIELD_VALUES )
-
- $r = $ph->delete('name=myname phone=myphone');
-
-This method is used to delete existing entries from the Nameserver database.
-You must successfully call L<login> before this method can be used.
-
-B<Note> that this method deletes entries to the database. To modify
-an existing entry use L<change>.
-
-C<FIELD_VALUES> is a string that serves as the search criteria for the
-records to be deleted. Any entry in the database which matches this search
-criteria will be deleted.
-
-=item id( [ ID ] )
-
- $r = $ph->id('709');
-
-Sends C<ID> to the Nameserver, which will enter this into its
-logs. If C<ID> is not given then the UID of the user running the
-process will be sent.
-
-=item status()
-
-Returns the current status of the Nameserver.
-
-=item siteinfo()
-
- $siteinfo = $ph->siteinfo();
- foreach $field (keys %{$siteinfo}) {
- $c = ${$siteinfo}{$field}->code;
- $v = ${$siteinfo}{$field}->value;
- $f = ${$siteinfo}{$field}->field;
- $t = ${$siteinfo}{$field}->text;
- print "field:[$field] [$c][$v][$f][$t]\n";
- }
-
-Returns a reference to a HASH containing information about the server's
-site. The keys of the HASH are the field names and values are
-C<Net::PH:Result> objects (I<code>, I<value>, I<field>, I<text>).
-
-=item quit()
-
- $r = $ph->quit();
-
-Quit the connection
-
-=back
-
-=head1 Q&A
-
-How do I get the values of a Net::PH::Result object?
-
- foreach $handle (@{$q}) {
- foreach $field (keys %{$handle}) {
- $my_code = ${$q}{$field}->code;
- $my_value = ${$q}{$field}->value;
- $my_field = ${$q}{$field}->field;
- $my_text = ${$q}{$field}->text;
- }
- }
-
-How do I get a count of the returned matches to my query?
-
- $my_count = scalar(@{$query_result});
-
-How do I get the status code and message of the last C<$ph> command?
-
- $status_code = $ph->code;
- $status_message = $ph->message;
-
-=head1 SEE ALSO
-
-L<Net::Cmd>
-
-=head1 AUTHORS
-
-Graham Barr <gbarr@pobox.com>
-Alex Hristov <hristov@slb.com>
-
-=head1 ACKNOWLEDGMENTS
-
-Password encryption code ported to perl by Broc Seib <bseib@purdue.edu>,
-Purdue University Computing Center.
-
-Otis Gospodnetic <otisg@panther.middlebury.edu> suggested
-passing parameters as string constants. Some queries cannot be
-executed when passing parameters as string references.
-
- Example: query first_name last_name email="*.domain"
-
-=head1 COPYRIGHT
-
-The encryption code is based upon cryptit.c, Copyright (C) 1988 by
-Steven Dorner, and Paul Pomes, and the University of Illinois Board
-of Trustees, and by CSNET.
-
-All other code is Copyright (c) 1996-1997 Graham Barr <gbarr@pobox.com>
-and Alex Hristov <hristov@slb.com>. All rights reserved. This program is
-free software; you can redistribute it and/or modify it under the same
-terms as Perl itself.
-
-=cut
+++ /dev/null
-# Net::SNPP.pm
-#
-# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package Net::SNPP;
-
-require 5.001;
-
-use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-use Socket 1.3;
-use Carp;
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-
-$VERSION = "1.11"; # $Id:$
-@ISA = qw(Net::Cmd IO::Socket::INET);
-@EXPORT = (qw(CMD_2WAYERROR CMD_2WAYOK CMD_2WAYQUEUED), @Net::Cmd::EXPORT);
-
-sub CMD_2WAYERROR () { 7 }
-sub CMD_2WAYOK () { 8 }
-sub CMD_2WAYQUEUED () { 9 }
-
-sub new
-{
- my $self = shift;
- my $type = ref($self) || $self;
- my $host = shift if @_ % 2;
- my %arg = @_;
- my $hosts = defined $host ? [ $host ] : $NetConfig{snpp_hosts};
- my $obj;
-
- my $h;
- foreach $h (@{$hosts})
- {
- $obj = $type->SUPER::new(PeerAddr => ($host = $h),
- PeerPort => $arg{Port} || 'snpp(444)',
- Proto => 'tcp',
- Timeout => defined $arg{Timeout}
- ? $arg{Timeout}
- : 120
- ) and last;
- }
-
- return undef
- unless defined $obj;
-
- ${*$obj}{'net_snpp_host'} = $host;
-
- $obj->autoflush(1);
-
- $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- unless ($obj->response() == CMD_OK)
- {
- $obj->close();
- return undef;
- }
-
- $obj;
-}
-
-##
-## User interface methods
-##
-
-sub pager_id
-{
- @_ == 2 or croak 'usage: $snpp->pager_id( PAGER_ID )';
- shift->_PAGE(@_);
-}
-
-sub content
-{
- @_ == 2 or croak 'usage: $snpp->content( MESSAGE )';
- shift->_MESS(@_);
-}
-
-sub send
-{
- my $me = shift;
-
- if(@_)
- {
- my %arg = @_;
-
- if(exists $arg{Pager})
- {
- my $pagers = ref($arg{Pager}) ? $arg{Pager} : [ $arg{Pager} ];
- my $pager;
- foreach $pager (@$pagers)
- {
- $me->_PAGE($pager) || return 0
- }
- }
-
- $me->_MESS($arg{Message}) || return 0
- if(exists $arg{Message});
-
- $me->hold($arg{Hold}) || return 0
- if(exists $arg{Hold});
-
- $me->hold($arg{HoldLocal},1) || return 0
- if(exists $arg{HoldLocal});
-
- $me->_COVE($arg{Coverage}) || return 0
- if(exists $arg{Coverage});
-
- $me->_ALER($arg{Alert} ? 1 : 0) || return 0
- if(exists $arg{Alert});
-
- $me->service_level($arg{ServiceLevel}) || return 0
- if(exists $arg{ServiceLevel});
- }
-
- $me->_SEND();
-}
-
-sub data
-{
- my $me = shift;
-
- my $ok = $me->_DATA() && $me->datasend(@_);
-
- return $ok
- unless($ok && @_);
-
- $me->dataend;
-}
-
-sub login
-{
- @_ == 2 || @_ == 3 or croak 'usage: $snpp->login( USER [, PASSWORD ])';
- shift->_LOGI(@_);
-}
-
-sub help
-{
- @_ == 1 or croak 'usage: $snpp->help()';
- my $me = shift;
-
- return $me->_HELP() ? $me->message
- : undef;
-}
-
-sub xwho
-{
- @_ == 1 or croak 'usage: $snpp->xwho()';
- my $me = shift;
-
- $me->_XWHO or return undef;
-
- my(%hash,$line);
- my @msg = $me->message;
- pop @msg; # Remove command complete line
-
- foreach $line (@msg) {
- $line =~ /^\s*(\S+)\s*(.*)/ and $hash{$1} = $2;
- }
-
- \%hash;
-}
-
-sub service_level
-{
- @_ == 2 or croak 'usage: $snpp->service_level( LEVEL )';
- my $me = shift;
- my $level = int(shift);
-
- if($level < 0 || $level > 11)
- {
- $me->set_status(550,"Invalid Service Level");
- return 0;
- }
-
- $me->_LEVE($level);
-}
-
-sub alert
-{
- @_ == 1 || @_ == 2 or croak 'usage: $snpp->alert( VALUE )';
- my $me = shift;
- my $value = (@_ == 1 || shift) ? 1 : 0;
-
- $me->_ALER($value);
-}
-
-sub coverage
-{
- @_ == 1 or croak 'usage: $snpp->coverage( AREA )';
- shift->_COVE(@_);
-}
-
-sub hold
-{
- @_ == 2 || @_ == 3 or croak 'usage: $snpp->hold( TIME [, LOCAL ] )';
- my $me = shift;
- my $time = shift;
- my $local = (shift) ? "" : " +0000";
-
- my @g = reverse((gmtime($time))[0..5]);
- $g[1] += 1;
- $g[0] %= 100;
-
- $me->_HOLD( sprintf("%02d%02d%02d%02d%02d%02d%s",@g,$local));
-}
-
-sub caller_id
-{
- @_ == 2 or croak 'usage: $snpp->caller_id( CALLER_ID )';
- shift->_CALL(@_);
-}
-
-sub subject
-{
- @_ == 2 or croak 'usage: $snpp->subject( SUBJECT )';
- shift->_SUBJ(@_);
-}
-
-sub two_way
-{
- @_ == 1 or croak 'usage: $snpp->two_way()';
- shift->_2WAY();
-}
-
-sub quit
-{
- @_ == 1 or croak 'usage: $snpp->quit()';
- my $snpp = shift;
-
- $snpp->_QUIT;
- $snpp->close;
-}
-
-##
-## IO/perl methods
-##
-
-sub DESTROY
-{
- my $snpp = shift;
- defined(fileno($snpp)) && $snpp->quit
-}
-
-##
-## Over-ride methods (Net::Cmd)
-##
-
-sub debug_text
-{
- $_[2] =~ s/^((logi|page)\s+\S+\s+)\S+/$1 xxxx/io;
- $_[2];
-}
-
-sub parse_response
-{
- return ()
- unless $_[1] =~ s/^(\d\d\d)(.?)//o;
- my($code,$more) = ($1, $2 eq "-");
-
- $more ||= $code == 214;
-
- ($code,$more);
-}
-
-##
-## RFC1861 commands
-##
-
-# Level 1
-
-sub _PAGE { shift->command("PAGE", @_)->response() == CMD_OK }
-sub _MESS { shift->command("MESS", @_)->response() == CMD_OK }
-sub _RESE { shift->command("RESE")->response() == CMD_OK }
-sub _SEND { shift->command("SEND")->response() == CMD_OK }
-sub _QUIT { shift->command("QUIT")->response() == CMD_OK }
-sub _HELP { shift->command("HELP")->response() == CMD_OK }
-sub _DATA { shift->command("DATA")->response() == CMD_MORE }
-sub _SITE { shift->command("SITE",@_) }
-
-# Level 2
-
-sub _LOGI { shift->command("LOGI", @_)->response() == CMD_OK }
-sub _LEVE { shift->command("LEVE", @_)->response() == CMD_OK }
-sub _ALER { shift->command("ALER", @_)->response() == CMD_OK }
-sub _COVE { shift->command("COVE", @_)->response() == CMD_OK }
-sub _HOLD { shift->command("HOLD", @_)->response() == CMD_OK }
-sub _CALL { shift->command("CALL", @_)->response() == CMD_OK }
-sub _SUBJ { shift->command("SUBJ", @_)->response() == CMD_OK }
-
-# NonStandard
-
-sub _XWHO { shift->command("XWHO")->response() == CMD_OK }
-
-1;
-__END__
-
-=head1 NAME
-
-Net::SNPP - Simple Network Pager Protocol Client
-
-=head1 SYNOPSIS
-
- use Net::SNPP;
-
- # Constructors
- $snpp = Net::SNPP->new('snpphost');
- $snpp = Net::SNPP->new('snpphost', Timeout => 60);
-
-=head1 NOTE
-
-This module is not complete, yet !
-
-=head1 DESCRIPTION
-
-This module implements a client interface to the SNPP protocol, enabling
-a perl5 application to talk to SNPP servers. This documentation assumes
-that you are familiar with the SNPP protocol described in RFC1861.
-
-A new Net::SNPP object must be created with the I<new> method. Once
-this has been done, all SNPP commands are accessed through this object.
-
-=head1 EXAMPLES
-
-This example will send a pager message in one hour saying "Your lunch is ready"
-
- #!/usr/local/bin/perl -w
-
- use Net::SNPP;
-
- $snpp = Net::SNPP->new('snpphost');
-
- $snpp->send( Pager => $some_pager_number,
- Message => "Your lunch is ready",
- Alert => 1,
- Hold => time + 3600, # lunch ready in 1 hour :-)
- ) || die $snpp->message;
-
- $snpp->quit;
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ HOST, ] [ OPTIONS ] )
-
-This is the constructor for a new Net::SNPP object. C<HOST> is the
-name of the remote host to which a SNPP connection is required.
-
-If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
-will be used.
-
-C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
-Possible options are:
-
-B<Timeout> - Maximum time, in seconds, to wait for a response from the
-SNPP server (default: 120)
-
-B<Debug> - Enable debugging information
-
-
-Example:
-
-
- $snpp = Net::SNPP->new('snpphost',
- Debug => 1,
- );
-
-=head1 METHODS
-
-Unless otherwise stated all methods return either a I<true> or I<false>
-value, with I<true> meaning that the operation was a success. When a method
-states that it returns a value, failure will be returned as I<undef> or an
-empty list.
-
-=over 4
-
-=item reset ()
-
-=item help ()
-
-Request help text from the server. Returns the text or undef upon failure
-
-=item quit ()
-
-Send the QUIT command to the remote SNPP server and close the socket connection.
-
-=back
-
-=head1 EXPORTS
-
-C<Net::SNPP> exports all that C<Net::CMD> exports, plus three more subroutines
-that can bu used to compare against the result of C<status>. These are :-
-C<CMD_2WAYERROR>, C<CMD_2WAYOK>, and C<CMD_2WAYQUEUED>.
-
-=head1 SEE ALSO
-
-L<Net::Cmd>
-RFC1861
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995-1997 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.
-
-=cut
+++ /dev/null
-#!./perl -w
-
-use Net::Config;
-use Net::PH;
-
-unless(@{$NetConfig{ph_hosts}} && $NetConfig{test_hosts}) {
- print "1..0\n";
- exit 0;
-}
-
-print "1..5\n";
-
-my $i = 1;
-
-$ph = Net::PH->new(Debug => 0)
- or (print("not ok 1\n"), exit);
-
-print "ok 1\n";
-
-$ph->fields or print "not ";
-print "ok 2\n";
-
-$ph->siteinfo or print "not ";
-print "ok 3\n";
-
-$ph->id or print "not ";
-print "ok 4\n";
-
-$ph->quit or print "not ";
-print "ok 5\n";
-
-print "1..11\n";
+print "1..9\n";
my $i = 1;
eval { require Net::Config; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::Domain; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::FTP; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::SMTP; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::NNTP; } || print "not "; print "ok ",$i++,"\n";
-eval { require Net::SNPP; } || print "not "; print "ok ",$i++,"\n";
-eval { require Net::PH; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::POP3; } || print "not "; print "ok ",$i++,"\n";
eval { require Net::Time; } || print "not "; print "ok ",$i++,"\n";
$tot->{ok}++;
$test->{skipped}++ if $isskip;
+ $reason = '[no reason given]'
+ if $isskip and not defined $reason;
if (defined $reason and defined $test->{skip_reason}) {
# print "was: '$skip_reason' new '$reason'\n";
$test->{skip_reason} = 'various reasons'
=item FIRSTKEY this
-Return the (key, value) pair for the first key in the hash.
+Return the first key in the hash.
=item NEXTKEY this, lastkey
-Return the next key for the hash.
+Return the next key in the hash.
=item EXISTS this, key
use strict;
use warnings;
-our $VERSION = '3.1.0';
+our $VERSION = '0.1';
require Exporter;
our @ISA = qw(Exporter);
-our @EXPORT_OK = qw(charinfo charblock);
+our @EXPORT_OK = qw(charinfo
+ charblock charscript
+ charblocks charscripts
+ charinrange);
use Carp;
=head1 SYNOPSIS
- use Unicode::UCD 3.1.0;
- # requires that level of the Unicode character database
-
use Unicode::UCD 'charinfo';
- my %charinfo = charinfo($codepoint);
+ my %charinfo = charinfo($codepoint);
use Unicode::UCD 'charblock';
- my $charblock = charblock($codepoint);
+ my $charblock = charblock($codepoint);
+
+ use Unicode::UCD 'charscript';
+ my $charscript = charblock($codepoint);
=head1 DESCRIPTION
=cut
-my $UNICODE;
-my $BLOCKS;
+my $UNICODEFH;
+my $BLOCKSFH;
+my $SCRIPTSFH;
+my $VERSIONFH;
sub openunicode {
my ($rfh, @path) = @_;
for my $d (@INC) {
use File::Spec;
$f = File::Spec->catfile($d, "unicode", @path);
- if (open($$rfh, $f)) {
- last;
- } else {
- croak __PACKAGE__, ": open '$f' failed: $!\n";
- }
+ last if open($$rfh, $f);
+ undef $f;
}
- croak __PACKAGE__, ": failed to find ",join("/",@path)," in @INC\n"
- unless defined $rfh;
+ croak __PACKAGE__, ": failed to find ",
+ File::Spec->catfile(@path), " in @INC"
+ unless defined $f;
}
return $f;
}
upper uppercase equivalent mapping
lower lowercase equivalent mapping
title titlecase equivalent mapping
+
block block the character belongs to (used in \p{In...})
+ script script the character belongs to
If no match is found, an empty hash is returned.
-The C<block> property is the same as as returned by charinfo().
-(It is not defined in the Unicode Character Database proper but
-instead in an auxiliary database.)
+The C<block> property is the same as as returned by charinfo(). It is
+not defined in the Unicode Character Database proper (Chapter 4 of the
+Unicode 3.0 Standard) but instead in an auxiliary database (Chapter 14
+of TUS3). Similarly for the C<script> property.
+
+Note that you cannot do (de)composition and casing based solely on the
+above C<decomposition> and C<lower>, C<upper>, C<title>, properties,
+you will need also the I<Composition Exclusions>, I<Case Folding>, and
+I<SpecialCasing> tables, available as files F<CompExcl.txt>,
+F<CaseFold.txt>, and F<SpecCase.txt> in the Perl distribution.
=cut
+sub _getcode {
+ my $arg = shift;
+
+ if ($arg =~ /^\d+$/) {
+ return $arg;
+ } elsif ($arg =~ /^(?:U\+|0x)?([[:xdigit:]]+)$/) {
+ return hex($1);
+ }
+
+ return;
+}
+
sub charinfo {
- my $code = shift;
+ my $arg = shift;
+ my $code = _getcode($arg);
+ croak __PACKAGE__, "::charinfo: unknown code '$arg'"
+ unless defined $code;
my $hexk = sprintf("%04X", $code);
- openunicode(\$UNICODE, "Unicode.txt");
- if (defined $UNICODE) {
+ openunicode(\$UNICODEFH, "Unicode.txt");
+ if (defined $UNICODEFH) {
use Search::Dict;
- if (look($UNICODE, "$hexk;") >= 0) {
- my $line = <$UNICODE>;
+ if (look($UNICODEFH, "$hexk;") >= 0) {
+ my $line = <$UNICODEFH>;
chomp $line;
my %prop;
@prop{qw(
upper lower title
)} = split(/;/, $line, -1);
if ($prop{code} eq $hexk) {
- $prop{block} = charblock($code);
+ $prop{block} = charblock($code);
+ $prop{script} = charscript($code);
return %prop;
}
}
return;
}
+sub _search { # Binary search in a [[lo,hi,prop],[...],...] table.
+ my ($table, $lo, $hi, $code) = @_;
+
+ return if $lo > $hi;
+
+ my $mid = int(($lo+$hi) / 2);
+
+ if ($table->[$mid]->[0] < $code) {
+ if ($table->[$mid]->[1] >= $code) {
+ return $table->[$mid]->[2];
+ } else {
+ _search($table, $mid + 1, $hi, $code);
+ }
+ } elsif ($table->[$mid]->[0] > $code) {
+ _search($table, $lo, $mid - 1, $code);
+ } else {
+ return $table->[$mid]->[2];
+ }
+}
+
+sub charinrange {
+ my ($range, $arg) = @_;
+ my $code = _getcode($arg);
+ croak __PACKAGE__, "::charinrange: unknown code '$arg'"
+ unless defined $code;
+ _search($range, 0, $#$range, $code);
+}
+
=head2 charblock
use Unicode::UCD 'charblock';
my $charblock = charblock(0x41);
-
-charblock() returns the block the character belongs to, e.g.
-C<Basic Latin>. Note that not all the character positions within all
-block are defined.
-
-The name is the same name that is used in the C<\p{In...}> construct,
-for example C<\p{InBasicLatin}> (spaces and dashes ('-') are squished
-away from the names for the C<\p{In...}>.
+ my $charblock = charblock(1234);
+ my $charblock = charblock("0x263a");
+ my $charblock = charblock("U+263a");
+
+ my $ranges = charblock('Armenian');
+
+With a B<code point argument> charblock() returns the block the character
+belongs to, e.g. C<Basic Latin>. Note that not all the character
+positions within all blocks are defined. A <code point argument>
+is either a decimal or a hexadecimal scalar, or "U+" followed
+by hexadecimals.
+
+If supplied with an argument that can't be a code point, charblock()
+tries to do the opposite and interpret the argument as a character
+block. The return value is a I<range>: an anonymous list that
+contains anonymous lists, which in turn contain I<start-of-range>,
+I<end-of-range> code point pairs. You can test whether a code point
+is in a range using the L</charinrange> function. If the argument is
+not a known charater block, C<undef> is returned.
=cut
my @BLOCKS;
+my %BLOCKS;
+
+sub _charblocks {
+ unless (@BLOCKS) {
+ if (openunicode(\$BLOCKSFH, "Blocks.txt")) {
+ while (<$BLOCKSFH>) {
+ if (/^([0-9A-F]+)\.\.([0-9A-F]+);\s+(.+)/) {
+ my ($lo, $hi) = (hex($1), hex($2));
+ my $subrange = [ $lo, $hi, $3 ];
+ push @BLOCKS, $subrange;
+ push @{$BLOCKS{$3}}, $subrange;
+ }
+ }
+ close($BLOCKSFH);
+ }
+ }
+}
-sub _charblock {
- my ($code, $lo, $hi) = @_;
+sub charblock {
+ my $arg = shift;
- return if $lo > $hi;
+ _charblocks() unless @BLOCKS;
- my $mid = int(($lo+$hi) / 2);
+ my $code = _getcode($arg);
- if ($BLOCKS[$mid]->[0] < $code) {
- if ($BLOCKS[$mid]->[1] >= $code) {
- return $BLOCKS[$mid]->[2];
+ if (defined $code) {
+ _search(\@BLOCKS, 0, $#BLOCKS, $code);
+ } else {
+ if (exists $BLOCKS{$arg}) {
+ return $BLOCKS{$arg};
} else {
- _charblock($code, $mid + 1, $hi);
+ return;
}
- } elsif ($BLOCKS[$mid]->[0] > $code) {
- _charblock($code, $lo, $mid - 1);
- } else {
- return $BLOCKS[$mid]->[2];
}
}
-sub charblock {
- my $code = shift;
+=head2 charscript
- unless (@BLOCKS) {
- if (openunicode(\$BLOCKS, "Blocks.pl")) {
- while (<$BLOCKS>) {
- if (/^([0-9A-F]+)\s+([0-9A-F]+)\s+(.+)/) {
- push @BLOCKS, [ hex($1), hex($2), $3 ];
+ use Unicode::UCD 'charscript';
+
+ my $charscript = charscript(0x41);
+ my $charscript = charscript(1234);
+ my $charscript = charscript("U+263a");
+
+ my $ranges = charscript('Thai');
+
+With a B<code point argument> charscript() returns the script the
+character belongs to, e.g. C<Latin>, C<Greek>, C<Han>. A <code point
+argument> is either a decimal or a hexadecimal scalar, or "U+"
+followed by hexadecimals.
+
+If supplied with an argument that can't be a code point, charscript()
+tries to do the opposite and interpret the argument as a character
+script. The return value is a I<range>: an anonymous list that
+contains anonymous lists, which in turn contain I<start-of-range>,
+I<end-of-range> code point pairs. You can test whether a code point
+is in a range using the L</charinrange> function. If the argument is
+not a known charater script, C<undef> is returned.
+
+=cut
+
+my @SCRIPTS;
+my %SCRIPTS;
+
+sub _charscripts {
+ unless (@SCRIPTS) {
+ if (openunicode(\$SCRIPTSFH, "Scripts.txt")) {
+ while (<$SCRIPTSFH>) {
+ if (/^([0-9A-F]+)(?:\.\.([0-9A-F]+))?\s+;\s+(\w+)/) {
+ my ($lo, $hi) = (hex($1), $2 ? hex($2) : hex($1));
+ my $script = lc($3);
+ $script =~ s/\b(\w)/uc($1)/ge;
+ my $subrange = [ $lo, $hi, $script ];
+ push @SCRIPTS, $subrange;
+ push @{$SCRIPTS{$script}}, $subrange;
}
}
- close($BLOCKS);
+ close($SCRIPTSFH);
+ @SCRIPTS = sort { $a->[0] <=> $b->[0] } @SCRIPTS;
+ }
+ }
+}
+
+sub charscript {
+ my $arg = shift;
+
+ _charscripts() unless @SCRIPTS;
+
+ my $code = _getcode($arg);
+
+ if (defined $code) {
+ _search(\@SCRIPTS, 0, $#SCRIPTS, $code);
+ } else {
+ if (exists $SCRIPTS{$arg}) {
+ return $SCRIPTS{$arg};
+ } else {
+ return;
}
}
+}
+
+=head2 charblocks
+
+ use Unicode::UCD 'charblocks';
+
+ my %charblocks = charblocks();
+
+charblocks() returns a hash with the known block names as the keys,
+and the code point ranges (see L</charblock>) as the values.
+
+=cut
+
+sub charblocks {
+ _charblocks() unless @BLOCKS;
+ return %BLOCKS;
+}
+
+=head2 charscripts
+
+ use Unicode::UCD 'charscripts';
+
+ my %charscripts = charscripts();
+
+charscripts() returns a hash with the known script names as the keys,
+and the code point ranges (see L</charscript>) as the values.
+
+=cut
+
+sub charscripts {
+ _charscripts() unless @SCRIPTS;
+ return %SCRIPTS;
+}
+
+=head2 Blocks versus Scripts
+
+The difference between a block and a script is that scripts are closer
+to the linguistic notion of a set of characters required to present
+languages, while block is more of an artifact of the Unicode character
+numbering and separation into blocks of 256 characters.
+
+For example the Latin B<script> is spread over several B<blocks>, such
+as C<Basic Latin>, C<Latin 1 Supplement>, C<Latin Extended-A>, and
+C<Latin Extended-B>. On the other hand, the Latin script does not
+contain all the characters of the C<Basic Latin> block (also known as
+the ASCII): it includes only the letters, not for example the digits
+or the punctuation.
+
+For blocks see http://www.unicode.org/Public/UNIDATA/Blocks.txt
+
+For scripts see UTR #24: http://www.unicode.org/unicode/reports/tr24/
+
+=head2 Matching Scripts and Blocks
+
+Both scripts and blocks can be matched using the regular expression
+construct C<\p{In...}> and its negation C<\P{In...}>.
+
+The name of the script or the block comes after the C<In>, for example
+C<\p{InCyrillic}>, C<\P{InBasicLatin}>. Spaces and dashes ('-') are
+removed from the names for the C<\p{In...}>, for example
+C<LatinExtendedA> instead of C<Latin Extended-A>.
+
+There are a few cases where there exists both a script and a block by
+the same name, in these cases the block version has C<Block> appended:
+C<\p{InKatakana}> is the script, C<\p{InKatakanaBlock}> is the block.
+
+=head2 charinrange
+
+In addition to using the C<\p{In...}> and C<\P{In...}> constructs, you
+can also test whether a code point is in the I<range> as returned by
+L</charblock> and L</charscript> or as the values of the hash returned
+by L</charblocks> and </charscripts> by using charinrange():
- _charblock($code, 0, $#BLOCKS);
+ use Unicode::UCD qw(charscript charinrange);
+
+ $range = charscript('Hiragana');
+ print "looks like hiragana\n" if charinrange($range, $code);
+
+=cut
+
+=head2 Unicode::UCD::UnicodeVersion
+
+Unicode::UCD::UnicodeVersion() returns the version of the Unicode Character
+Database, in other words, the version of the Unicode standard the
+database implements.
+
+=cut
+
+my $UNICODEVERSION;
+
+sub UnicodeVersion {
+ unless (defined $UNICODEVERSION) {
+ openunicode(\$VERSIONFH, "version");
+ chomp($UNICODEVERSION = <$VERSIONFH>);
+ close($VERSIONFH);
+ croak __PACKAGE__, "::VERSION: strange version '$UNICODEVERSION'"
+ unless $UNICODEVERSION =~ /^\d+(?:\.\d+)+$/;
+ }
+ return $UNICODEVERSION;
}
+=head2 Implementation Note
+
+The first use of charinfo() opens a read-only filehandle to the Unicode
+Character Database (the database is included in the Perl distribution).
+The filehandle is then kept open for further queries.
+
=head1 AUTHOR
Jarkko Hietaniemi
-use Unicode::UCD 3.1.0;
+use Unicode::UCD;
use Test;
use strict;
-BEGIN { plan tests => 81 };
+BEGIN { plan tests => 103 };
use Unicode::UCD 'charinfo';
ok($charinfo{lower}, '0061');
ok($charinfo{title}, '');
ok($charinfo{block}, 'Basic Latin');
+ok($charinfo{script}, 'LATIN');
%charinfo = charinfo(0x100);
ok($charinfo{lower}, '0101');
ok($charinfo{title}, '');
ok($charinfo{block}, 'Latin Extended-A');
+ok($charinfo{script}, 'LATIN');
+
+# 0x0590 is in the Hebrew block but unused.
%charinfo = charinfo(0x590);
ok($charinfo{lower}, undef);
ok($charinfo{title}, undef);
ok($charinfo{block}, undef);
+ok($charinfo{script}, undef);
+
+# 0x05d0 is in the Hebrew block and used.
%charinfo = charinfo(0x5d0);
ok($charinfo{lower}, '');
ok($charinfo{title}, '');
ok($charinfo{block}, 'Hebrew');
+ok($charinfo{script}, 'Hebrew');
-use Unicode::UCD 'charblock';
+use Unicode::UCD qw(charblock charscript);
+
+# 0x0590 is in the Hebrew block but unused.
ok(charblock(0x590), 'Hebrew');
+ok(charscript(0x590), undef);
%charinfo = charinfo(0xbe);
ok($charinfo{lower}, '');
ok($charinfo{title}, '');
ok($charinfo{block}, 'Latin-1 Supplement');
+ok($charinfo{script}, undef);
+
+use Unicode::UCD qw(charblocks charscripts);
+
+my %charblocks = charblocks();
+
+ok(exists $charblocks{Thai});
+ok($charblocks{Thai}->[0]->[0], hex('0e00'));
+ok(!exists $charblocks{PigLatin});
+
+my %charscripts = charscripts();
+
+ok(exists $charscripts{Armenian});
+ok($charscripts{Armenian}->[0]->[0], hex('0531'));
+ok(!exists $charscripts{PigLatin});
+
+my $charscript;
+
+$charscript = charscript("12ab");
+ok($charscript, 'Ethiopic');
+
+$charscript = charscript("0x12ab");
+ok($charscript, 'Ethiopic');
+
+$charscript = charscript("U+12ab");
+ok($charscript, 'Ethiopic');
+
+my $ranges;
+
+$ranges = charscript('Ogham');
+ok($ranges->[0]->[0], hex('1681'));
+ok($ranges->[0]->[1], hex('169a'));
+
+use Unicode::UCD qw(charinrange);
+
+$ranges = charscript('Cherokee');
+ok(!charinrange($ranges, "139f"));
+ok( charinrange($ranges, "13a0"));
+ok( charinrange($ranges, "13f4"));
+ok(!charinrange($ranges, "13f5"));
+ok(Unicode::UCD::UnicodeVersion, 3.1);
# These guys may be defined in $ENV{PERL5DB} :
$rl = 1 unless defined $rl;
-$warnLevel = 0 unless defined $warnLevel;
-$dieLevel = 0 unless defined $dieLevel;
+$warnLevel = 1 unless defined $warnLevel;
+$dieLevel = 1 unless defined $dieLevel;
$signalLevel = 1 unless defined $signalLevel;
$pre = [] unless defined $pre;
$post = [] unless defined $post;
$i = $end;
} else {
for (; $i <= $end; $i++) {
+ my ($stop,$action);
($stop,$action) = split(/\0/, $dbline{$i}) if
$dbline{$i};
$arrow = ($i==$line
if ($dieLevel < 2) {
die @_ if $^S; # in eval propagate
}
- eval { require Carp } if defined $^S; # If error/warning during compilation,
+ # No need to check $^S, eval is much more robust nowadays
+ eval { require Carp }; #if defined $^S;# If error/warning during compilation,
# require may be broken.
die(@_, "\nCannot print stack trace, load with -MCarp option to see stack")
# inside DB::DB, but not in Carp).
my ($mysingle,$mytrace) = ($single,$trace);
$single = 0; $trace = 0;
- my $mess = Carp::longmess(@_);
+ my $mess = "@_";
+ {
+ package Carp; # Do not include us in the list
+ eval {
+ $mess = Carp::longmess(@_);
+ };
+ }
($single,$trace) = ($mysingle,$mytrace);
die $mess;
}
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0000 007F Basic Latin
-# In/0.pl BasicLatin
-0080 00FF Latin-1 Supplement
-# In/1.pl Latin1Supplement
-0100 017F Latin Extended-A
-# In/2.pl LatinExtendedA
-0180 024F Latin Extended-B
-# In/3.pl LatinExtendedB
-0250 02AF IPA Extensions
-# In/4.pl IPAExtensions
-02B0 02FF Spacing Modifier Letters
-# In/5.pl SpacingModifierLetters
-0300 036F Combining Diacritical Marks
-# In/6.pl CombiningDiacriticalMarks
-0370 03FF Greek
-# In/7.pl Greek
-0400 04FF Cyrillic
-# In/8.pl Cyrillic
-0530 058F Armenian
-# In/9.pl Armenian
-0590 05FF Hebrew
-# In/10.pl Hebrew
-0600 06FF Arabic
-# In/11.pl Arabic
-0700 074F Syriac
-# In/12.pl Syriac
-0780 07BF Thaana
-# In/13.pl Thaana
-0900 097F Devanagari
-# In/14.pl Devanagari
-0980 09FF Bengali
-# In/15.pl Bengali
-0A00 0A7F Gurmukhi
-# In/16.pl Gurmukhi
-0A80 0AFF Gujarati
-# In/17.pl Gujarati
-0B00 0B7F Oriya
-# In/18.pl Oriya
-0B80 0BFF Tamil
-# In/19.pl Tamil
-0C00 0C7F Telugu
-# In/20.pl Telugu
-0C80 0CFF Kannada
-# In/21.pl Kannada
-0D00 0D7F Malayalam
-# In/22.pl Malayalam
-0D80 0DFF Sinhala
-# In/23.pl Sinhala
-0E00 0E7F Thai
-# In/24.pl Thai
-0E80 0EFF Lao
-# In/25.pl Lao
-0F00 0FFF Tibetan
-# In/26.pl Tibetan
-1000 109F Myanmar
-# In/27.pl Myanmar
-10A0 10FF Georgian
-# In/28.pl Georgian
-1100 11FF Hangul Jamo
-# In/29.pl HangulJamo
-1200 137F Ethiopic
-# In/30.pl Ethiopic
-13A0 13FF Cherokee
-# In/31.pl Cherokee
-1400 167F Unified Canadian Aboriginal Syllabics
-# In/32.pl UnifiedCanadianAboriginalSyllabics
-1680 169F Ogham
-# In/33.pl Ogham
-16A0 16FF Runic
-# In/34.pl Runic
-1780 17FF Khmer
-# In/35.pl Khmer
-1800 18AF Mongolian
-# In/36.pl Mongolian
-1E00 1EFF Latin Extended Additional
-# In/37.pl LatinExtendedAdditional
-1F00 1FFF Greek Extended
-# In/38.pl GreekExtended
-2000 206F General Punctuation
-# In/39.pl GeneralPunctuation
-2070 209F Superscripts and Subscripts
-# In/40.pl SuperscriptsandSubscripts
-20A0 20CF Currency Symbols
-# In/41.pl CurrencySymbols
-20D0 20FF Combining Marks for Symbols
-# In/42.pl CombiningMarksforSymbols
-2100 214F Letterlike Symbols
-# In/43.pl LetterlikeSymbols
-2150 218F Number Forms
-# In/44.pl NumberForms
-2190 21FF Arrows
-# In/45.pl Arrows
-2200 22FF Mathematical Operators
-# In/46.pl MathematicalOperators
-2300 23FF Miscellaneous Technical
-# In/47.pl MiscellaneousTechnical
-2400 243F Control Pictures
-# In/48.pl ControlPictures
-2440 245F Optical Character Recognition
-# In/49.pl OpticalCharacterRecognition
-2460 24FF Enclosed Alphanumerics
-# In/50.pl EnclosedAlphanumerics
-2500 257F Box Drawing
-# In/51.pl BoxDrawing
-2580 259F Block Elements
-# In/52.pl BlockElements
-25A0 25FF Geometric Shapes
-# In/53.pl GeometricShapes
-2600 26FF Miscellaneous Symbols
-# In/54.pl MiscellaneousSymbols
-2700 27BF Dingbats
-# In/55.pl Dingbats
-2800 28FF Braille Patterns
-# In/56.pl BraillePatterns
-2E80 2EFF CJK Radicals Supplement
-# In/57.pl CJKRadicalsSupplement
-2F00 2FDF Kangxi Radicals
-# In/58.pl KangxiRadicals
-2FF0 2FFF Ideographic Description Characters
-# In/59.pl IdeographicDescriptionCharacters
-3000 303F CJK Symbols and Punctuation
-# In/60.pl CJKSymbolsandPunctuation
-3040 309F Hiragana
-# In/61.pl Hiragana
-30A0 30FF Katakana
-# In/62.pl Katakana
-3100 312F Bopomofo
-# In/63.pl Bopomofo
-3130 318F Hangul Compatibility Jamo
-# In/64.pl HangulCompatibilityJamo
-3190 319F Kanbun
-# In/65.pl Kanbun
-31A0 31BF Bopomofo Extended
-# In/66.pl BopomofoExtended
-3200 32FF Enclosed CJK Letters and Months
-# In/67.pl EnclosedCJKLettersandMonths
-3300 33FF CJK Compatibility
-# In/68.pl CJKCompatibility
-3400 4DB5 CJK Unified Ideographs Extension A
-# In/69.pl CJKUnifiedIdeographsExtensionA
-4E00 9FFF CJK Unified Ideographs
-# In/70.pl CJKUnifiedIdeographs
-A000 A48F Yi Syllables
-# In/71.pl YiSyllables
-A490 A4CF Yi Radicals
-# In/72.pl YiRadicals
-AC00 D7A3 Hangul Syllables
-# In/73.pl HangulSyllables
-D800 DB7F High Surrogates
-# In/74.pl HighSurrogates
-DB80 DBFF High Private Use Surrogates
-# In/75.pl HighPrivateUseSurrogates
-DC00 DFFF Low Surrogates
-# In/76.pl LowSurrogates
-E000 F8FF Private Use
-# In/77.pl PrivateUse
-F900 FAFF CJK Compatibility Ideographs
-# In/78.pl CJKCompatibilityIdeographs
-FB00 FB4F Alphabetic Presentation Forms
-# In/79.pl AlphabeticPresentationForms
-FB50 FDFF Arabic Presentation Forms-A
-# In/80.pl ArabicPresentationFormsA
-FE20 FE2F Combining Half Marks
-# In/81.pl CombiningHalfMarks
-FE30 FE4F CJK Compatibility Forms
-# In/82.pl CJKCompatibilityForms
-FE50 FE6F Small Form Variants
-# In/83.pl SmallFormVariants
-FE70 FEFE Arabic Presentation Forms-B
-# In/84.pl ArabicPresentationFormsB
-FEFF FEFF Specials
-# In/85.pl Specials
-FF00 FFEF Halfwidth and Fullwidth Forms
-# In/86.pl HalfwidthandFullwidthForms
-FFF0 FFFD Specials
-# In/85.pl Specials
-10300 1032F Old Italic
-# In/87.pl OldItalic
-10330 1034F Gothic
-# In/88.pl Gothic
-10400 1044F Deseret
-# In/89.pl Deseret
-1D000 1D0FF Byzantine Musical Symbols
-# In/90.pl ByzantineMusicalSymbols
-1D100 1D1FF Musical Symbols
-# In/91.pl MusicalSymbols
-1D400 1D7FF Mathematical Alphanumeric Symbols
-# In/92.pl MathematicalAlphanumericSymbols
-20000 2A6D6 CJK Unified Ideographs Extension B
-# In/93.pl CJKUnifiedIdeographsExtensionB
-2F800 2FA1F CJK Compatibility Ideographs Supplement
-# In/94.pl CJKCompatibilityIdeographsSupplement
-E0000 E007F Tags
-# In/95.pl Tags
-F0000 FFFFD Private Use
-# In/77.pl PrivateUse
-100000 10FFFD Private Use
-# In/77.pl PrivateUse
+0000 007F Basic Latin # BasicLatin In/40.pl
+0080 00FF Latin-1 Supplement # Latin1Supplement In/41.pl
+0100 017F Latin Extended-A # LatinExtendedA In/42.pl
+0180 024F Latin Extended-B # LatinExtendedB In/43.pl
+0250 02AF IPA Extensions # IPAExtensions In/44.pl
+02B0 02FF Spacing Modifier Letters # SpacingModifierLetters In/45.pl
+0300 036F Combining Diacritical Marks # CombiningDiacriticalMarks In/46.pl
+0370 03FF Greek # GreekBlock In/47.pl
+0400 04FF Cyrillic # CyrillicBlock In/48.pl
+0530 058F Armenian # ArmenianBlock In/49.pl
+0590 05FF Hebrew # HebrewBlock In/50.pl
+0600 06FF Arabic # ArabicBlock In/51.pl
+0700 074F Syriac # SyriacBlock In/52.pl
+0780 07BF Thaana # ThaanaBlock In/53.pl
+0900 097F Devanagari # DevanagariBlock In/54.pl
+0980 09FF Bengali # BengaliBlock In/55.pl
+0A00 0A7F Gurmukhi # GurmukhiBlock In/56.pl
+0A80 0AFF Gujarati # GujaratiBlock In/57.pl
+0B00 0B7F Oriya # OriyaBlock In/58.pl
+0B80 0BFF Tamil # TamilBlock In/59.pl
+0C00 0C7F Telugu # TeluguBlock In/60.pl
+0C80 0CFF Kannada # KannadaBlock In/61.pl
+0D00 0D7F Malayalam # MalayalamBlock In/62.pl
+0D80 0DFF Sinhala # SinhalaBlock In/63.pl
+0E00 0E7F Thai # ThaiBlock In/64.pl
+0E80 0EFF Lao # LaoBlock In/65.pl
+0F00 0FFF Tibetan # TibetanBlock In/66.pl
+1000 109F Myanmar # MyanmarBlock In/67.pl
+10A0 10FF Georgian # GeorgianBlock In/68.pl
+1100 11FF Hangul Jamo # HangulJamo In/69.pl
+1200 137F Ethiopic # EthiopicBlock In/70.pl
+13A0 13FF Cherokee # CherokeeBlock In/71.pl
+1400 167F Unified Canadian Aboriginal Syllabics # UnifiedCanadianAboriginalSyllabics In/72.pl
+1680 169F Ogham # OghamBlock In/73.pl
+16A0 16FF Runic # RunicBlock In/74.pl
+1780 17FF Khmer # KhmerBlock In/75.pl
+1800 18AF Mongolian # MongolianBlock In/76.pl
+1E00 1EFF Latin Extended Additional # LatinExtendedAdditional In/77.pl
+1F00 1FFF Greek Extended # GreekExtended In/78.pl
+2000 206F General Punctuation # GeneralPunctuation In/79.pl
+2070 209F Superscripts and Subscripts # SuperscriptsandSubscripts In/80.pl
+20A0 20CF Currency Symbols # CurrencySymbols In/81.pl
+20D0 20FF Combining Marks for Symbols # CombiningMarksforSymbols In/82.pl
+2100 214F Letterlike Symbols # LetterlikeSymbols In/83.pl
+2150 218F Number Forms # NumberForms In/84.pl
+2190 21FF Arrows # Arrows In/85.pl
+2200 22FF Mathematical Operators # MathematicalOperators In/86.pl
+2300 23FF Miscellaneous Technical # MiscellaneousTechnical In/87.pl
+2400 243F Control Pictures # ControlPictures In/88.pl
+2440 245F Optical Character Recognition # OpticalCharacterRecognition In/89.pl
+2460 24FF Enclosed Alphanumerics # EnclosedAlphanumerics In/90.pl
+2500 257F Box Drawing # BoxDrawing In/91.pl
+2580 259F Block Elements # BlockElements In/92.pl
+25A0 25FF Geometric Shapes # GeometricShapes In/93.pl
+2600 26FF Miscellaneous Symbols # MiscellaneousSymbols In/94.pl
+2700 27BF Dingbats # Dingbats In/95.pl
+2800 28FF Braille Patterns # BraillePatterns In/96.pl
+2E80 2EFF CJK Radicals Supplement # CJKRadicalsSupplement In/97.pl
+2F00 2FDF Kangxi Radicals # KangxiRadicals In/98.pl
+2FF0 2FFF Ideographic Description Characters # IdeographicDescriptionCharacters In/99.pl
+3000 303F CJK Symbols and Punctuation # CJKSymbolsandPunctuation In/100.pl
+3040 309F Hiragana # HiraganaBlock In/101.pl
+30A0 30FF Katakana # KatakanaBlock In/102.pl
+3100 312F Bopomofo # BopomofoBlock In/103.pl
+3130 318F Hangul Compatibility Jamo # HangulCompatibilityJamo In/104.pl
+3190 319F Kanbun # Kanbun In/105.pl
+31A0 31BF Bopomofo Extended # BopomofoExtended In/106.pl
+3200 32FF Enclosed CJK Letters and Months # EnclosedCJKLettersandMonths In/107.pl
+3300 33FF CJK Compatibility # CJKCompatibility In/108.pl
+3400 4DB5 CJK Unified Ideographs Extension A # CJKUnifiedIdeographsExtensionA In/109.pl
+4E00 9FFF CJK Unified Ideographs # CJKUnifiedIdeographs In/110.pl
+A000 A48F Yi Syllables # YiSyllables In/111.pl
+A490 A4CF Yi Radicals # YiRadicals In/112.pl
+AC00 D7A3 Hangul Syllables # HangulSyllables In/113.pl
+D800 DB7F High Surrogates # HighSurrogates In/114.pl
+DB80 DBFF High Private Use Surrogates # HighPrivateUseSurrogates In/115.pl
+DC00 DFFF Low Surrogates # LowSurrogates In/116.pl
+E000 F8FF Private Use # PrivateUse In/117.pl
+F900 FAFF CJK Compatibility Ideographs # CJKCompatibilityIdeographs In/118.pl
+FB00 FB4F Alphabetic Presentation Forms # AlphabeticPresentationForms In/119.pl
+FB50 FDFF Arabic Presentation Forms-A # ArabicPresentationFormsA In/120.pl
+FE20 FE2F Combining Half Marks # CombiningHalfMarks In/121.pl
+FE30 FE4F CJK Compatibility Forms # CJKCompatibilityForms In/122.pl
+FE50 FE6F Small Form Variants # SmallFormVariants In/123.pl
+FE70 FEFE Arabic Presentation Forms-B # ArabicPresentationFormsB In/124.pl
+FEFF FEFF Specials # Specials In/125.pl
+FF00 FFEF Halfwidth and Fullwidth Forms # HalfwidthandFullwidthForms In/126.pl
+FFF0 FFFD Specials # Specials In/125.pl
+10300 1032F Old Italic # OldItalicBlock In/127.pl
+10330 1034F Gothic # GothicBlock In/128.pl
+10400 1044F Deseret # DeseretBlock In/129.pl
+1D000 1D0FF Byzantine Musical Symbols # ByzantineMusicalSymbols In/130.pl
+1D100 1D1FF Musical Symbols # MusicalSymbols In/131.pl
+1D400 1D7FF Mathematical Alphanumeric Symbols # MathematicalAlphanumericSymbols In/132.pl
+20000 2A6D6 CJK Unified Ideographs Extension B # CJKUnifiedIdeographsExtensionB In/133.pl
+2F800 2FA1F CJK Compatibility Ideographs Supplement # CJKCompatibilityIdeographsSupplement In/134.pl
+E0000 E007F Tags # Tags In/135.pl
+F0000 FFFFD Private Use # PrivateUse In/117.pl
+100000 10FFFD Private Use # PrivateUse In/117.pl
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
%utf8::In = (
-'BasicLatin' => 0,
-'Latin1Supplement' => 1,
-'LatinExtendedA' => 2,
-'LatinExtendedB' => 3,
-'IPAExtensions' => 4,
-'SpacingModifierLetters' => 5,
-'CombiningDiacriticalMarks' => 6,
-'Greek' => 7,
-'Cyrillic' => 8,
-'Armenian' => 9,
-'Hebrew' => 10,
-'Arabic' => 11,
-'Syriac' => 12,
-'Thaana' => 13,
-'Devanagari' => 14,
-'Bengali' => 15,
-'Gurmukhi' => 16,
-'Gujarati' => 17,
-'Oriya' => 18,
-'Tamil' => 19,
-'Telugu' => 20,
-'Kannada' => 21,
-'Malayalam' => 22,
-'Sinhala' => 23,
-'Thai' => 24,
-'Lao' => 25,
-'Tibetan' => 26,
-'Myanmar' => 27,
-'Georgian' => 28,
-'HangulJamo' => 29,
-'Ethiopic' => 30,
-'Cherokee' => 31,
-'UnifiedCanadianAboriginalSyllabics' => 32,
-'Ogham' => 33,
-'Runic' => 34,
-'Khmer' => 35,
-'Mongolian' => 36,
-'LatinExtendedAdditional' => 37,
-'GreekExtended' => 38,
-'GeneralPunctuation' => 39,
-'SuperscriptsandSubscripts' => 40,
-'CurrencySymbols' => 41,
-'CombiningMarksforSymbols' => 42,
-'LetterlikeSymbols' => 43,
-'NumberForms' => 44,
-'Arrows' => 45,
-'MathematicalOperators' => 46,
-'MiscellaneousTechnical' => 47,
-'ControlPictures' => 48,
-'OpticalCharacterRecognition' => 49,
-'EnclosedAlphanumerics' => 50,
-'BoxDrawing' => 51,
-'BlockElements' => 52,
-'GeometricShapes' => 53,
-'MiscellaneousSymbols' => 54,
-'Dingbats' => 55,
-'BraillePatterns' => 56,
-'CJKRadicalsSupplement' => 57,
-'KangxiRadicals' => 58,
-'IdeographicDescriptionCharacters' => 59,
-'CJKSymbolsandPunctuation' => 60,
-'Hiragana' => 61,
-'Katakana' => 62,
-'Bopomofo' => 63,
-'HangulCompatibilityJamo' => 64,
-'Kanbun' => 65,
-'BopomofoExtended' => 66,
-'EnclosedCJKLettersandMonths' => 67,
-'CJKCompatibility' => 68,
-'CJKUnifiedIdeographsExtensionA' => 69,
-'CJKUnifiedIdeographs' => 70,
-'YiSyllables' => 71,
-'YiRadicals' => 72,
-'HangulSyllables' => 73,
-'HighSurrogates' => 74,
-'HighPrivateUseSurrogates' => 75,
-'LowSurrogates' => 76,
-'PrivateUse' => 77,
-'CJKCompatibilityIdeographs' => 78,
-'AlphabeticPresentationForms' => 79,
-'ArabicPresentationFormsA' => 80,
-'CombiningHalfMarks' => 81,
-'CJKCompatibilityForms' => 82,
-'SmallFormVariants' => 83,
-'ArabicPresentationFormsB' => 84,
-'Specials' => 85,
-'HalfwidthandFullwidthForms' => 86,
-'OldItalic' => 87,
-'Gothic' => 88,
-'Deseret' => 89,
-'ByzantineMusicalSymbols' => 90,
-'MusicalSymbols' => 91,
-'MathematicalAlphanumericSymbols' => 92,
-'CJKUnifiedIdeographsExtensionB' => 93,
-'CJKCompatibilityIdeographsSupplement' => 94,
-'Tags' => 95,
+'Latin' => 0,
+'Greek' => 1,
+'Cyrillic' => 2,
+'Armenian' => 3,
+'Hebrew' => 4,
+'Arabic' => 5,
+'Syriac' => 6,
+'Thaana' => 7,
+'Devanagari' => 8,
+'Bengali' => 9,
+'Gurmukhi' => 10,
+'Gujarati' => 11,
+'Oriya' => 12,
+'Tamil' => 13,
+'Telugu' => 14,
+'Kannada' => 15,
+'Malayalam' => 16,
+'Sinhala' => 17,
+'Thai' => 18,
+'Lao' => 19,
+'Tibetan' => 20,
+'Myanmar' => 21,
+'Georgian' => 22,
+'Hangul' => 23,
+'Ethiopic' => 24,
+'Cherokee' => 25,
+'CanadianAboriginal' => 26,
+'Ogham' => 27,
+'Runic' => 28,
+'Khmer' => 29,
+'Mongolian' => 30,
+'Hiragana' => 31,
+'Katakana' => 32,
+'Bopomofo' => 33,
+'Han' => 34,
+'Yi' => 35,
+'OldItalic' => 36,
+'Gothic' => 37,
+'Deseret' => 38,
+'Inherited' => 39,
+'BasicLatin' => 40,
+'Latin1Supplement' => 41,
+'LatinExtendedA' => 42,
+'LatinExtendedB' => 43,
+'IPAExtensions' => 44,
+'SpacingModifierLetters' => 45,
+'CombiningDiacriticalMarks' => 46,
+'GreekBlock' => 47,
+'CyrillicBlock' => 48,
+'ArmenianBlock' => 49,
+'HebrewBlock' => 50,
+'ArabicBlock' => 51,
+'SyriacBlock' => 52,
+'ThaanaBlock' => 53,
+'DevanagariBlock' => 54,
+'BengaliBlock' => 55,
+'GurmukhiBlock' => 56,
+'GujaratiBlock' => 57,
+'OriyaBlock' => 58,
+'TamilBlock' => 59,
+'TeluguBlock' => 60,
+'KannadaBlock' => 61,
+'MalayalamBlock' => 62,
+'SinhalaBlock' => 63,
+'ThaiBlock' => 64,
+'LaoBlock' => 65,
+'TibetanBlock' => 66,
+'MyanmarBlock' => 67,
+'GeorgianBlock' => 68,
+'HangulJamo' => 69,
+'EthiopicBlock' => 70,
+'CherokeeBlock' => 71,
+'UnifiedCanadianAboriginalSyllabics' => 72,
+'OghamBlock' => 73,
+'RunicBlock' => 74,
+'KhmerBlock' => 75,
+'MongolianBlock' => 76,
+'LatinExtendedAdditional' => 77,
+'GreekExtended' => 78,
+'GeneralPunctuation' => 79,
+'SuperscriptsandSubscripts' => 80,
+'CurrencySymbols' => 81,
+'CombiningMarksforSymbols' => 82,
+'LetterlikeSymbols' => 83,
+'NumberForms' => 84,
+'Arrows' => 85,
+'MathematicalOperators' => 86,
+'MiscellaneousTechnical' => 87,
+'ControlPictures' => 88,
+'OpticalCharacterRecognition' => 89,
+'EnclosedAlphanumerics' => 90,
+'BoxDrawing' => 91,
+'BlockElements' => 92,
+'GeometricShapes' => 93,
+'MiscellaneousSymbols' => 94,
+'Dingbats' => 95,
+'BraillePatterns' => 96,
+'CJKRadicalsSupplement' => 97,
+'KangxiRadicals' => 98,
+'IdeographicDescriptionCharacters' => 99,
+'CJKSymbolsandPunctuation' => 100,
+'HiraganaBlock' => 101,
+'KatakanaBlock' => 102,
+'BopomofoBlock' => 103,
+'HangulCompatibilityJamo' => 104,
+'Kanbun' => 105,
+'BopomofoExtended' => 106,
+'EnclosedCJKLettersandMonths' => 107,
+'CJKCompatibility' => 108,
+'CJKUnifiedIdeographsExtensionA' => 109,
+'CJKUnifiedIdeographs' => 110,
+'YiSyllables' => 111,
+'YiRadicals' => 112,
+'HangulSyllables' => 113,
+'HighSurrogates' => 114,
+'HighPrivateUseSurrogates' => 115,
+'LowSurrogates' => 116,
+'PrivateUse' => 117,
+'CJKCompatibilityIdeographs' => 118,
+'AlphabeticPresentationForms' => 119,
+'ArabicPresentationFormsA' => 120,
+'CombiningHalfMarks' => 121,
+'CJKCompatibilityForms' => 122,
+'SmallFormVariants' => 123,
+'ArabicPresentationFormsB' => 124,
+'Specials' => 125,
+'HalfwidthandFullwidthForms' => 126,
+'OldItalicBlock' => 127,
+'GothicBlock' => 128,
+'DeseretBlock' => 129,
+'ByzantineMusicalSymbols' => 130,
+'MusicalSymbols' => 131,
+'MathematicalAlphanumericSymbols' => 132,
+'CJKUnifiedIdeographsExtensionB' => 133,
+'CJKCompatibilityIdeographsSupplement' => 134,
+'Tags' => 135,
);
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0000 007F
+0041 005A
+0061 007A
+00AA
+00BA
+00C0 00D6
+00D8 00F6
+00F8 01BA
+01BB
+01BC 01BF
+01C0 01C3
+01C4 021F
+0222 0233
+0250 02AD
+02B0 02B8
+02E0 02E4
+1E00 1E9B
+1EA0 1EF9
+207F
+212A 212B
+FB00 FB06
+FF21 FF3A
+FF41 FF5A
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0080 00FF
+00B5
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03D7
+03DA 03F5
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2126
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0590 05FF
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A40
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A6F
+0A70 0A71
+0A72 0A74
END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3000 303F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3040 309F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+30A0 30FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3100 312F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3130 318F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3190 319F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+31A0 31BF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3200 32FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3300 33FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3400 4DB5
+END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0600 06FF
+0A81 0A82
+0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC
+0ABD
+0ABE 0AC0
+0AC1 0AC5
+0AC7 0AC8
+0AC9
+0ACB 0ACC
+0ACD
+0AD0
+0AE0
+0AE6 0AEF
END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+4E00 9FFF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+A000 A48F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+A490 A4CF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+AC00 D7A3
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+D800 DB7F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+DB80 DBFF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+DC00 DFFF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+100000 10FFFD
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+F900 FAFF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FB00 FB4F
+END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0700 074F
+0B01
+0B02 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C
+0B3D
+0B3E
+0B3F
+0B40
+0B41 0B43
+0B47 0B48
+0B4B 0B4C
+0B4D
+0B56
+0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FB50 FDFF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE20 FE2F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE30 FE4F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE50 FE6F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE70 FEFE
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FFF0 FFFD
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FF00 FFEF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10300 1032F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10330 1034F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10400 1044F
+END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0780 07BF
+0B82
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BBF
+0BC0
+0BC1 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BCD
+0BD7
+0BE7 0BEF
+0BF0 0BF2
END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D000 1D0FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D100 1D1FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D400 1D7FF
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+20000 2A6D6
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2F800 2FA1F
+END
--- /dev/null
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+E0000 E007F
+END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0900 097F
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C40
+0C41 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0980 09FF
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE
+0CBF
+0CC0 0CC4
+0CC6
+0CC7 0CC8
+0CCA 0CCB
+0CCC 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0A00 0A7F
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D40
+0D41 0D43
+0D46 0D48
+0D4A 0D4C
+0D4D
+0D57
+0D60 0D61
+0D66 0D6F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0A80 0AFF
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD1
+0DD2 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0B00 0B7F
+0E01 0E30
+0E31
+0E32 0E33
+0E34 0E3A
+0E40 0E45
+0E46
+0E47 0E4E
+0E50 0E59
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0B80 0BFF
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB1
+0EB2 0EB3
+0EB4 0EB9
+0EBB 0EBC
+0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0100 017F
+0400 0481
+0483 0486
+048C 04C4
+04C7 04C8
+04CB 04CC
+04D0 04F5
+04F8 04F9
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0C00 0C7F
+0F00
+0F18 0F19
+0F20 0F29
+0F2A 0F33
+0F35
+0F37
+0F39
+0F40 0F47
+0F49 0F6A
+0F71 0F7E
+0F7F
+0F80 0F84
+0F86 0F87
+0F88 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0C80 0CFF
+1000 1021
+1023 1027
+1029 102A
+102C
+102D 1030
+1031
+1032
+1036 1037
+1038
+1039
+1040 1049
+1050 1055
+1056 1057
+1058 1059
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0D00 0D7F
+10A0 10C5
+10D0 10F6
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0D80 0DFF
+1100 1159
+115F 11A2
+11A8 11F9
+3131 318E
+AC00 D7A3
+FFA0 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0E00 0E7F
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1369 1371
+1372 137C
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0E80 0EFF
+13A0 13F4
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0F00 0FFF
+1401 166C
+166F 1676
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1000 109F
+1681 169A
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-10A0 10FF
+16A0 16EA
+16EE 16F0
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1100 11FF
+1780 17B3
+17B4 17B6
+17B7 17BD
+17BE 17C5
+17C6
+17C7 17C8
+17C9 17D3
+17E0 17E9
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0180 024F
+0531 0556
+0559
+0561 0587
+FB13 FB17
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1200 137F
+1810 1819
+1820 1842
+1843
+1844 1877
+1880 18A8
+18A9
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-13A0 13FF
+3041 3094
+309D 309E
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1400 167F
+30A1 30FA
+30FD 30FE
+FF66 FF6F
+FF71 FF9D
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1680 169F
+3105 312C
+31A0 31B7
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-16A0 16FF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+3005
+3007
+3021 3029
+3038 303A
+3400 4DB5
+4E00 9FA5
+F900 FA2D
+20000 2A6D6
+2F800 2FA1D
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1780 17FF
+A000 A48C
+A490 A4A1
+A4A4 A4B3
+A4B5 A4C0
+A4C2 A4C4
+A4C6
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1800 18AF
+10300 1031E
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1E00 1EFF
+10330 10349
+1034A
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-1F00 1FFF
+10400 10425
+10428 1044D
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2000 206F
+0300 034E
+0360 0362
+0488 0489
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+064B 0655
+0670
+06D6 06DC
+06DD 06DE
+06DF 06E4
+06E7 06E8
+06EA 06ED
+20D0 20DC
+20DD 20E0
+20E1
+20E2 20E3
+302A 302F
+3099 309A
+FB1E
+FE20 FE23
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0250 02AF
+05D0 05EA
+05F0 05F2
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FB4F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2070 209F
+0000 007F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-20A0 20CF
+0080 00FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-20D0 20FF
+0100 017F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2100 214F
+0180 024F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2150 218F
+0250 02AF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2190 21FF
+02B0 02FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2200 22FF
+0300 036F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2300 23FF
+0370 03FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2400 243F
+0400 04FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2440 245F
+0530 058F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-02B0 02FF
+0621 063A
+0641 064A
+0671 06D3
+06D5
+06E5 06E6
+06FA 06FC
+FB50 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE72
+FE74
+FE76 FEFC
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2460 24FF
+0590 05FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2500 257F
+0600 06FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2580 259F
+0700 074F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-25A0 25FF
+0780 07BF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2600 26FF
+0900 097F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2700 27BF
+0980 09FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2800 28FF
+0A00 0A7F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2E80 2EFF
+0A80 0AFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2F00 2FDF
+0B00 0B7F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-2FF0 2FFF
+0B80 0BFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0300 036F
+0710
+0711
+0712 072C
+0730 074A
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3000 303F
+0C00 0C7F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3040 309F
+0C80 0CFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-30A0 30FF
+0D00 0D7F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3100 312F
+0D80 0DFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3130 318F
+0E00 0E7F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3190 319F
+0E80 0EFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-31A0 31BF
+0F00 0FFF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3200 32FF
+1000 109F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3300 33FF
+10A0 10FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-3400 4DB5
+1100 11FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-0370 03FF
+0780 07A5
+07A6 07B0
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-4E00 9FFF
+1200 137F
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return <<'END';
-A000 A48F
+13A0 13FF
END
# This file is built by mktables.PL from e.g. Unicode.txt.
# Any changes made here will be lost!
return