summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Ing-Simmons <nik@tiuk.ti.com>2002-03-03 09:59:59 +0000
committerNick Ing-Simmons <nik@tiuk.ti.com>2002-03-03 09:59:59 +0000
commitffdd6eaeb041c239433c115b7f5a3a094a7e3a36 (patch)
treeb2ac90bcb09fd3a72e04c17085cc5d0bacd38c62
parent9b24df1e7526ad6cf0285d7f27dc0ddfde29b5e0 (diff)
parent5cd9eed81d87ffeca0a74d001c253d4eafad5148 (diff)
downloadperl-ffdd6eaeb041c239433c115b7f5a3a094a7e3a36.tar.gz
Integrate mainline
p4raw-id: //depot/perlio@14960
-rw-r--r--MANIFEST4
-rw-r--r--README.beos12
-rw-r--r--README.hpux2
-rw-r--r--deb.c7
-rw-r--r--dump.c8
-rw-r--r--ext/DB_File/Changes10
-rw-r--r--ext/DB_File/DB_File.pm22
-rw-r--r--ext/DB_File/DB_File.xs14
-rwxr-xr-xext/DB_File/t/db-btree.t12
-rwxr-xr-xext/DB_File/t/db-recno.t2
-rw-r--r--ext/Devel/Peek/Peek.pm27
-rwxr-xr-xext/Encode/compile6
-rw-r--r--ext/Encode/t/table.rnd294
-rw-r--r--ext/Encode/t/table.utf8294
-rw-r--r--ext/POSIX/t/posix.t2
-rw-r--r--lib/Tie/Array.pm4
-rw-r--r--lib/Tie/File.pm197
-rw-r--r--lib/Tie/File/01_gen.t2
-rw-r--r--lib/Tie/File/04_splice.t31
-rw-r--r--lib/Tie/File/07_rv_splice.t18
-rw-r--r--lib/Tie/File/14_lock.t40
-rw-r--r--lib/Tie/File/15_pushpop.t127
-rw-r--r--lib/perl5db.pl48
-rwxr-xr-xmakedepend.SH3
-rw-r--r--op.c2
-rw-r--r--perl.c2
-rw-r--r--perl.h10
-rw-r--r--pod/perlrun.pod6
-rw-r--r--pp_sys.c2
-rw-r--r--sv.h2
-rwxr-xr-xt/comp/use.t17
-rw-r--r--t/lib/warnings/op9
32 files changed, 546 insertions, 690 deletions
diff --git a/MANIFEST b/MANIFEST
index edb69f8e6a..a6069ebb9d 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -365,8 +365,6 @@ ext/Encode/t/japanese.pl Encode extension
ext/Encode/t/JP.t Encode extension test
ext/Encode/t/table.euc Encode extension test
ext/Encode/t/table.ref Encode extension test
-ext/Encode/t/table.rnd Encode extension
-ext/Encode/t/table.utf8 Encode extension
ext/Encode/t/Tcl.t Encode extension test
ext/Encode/TW/Makefile.PL Encode extension
ext/Encode/TW/TW.pm Encode extension
@@ -1433,6 +1431,8 @@ lib/Tie/File/10_splice_rs.t Test for Tie::File.
lib/Tie/File/11_rv_splice_rs.t Test for Tie::File.
lib/Tie/File/12_longfetch_rs.t Test for Tie::File.
lib/Tie/File/13_size_rs.t Test for Tie::File.
+lib/Tie/File/14_lock.t Test for Tie::File.
+lib/Tie/File/15_pushpop.t Test for Tie::File.
lib/Tie/Handle.pm Base class for tied handles
lib/Tie/Handle/stdhandle.t Test for Tie::StdHandle
lib/Tie/Hash.pm Base class for tied hashes
diff --git a/README.beos b/README.beos
index 155f291d97..b931add73d 100644
--- a/README.beos
+++ b/README.beos
@@ -57,11 +57,9 @@ please email me.
Tom Spindler
dogcow@isi.net
-=head2 Update 2001-12-26
+=head2 Update 2002-03-02
-I managed to compile one of the developer snapshots (13885 plus a few
-tweaks) leading up to (some day) Perl 5.8.0, and the following tests
-fail:
+The following tests fail on pre-5.8.0 Perl in BeOS Personal 5.0:
op/magic 24-26
ext/POSIX/t/sigaction 13
@@ -87,8 +85,8 @@ if sigaction returns early.
=item *
The waitpid failure means that after there are no more child
-processes, waitpid is supposed to start returning -1 (and set errno
-to ECHILD). In BeOS, it doesn't seem to.
+processes, waitpid is supposed to start returning -1 (and set
+errno to ECHILD). In BeOS, it doesn't seem to.
=item *
@@ -98,6 +96,6 @@ The Installed test has some filesystem portability assumptions.
Disclaimer: I just installed BeOS Personal Edition 5.0 and the
Developer Tools, that is the whole extent of my BeOS expertise,
-so pelase don't ask for further help in BeOS Perl problems, sorry.
+so please don't ask me for further help in BeOS Perl problems.
jhi@iki.fi
diff --git a/README.hpux b/README.hpux
index d6dd71b8de..39802dc081 100644
--- a/README.hpux
+++ b/README.hpux
@@ -313,7 +313,7 @@ If you are going to use the HP DCE package, the library used for threading
is /usr/lib/libcma.sl, but there have been multiple updates of that
library over time. Perl will build with the first version, but it
will not pass the test suite. Older Oracle versions might be a compelling
-reason, not to update that library, otherwise please find a newer version
+reason not to update that library, otherwise please find a newer version
in one of the following patches: PHSS_19739, PHSS_20608, or PHSS_23672
reformatted output:
diff --git a/deb.c b/deb.c
index fae944cf07..6a5a21c202 100644
--- a/deb.c
+++ b/deb.c
@@ -81,11 +81,14 @@ Perl_debstackptrs(pTHX)
I32
Perl_debstack(pTHX)
{
-#ifdef DEBUGGING
+#ifndef SKIP_DEBUGGING
I32 top = PL_stack_sp - PL_stack_base;
register I32 i = top - 30;
I32 *markscan = PL_markstack + PL_curstackinfo->si_markoff;
+ if (CopSTASH_eq(PL_curcop, PL_debstash) && !DEBUG_J_TEST_)
+ return 0;
+
if (i < 0)
i = 0;
@@ -118,6 +121,6 @@ Perl_debstack(pTHX)
}
while (1);
PerlIO_printf(Perl_debug_log, "\n");
-#endif /* DEBUGGING */
+#endif /* SKIP_DEBUGGING */
return 0;
}
diff --git a/dump.c b/dump.c
index 0a360242de..9b2ff67307 100644
--- a/dump.c
+++ b/dump.c
@@ -1402,6 +1402,10 @@ Perl_debop(pTHX_ OP *o)
CV *cv;
SV *sv;
STRLEN n_a;
+
+ if (CopSTASH_eq(PL_curcop, PL_debstash) && !DEBUG_J_TEST_)
+ return 0;
+
Perl_deb(aTHX_ "%s", OP_NAME(o));
switch (o->op_type) {
case OP_CONST:
@@ -1435,7 +1439,7 @@ Perl_debop(pTHX_ OP *o)
PerlIO_printf(Perl_debug_log, "[%"UVuf"]", (UV)o->op_targ);
break;
default:
- break;
+ return 0;
}
PerlIO_printf(Perl_debug_log, "\n");
return 0;
@@ -1469,6 +1473,8 @@ Perl_watch(pTHX_ char **addr)
STATIC void
S_debprof(pTHX_ OP *o)
{
+ if (CopSTASH_eq(PL_curcop, PL_debstash) && !DEBUG_J_TEST_)
+ return;
if (!PL_profiledata)
Newz(000, PL_profiledata, MAXO, U32);
++PL_profiledata[o->op_type];
diff --git a/ext/DB_File/Changes b/ext/DB_File/Changes
index 6676d8ae2a..409f62faa0 100644
--- a/ext/DB_File/Changes
+++ b/ext/DB_File/Changes
@@ -395,10 +395,18 @@
* Added "clean" attribute to Makefile.PL
-1.802 6th January 2001
+1.802 6th January 2002
* The message about some test failing in db-recno.t had the wrong test
numbers. Fixed.
* merged core patch 13942.
+1.803 1st March 2002
+
+ * Fixed a problem with db-btree.t where it complained about an "our"
+ variable redeclaation.
+
+ * FETCH, STORE & DELETE don't map the flags parameter into the
+ equivalent Berkeley DB function anymore.
+
diff --git a/ext/DB_File/DB_File.pm b/ext/DB_File/DB_File.pm
index 3d3efbbd39..1e29090b23 100644
--- a/ext/DB_File/DB_File.pm
+++ b/ext/DB_File/DB_File.pm
@@ -1,8 +1,8 @@
# DB_File.pm -- Perl 5 interface to Berkeley DB
#
# written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 6th Jan 2002
-# version 1.802
+# last modified 1st March 2002
+# version 1.803
#
# Copyright (c) 1995-2002 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
@@ -150,7 +150,7 @@ our ($db_version, $use_XSLoader);
use Carp;
-$VERSION = "1.802" ;
+$VERSION = "1.803" ;
#typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
$DB_BTREE = new DB_File::BTREEINFO ;
@@ -978,7 +978,7 @@ code:
use strict ;
use DB_File ;
- our ($filename, %h) ;
+ my ($filename, %h) ;
$filename = "tree" ;
unlink $filename ;
@@ -1033,7 +1033,7 @@ Here is the script above rewritten using the C<seq> API method.
use strict ;
use DB_File ;
- our ($filename, $x, %h, $status, $key, $value) ;
+ my ($filename, $x, %h, $status, $key, $value) ;
$filename = "tree" ;
unlink $filename ;
@@ -1105,7 +1105,7 @@ this:
use strict ;
use DB_File ;
- our ($filename, $x, %h) ;
+ my ($filename, $x, %h) ;
$filename = "tree" ;
@@ -1155,7 +1155,7 @@ Assuming the database from the previous example:
use strict ;
use DB_File ;
- our ($filename, $x, %h, $found) ;
+ my ($filename, $x, %h, $found) ;
$filename = "tree" ;
@@ -1194,7 +1194,7 @@ Again assuming the existence of the C<tree> database
use strict ;
use DB_File ;
- our ($filename, $x, %h, $found) ;
+ my ($filename, $x, %h, $found) ;
$filename = "tree" ;
@@ -1240,7 +1240,7 @@ and print the first matching key/value pair given a partial key.
use DB_File ;
use Fcntl ;
- our ($filename, $x, %h, $st, $key, $value) ;
+ my ($filename, $x, %h, $st, $key, $value) ;
sub match
{
@@ -1439,7 +1439,7 @@ L<THE API INTERFACE>).
use warnings ;
use strict ;
- our (@h, $H, $file, $i) ;
+ my (@h, $H, $file, $i) ;
use DB_File ;
use Fcntl ;
@@ -2004,7 +2004,7 @@ F<authors/id/TOMC/scripts/nshist.gz>).
use DB_File ;
use Fcntl ;
- our ($dotdir, $HISTORY, %hist_db, $href, $binary_time, $date) ;
+ my ($dotdir, $HISTORY, %hist_db, $href, $binary_time, $date) ;
$dotdir = $ENV{HOME} || $ENV{LOGNAME};
$HISTORY = "$dotdir/.netscape/history.db";
diff --git a/ext/DB_File/DB_File.xs b/ext/DB_File/DB_File.xs
index 26e2160f32..fc2f63e12a 100644
--- a/ext/DB_File/DB_File.xs
+++ b/ext/DB_File/DB_File.xs
@@ -3,8 +3,8 @@
DB_File.xs -- Perl 5 interface to Berkeley DB
written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 6th Jan 2002
- version 1.802
+ last modified 1st March 2002
+ version 1.803
All comments/suggestions/problems are welcome
@@ -99,6 +99,8 @@
Use the new constants code.
1.801 - No change to DB_File.xs
1.802 - No change to DB_File.xs
+ 1.803 - FETCH, STORE & DELETE don't map the flags parameter
+ into the equivalent Berkeley DB function anymore.
*/
@@ -123,8 +125,6 @@
# undef __attribute__
#endif
-
-
#ifdef COMPAT185
# include <db_185.h>
#else
@@ -327,9 +327,9 @@ typedef union INFO {
-#define db_DELETE(db, key, flags) ((db->dbp)->del)(db->dbp, TXN &key, flags)
-#define db_STORE(db, key, value, flags) ((db->dbp)->put)(db->dbp, TXN &key, &value, flags)
-#define db_FETCH(db, key, flags) ((db->dbp)->get)(db->dbp, TXN &key, &value, flags)
+#define db_DELETE(db, key, flags) ((db->dbp)->del)(db->dbp, TXN &key, 0)
+#define db_STORE(db, key, value, flags) ((db->dbp)->put)(db->dbp, TXN &key, &value, 0)
+#define db_FETCH(db, key, flags) ((db->dbp)->get)(db->dbp, TXN &key, &value, 0)
#define db_sync(db, flags) ((db->dbp)->sync)(db->dbp, flags)
#define db_get(db, key, value, flags) ((db->dbp)->get)(db->dbp, TXN &key, &value, flags)
diff --git a/ext/DB_File/t/db-btree.t b/ext/DB_File/t/db-btree.t
index ef05de6946..74b0cba38d 100755
--- a/ext/DB_File/t/db-btree.t
+++ b/ext/DB_File/t/db-btree.t
@@ -958,7 +958,7 @@ EOM
use strict ;
use DB_File ;
- our ($filename, %h);
+ my ($filename, %h);
$filename = "tree" ;
unlink $filename ;
@@ -1010,7 +1010,7 @@ EOM
use strict ;
use DB_File ;
- our ($filename, $x, %h, $status, $key, $value);
+ my ($filename, $x, %h, $status, $key, $value);
$filename = "tree" ;
unlink $filename ;
@@ -1066,7 +1066,7 @@ EOM
use strict ;
use DB_File ;
- our ($filename, $x, %h);
+ my ($filename, $x, %h);
$filename = "tree" ;
@@ -1115,7 +1115,7 @@ EOM
use strict ;
use DB_File ;
- our ($filename, $x, %h, $found);
+ my ($filename, $x, %h, $found);
$filename = "tree" ;
@@ -1150,7 +1150,7 @@ EOM
use strict ;
use DB_File ;
- our ($filename, $x, %h, $found);
+ my ($filename, $x, %h, $found);
$filename = "tree" ;
@@ -1186,7 +1186,7 @@ EOM
use DB_File ;
use Fcntl ;
- our ($filename, $x, %h, $st, $key, $value);
+ my ($filename, $x, %h, $st, $key, $value);
sub match
{
diff --git a/ext/DB_File/t/db-recno.t b/ext/DB_File/t/db-recno.t
index 5b03219c55..f077252107 100755
--- a/ext/DB_File/t/db-recno.t
+++ b/ext/DB_File/t/db-recno.t
@@ -1080,6 +1080,7 @@ sub test_splice {
my ($s_r, $s_error, @s_warnings);
my $gather_warning = sub { push @s_warnings, $_[0] };
+ $offset = $#array if $offset and $offset > @array;
if ($context eq 'list') {
my @r;
eval {
@@ -1118,6 +1119,7 @@ sub test_splice {
# Now do the same for DB_File's version of splice
my ($ms_r, $ms_error, @ms_warnings);
$gather_warning = sub { push @ms_warnings, $_[0] };
+ $offset = $#h if $offset and $offset > @h;
if ($context eq 'list') {
my @r;
eval {
diff --git a/ext/Devel/Peek/Peek.pm b/ext/Devel/Peek/Peek.pm
index ecc44b7ca0..3b4b845be5 100644
--- a/ext/Devel/Peek/Peek.pm
+++ b/ext/Devel/Peek/Peek.pm
@@ -17,6 +17,26 @@ use XSLoader ();
XSLoader::load 'Devel::Peek';
+sub import {
+ my $c = shift;
+ my $ops_rx = qr/^:opd(=[stP]*)?\b/;
+ my @db = grep m/$ops_rx/, @_;
+ @_ = grep !m/$ops_rx/, @_;
+ if (@db) {
+ die "Too many :opd options" if @db > 1;
+ runops_debug(1);
+ my $flags = ($db[0] =~ m/$ops_rx/ and $1);
+ $flags = 'st' unless defined $flags;
+ my $f = 0;
+ $f |= 2 if $flags =~ /s/;
+ $f |= 8 if $flags =~ /t/;
+ $f |= 64 if $flags =~ /P/;
+ $^D |= $f if $f;
+ }
+ unshift @_, $c;
+ goto &Exporter::import;
+}
+
sub DumpWithOP ($;$) {
local($Devel::Peek::dump_ops)=1;
my $depth = @_ > 1 ? $_[1] : 4 ;
@@ -58,6 +78,8 @@ Devel::Peek - A data debugging tool for the XS programmer
DumpArray( 5, $a, $b, ... );
mstat "Point 5";
+ use Devel::Peek ':opd=st';
+
=head1 DESCRIPTION
Devel::Peek contains functions which allows raw Perl datatypes to be
@@ -88,6 +110,11 @@ The global variable $Devel::Peek::pv_limit can be set to limit the
number of character printed in various string values. Setting it to 0
means no limit.
+If C<use Devel::Peek> directive has a C<:opd=FLAGS> argument,
+this switches on debugging of opcode dispatch. C<FLAGS> should be a
+combination of C<s>, C<t>, and C<P> (see B<-D> flags in L<perlrun>).
+C<:opd> is a shortcut for C<:opd=st>.
+
=head2 Runtime debugging
C<CvGV($cv)> return one of the globs associated to a subroutine reference $cv.
diff --git a/ext/Encode/compile b/ext/Encode/compile
index 0ff1e669a6..6eda5b9396 100755
--- a/ext/Encode/compile
+++ b/ext/Encode/compile
@@ -121,12 +121,13 @@ eval "\@ARGV = map(glob(\$_),\@ARGV)" if ($^O eq 'MSWin32');
my %opt;
# I think these are:
# -Q to disable the duplicate codepoint test
+# -S make mapping errors fatal
# -q to remove comments written to output files
# -O to enable the (brute force) substring optimiser
# -o <output> to specify the output file name (else it's the first arg)
# -f <inlist> to give a file with a list of input files (else use the args)
# -n <name> to name the encoding (else use the basename of the input file.
-getopts('QqOo:f:n:',\%opt);
+getopts('SQqOo:f:n:',\%opt);
# This really should go first, else the die here causes empty (non-erroneous)
# output files to be written.
@@ -442,6 +443,7 @@ sub compile_enc
my $v = hex($def);
$rep = &$type_func($v & 0xFF, ($v >> 8) & 0xffe);
}
+ my $errors;
my $seen;
# use -Q to silence the seen test. Makefile.PL uses this by default.
$seen = {} unless $opt{Q};
@@ -484,6 +486,7 @@ sub compile_enc
{
warn sprintf("U%04X is %02X%02X and %04X\n",
$val,$page,$ch,$seen->{$uch});
+ $errors++;
}
else
{
@@ -506,6 +509,7 @@ sub compile_enc
} while --$pages;
die "\$min_el=$min_el, \$max_el=$max_el - seems we read no lines"
if $min_el > $max_el;
+ die "$errors mapping conflicts\n" if ($errors && $opt{'S'});
$encoding{$name} = [$e2u,$u2e,$rep,$min_el,$max_el];
}
diff --git a/ext/Encode/t/table.rnd b/ext/Encode/t/table.rnd
deleted file mode 100644
index 8178409aa5..0000000000
--- a/ext/Encode/t/table.rnd
+++ /dev/null
@@ -1,294 +0,0 @@
-0x0020: ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >
-0x0040: @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^
-0x0060: ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
-0x8ea0: 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ
-0x8ec0: タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゙
-0x8ee0:
-0xa0a0:
-0xa0c0:
-0xa0e0:
-0xa1a0:  、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐
-0xa1c0: \〜‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−±
-0xa1e0: ÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇
-0xa2a0: ◆□■△▲▽▼※〒→←↑↓〓 ∈∋⊆⊇⊂
-0xa2c0: ∪∩ ∧∨¬⇒⇔∀∃ ∠⊥⌒
-0xa2e0: ∇≡≒≪≫√∽∝∵∫∬ ʼn♯♭♪†‡¶ ◯
-0xa3a0: 0123456789
-0xa3c0: ABCDEFGHIJKLMNOPQRSTUVWXYZ
-0xa3e0: abcdefghijklmnopqrstuvwxyz
-0xa4a0: ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞ
-0xa4c0: だちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽま
-0xa4e0: むめもゃやゅゆょよらりるれろゎわゐゑをん
-0xa5a0: ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ
-0xa5c0: ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマ
-0xa5e0: ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ
-0xa6a0: ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
-0xa6c0: αβγδεζηθικλμνξοπρστυφχψω
-0xa6e0:
-0xa7a0: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬ
-0xa7c0: ЮЯ абвгдеёжзийклм
-0xa7e0: опрстуфхцчшщъыьэюя
-0xa8a0: ─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥
-0xa8c0: ╂
-0xa8e0:
-0xa9a0:
-0xa9c0:
-0xa9e0:
-0xaaa0:
-0xaac0:
-0xaae0:
-0xaba0:
-0xabc0:
-0xabe0:
-0xaca0:
-0xacc0:
-0xace0:
-0xada0:
-0xadc0:
-0xade0:
-0xaea0:
-0xaec0:
-0xaee0:
-0xafa0:
-0xafc0:
-0xafe0:
-0xb0a0: 亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎
-0xb0c0: 粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯
-0xb0e0: 萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭
-0xb1a0: 院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云
-0xb1c0: 雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭
-0xb1e0: 園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応
-0xb2a0: 押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮
-0xb2c0: 伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩
-0xb2e0: 迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改
-0xb3a0: 魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨
-0xb3c0: 垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠
-0xb3e0: 橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱
-0xb4a0: 粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款
-0xb4c0: 汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含
-0xb4e0: 巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄
-0xb5a0: 機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠
-0xb5c0: 祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急
-0xb5e0: 朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京
-0xb6a0: 供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎
-0xb6c0: 鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿
-0xb6e0: 謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈
-0xb7a0: 掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪
-0xb7c0: 契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎
-0xb7e0: 劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲
-0xb8a0: 検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃
-0xb8c0: 言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五
-0xb8e0: 伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向
-0xb9a0: 后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江
-0xb9c0: 浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤
-0xb9e0: 項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込
-0xbaa0: 此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐
-0xbac0: 裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤
-0xbae0: 材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷
-0xbba0: 察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃
-0xbbc0: 酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝
-0xbbe0: 死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時
-0xbca0: 次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿
-0xbcc0: 疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼
-0xbce0: 酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周
-0xbda0: 宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従
-0xbdc0: 柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉
-0xbde0: 準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償
-0xbea0: 勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松
-0xbec0: 樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞
-0xbee0: 鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾
-0xbfa0: 拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹
-0xbfc0: 神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図
-0xbfe0: 逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾
-0xc0a0: 澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西
-0xc0c0: 誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折
-0xc0e0: 窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線
-0xc1a0: 繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽
-0xc1c0: 狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿
-0xc1e0: 操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎
-0xc2a0: 臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他
-0xc2c0: 太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋
-0xc2e0: 退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只
-0xc3a0: 叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻
-0xc3c0: 胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑
-0xc3e0: 逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵
-0xc4a0: 帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直
-0xc4c0: 沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪
-0xc4e0: 釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓
-0xc5a0: 邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転
-0xc5c0: 点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党
-0xc5e0: 凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到
-0xc6a0: 董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇
-0xc6c0: 得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇
-0xc6e0: 奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入
-0xc7a0: 如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳
-0xc7c0: 農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒
-0xc7e0: 楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦
-0xc8a0: 函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半
-0xc8c0: 叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃
-0xc8e0: 彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美
-0xc9a0: 鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評
-0xc9c0: 廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶
-0xc9e0: 斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服
-0xcaa0: 福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣
-0xcac0: 弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗
-0xcae0: 圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋
-0xcba0: 法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望
-0xcbc0: 棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡
-0xcbe0: 摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満
-0xcca0: 漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名
-0xccc0: 明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿
-0xcce0: 尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒
-0xcda0: 諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余
-0xcdc0: 誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑
-0xcde0: 沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃
-0xcea0: 痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両
-0xcec0: 寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙
-0xcee0: 類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯
-0xcfa0: 蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋
-0xcfc0: 論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕
-0xcfe0:
-0xd0a0: 弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂
-0xd0c0: 仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐
-0xd0e0: 俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲
-0xd1a0: 僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢
-0xd1c0: 兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩
-0xd1e0: 凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨
-0xd2a0: 辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸
-0xd2c0: 卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁
-0xd2e0: 呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨
-0xd3a0: 咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯
-0xd3c0: 喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲
-0xd3e0: 噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉
-0xd4a0: 圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔
-0xd4c0: 埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘
-0xd4e0: 壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩
-0xd5a0: 奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋
-0xd5c0: 媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺
-0xd5e0: 它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓
-0xd6a0: 屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗
-0xd6c0: 崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖
-0xd6e0: 巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏
-0xd7a0: 廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎
-0xd7c0: 彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡
-0xd7e0: 怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚
-0xd8a0: 悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍
-0xd8c0: 慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔
-0xd8e0: 憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛
-0xd9a0: 戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆
-0xd9c0: 拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵
-0xd9e0: 捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼
-0xdaa0: 據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵
-0xdac0: 收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲
-0xdae0: 昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼
-0xdba0: 曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉
-0xdbc0: 枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲
-0xdbe0: 梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍
-0xdca0: 棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙
-0xdcc0: 楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權
-0xdce0: 槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣
-0xdda0: 檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉
-0xddc0: 歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳
-0xdde0: 麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾
-0xdea0: 沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵
-0xdec0: 淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎
-0xdee0: 滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌
-0xdfa0: 漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔
-0xdfc0: 濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋
-0xdfe0: 烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼
-0xe0a0: 燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆
-0xe0c0: 狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳
-0xe0e0: 玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱
-0xe1a0: 瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩
-0xe1c0: 畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾
-0xe1e0: 痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰
-0xe2a0: 癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈
-0xe2c0: 眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇
-0xe2e0: 矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬
-0xe3a0: 磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕
-0xe3c0: 秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈
-0xe3e0: 窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐
-0xe4a0: 筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴
-0xe4c0: 篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤
-0xe4e0: 籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆
-0xe5a0: 紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇
-0xe5c0: 綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃
-0xe5e0: 縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺
-0xe6a0: 罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮
-0xe6c0: 羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢
-0xe6e0: 聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋
-0xe7a0: 隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂
-0xe7c0: 臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟
-0xe7e0: 艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙
-0xe8a0: 茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨
-0xe8c0: 萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆
-0xe8e0: 葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈
-0xe9a0: 蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊
-0xe9c0: 蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩
-0xe9e0: 蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙
-0xeaa0: 蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑
-0xeac0: 蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰
-0xeae0: 袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞
-0xeba0: 襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃
-0xebc0: 訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳
-0xebe0: 諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫
-0xeca0: 譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍
-0xecc0: 貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖
-0xece0: 赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊
-0xeda0: 蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱
-0xedc0: 軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗
-0xede0: 轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸
-0xeea0: 遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛
-0xeec0: 鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛
-0xeee0: 釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮
-0xefa0: 錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓
-0xefc0: 鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘
-0xefe0: 閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞
-0xf0a0: 陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈
-0xf0c0: 霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋
-0xf0e0: 鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰
-0xf1a0: 顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐
-0xf1c0: 饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀
-0xf1e0: 騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷
-0xf2a0: 髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠
-0xf2c0: 鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤
-0xf2e0: 鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈
-0xf3a0: 鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯
-0xf3c0: 鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨
-0xf3e0: 黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠
-0xf4a0: 堯槇遙瑤凜熙
-0xf4c0:
-0xf4e0:
-0xf5a0:
-0xf5c0:
-0xf5e0:
-0xf6a0:
-0xf6c0:
-0xf6e0:
-0xf7a0:
-0xf7c0:
-0xf7e0:
-0xf8a0:
-0xf8c0:
-0xf8e0:
-0xf9a0:
-0xf9c0:
-0xf9e0:
-0xfaa0:
-0xfac0:
-0xfae0:
-0xfba0:
-0xfbc0:
-0xfbe0:
-0xfca0:
-0xfcc0:
-0xfce0:
-0xfda0:
-0xfdc0:
-0xfde0:
-0xfea0:
-0xfec0:
-0xfee0:
-0xffa0:
-0xffc0:
-0xffe0:
diff --git a/ext/Encode/t/table.utf8 b/ext/Encode/t/table.utf8
deleted file mode 100644
index 1401b8928e..0000000000
--- a/ext/Encode/t/table.utf8
+++ /dev/null
@@ -1,294 +0,0 @@
-0x0020: ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >
-0x0040: @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^
-0x0060: ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
-0x8ea0: 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔 鐔
-0x8ec0: 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓 鐓
-0x8ee0:
-0xa0a0:
-0xa0c0:
-0xa0e0:
-0xa1a0: 鐚鐚誌鐚鐚鐚卒鐔即鐚常殖鐚帥純障篁錫
-0xa1c0: 鐚若鐔モ鐚鐚鐚誌悉鐔鐔鐚賊
-0xa1e0: 歎鐚鐚鐚р癌属霞鰍鐃ワ蔵贈鐚鐚鐚鐚鐚則
-0xa2a0: ≠鰍霞盾錫祉
-0xa2c0: р測 モ
-0xa2e0: ≠盾汲 謂‖
-0xa3a0: 鐚鐚鐚鐚鐚鐚鐚鐚鐚鐚
-0xa3c0: 鐚¥滋鐚o爾鐚ワ痔鐚э示鐚鐚鐚鐚鐚鐚鐚鐚逸識鐚駕竺鐚器宍鐚駈七鐚醐執鐚
-0xa3e0: 鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔
-0xa4a0:
-0xa4c0: <≪cゃャс違宴蚊潟眼泣吟激吾鴻冴祉若純
-0xa4e0:
-0xa5a0: <≪cゃャс違宴蚊潟眼泣吟激吾鴻冴祉若純
-0xa5c0:
-0xa5e0: <≪cゃャс違宴蚊潟眼泣
-0xa6a0: 痢裡里離陸律率立
-0xa6c0: 留硫粒隆竜龍侶慮旅虜了亮僚両凌
-0xa6e0:
-0xa7a0: 弌丐丕个丱丶丼丿乂乖乘亂
-0xa7c0: 豫亊 舒弍于亞亟亠亢亰亳亶从仍仄
-0xa7e0: 仂仗ム
-0xa8a0: も癌錫b鰍獅撃垂謂
-0xa8c0:
-0xa8e0:
-0xa9a0:
-0xa9c0:
-0xa9e0:
-0xaaa0:
-0xaac0:
-0xaae0:
-0xaba0:
-0xabc0:
-0xabe0:
-0xaca0:
-0xacc0:
-0xace0:
-0xada0:
-0xadc0:
-0xade0:
-0xaea0:
-0xaec0:
-0xaee0:
-0xafa0:
-0xafc0:
-0xafe0:
-0xb0a0: 篋紲水紮狗∵笈腥≧献薇究ф≧怨紮脂4腟∝蕎藪
-0xb0c0: 膕茴桁綺究罅鋌ヤ篏箴峨し紮紲絨井罎榊亥Щ膓膩
-0xb0e0: 茵h阪私篋ュ臥脾筝紕掩頃悟┣薜医遵≦紮糸蕋我繰よ
-0xb1a0: ∫育糸勀靸処薺腦坂腆惹研罨薜糸Дゥ羌篋
-0xb1c0: 画馿≦九医襲恰羂御崖羇腥頑沿荅羔牙薈茗莇我ュ
-0xb1e0: 医絎翫散ゥ吚何羲睡区藉紂惹ュ劫ぎ絅ュ綽
-0xb2a0: 惹堺┴罨ф雁膺茱藉藉藥絏≧糸絮区罅句>篆阪御羝腥割篁
-0xb2c0: 篌巡勝篏喝紊鎏絎九∞倶羃括胼胼丞┝膊沿決茯峨
-0xb2e0: 菴篆絣肢ヨ処乗蕕薈篁篌茹e紂紕綮糸辱∽
-0xb3a0: 薛罌井儀亥腟笈ヨ拷莢怨上喝喝网羔腆茵荅臥ァ薨御規薤
-0xb3c0: f粋綮≧号惹御紫牙∈腥荀茹莎莠i絖絏恰ソ蕁蕁膃
-0xb3e0: 罘炊狗羹峨井羇紙羯茲莉筝薜劫嚱罔咲腴臥藉∵
-0xb4a0: 膕ュ箙鞘絲у兄紮絎絎絲綛峨更ff丈∽罅罍堺
-0xb4c0: 羆羲∽羹亥g腴睡∞亜膩膽句唇荀活莢∫ラ蕕筝後
-0xb4e0: 綏ゥ弱鴬膺茣蕁蕁篌篌怨阪絳絲絏絽綛上堺∽罍罍
-0xb5a0: 罘絽井羂羆順睡絖g膣緇処頥莢頑儀荵莠蕋∫薔寂遵絋絎罨榊
-0xb5c0: 腑臂肢取井ャ罅罘荅亥ф級翫∵筝箙篁篌後綣
-0xb5e0: 醇羆我械悟腥句膃膣膤丞畿хサ絮綏羝荐沿御胼薛篋篋篋
-0xb6a0: 箴箴腴九怨九≦水û紜絣≦七綵罘羈梧
-0xb6c0: ♂翠薊篁医絨罐絮我サ罅膕ゅ綏冗ゆf順雁胼順膩壕茵
-0xb6e0: 茗壕箙九ュ榊荳薈薈薈傑亥阪九筝我у絮
-0xb7a0: 腦羃頑宗腦膕膵井峨荐臂よ≦茴腑篆上
-0xb7c0: 絅綵√究倶фイ堺罅羝腮順鎧腟膓膵臀荐荅h荵初藏梧
-0xb7e0: 羶罅罨羆堺腥雁茵荐f篁九劫ュ弱後eу絆綮堺我御恰
-0xb8a0: 罎罔順隋腟合荀茗莖∵i級咲薑藕後ウ綛糸痔羝羣憟
-0xb8c0: 荐茫咲箙ゅ弱阪絖ゅ訓綺綣ф御羚膤茴頑∴∴佈茯莊潔蕁ч篋
-0xb8e0: 篌上┓緇緇≧罌ф腆茯茯よ潔箙薇篋や充箴劫上e
-0xb9a0: √ソ絖絖絎鎴ュ熊綏桁晃綺綺綺桁ァ紙贋≧罕羆
-0xb9c0: 羌羝羣牙隋腮睡膣膣腟膓沿沿茵茵∴莢∵骸級援翠守
-0xb9e0: 薤蕭藉糸垸紕傑莟莉藝劫糸順潔藥羲亥綽醇薨莨
-0xbaa0: 罩ら篁医ゅ⊂紿号掩祁膣肴薛篋篏綉綏綏紙括荅
-0xbac0: 茖綺ф球紂絋糸医秋。醇恰初腑膣域茖莠
-0xbae0: 臀莢≦翫堺翫峨主薹坂丈窮膈膣∫罅藪膃劫
-0xbba0: 絲倶罧肴薇藪炊筝絮掩fg膾莅
-0xbbc0: 檎罧篁篁篌坂戎阪夔兂e紕紮紮紮水絮絽絽綽絖醇
-0xbbe0: 罩紙腑腱膤悟膣∵活荅荅荅茯茫莖莖蕋惹篋篌寂絖絲堺
-0xbca0: 罨≧羃紫丞順脾腓肴活莨羆藕水顑藉腴肴燦絎筝偌桁け絆絎ゆ羚
-0xbcc0: 乗蟹絎膀我頑絮∴膰絨莎腓丞茗荵阪虻
-0xbce0: ュ綣掩剛源絎掩腮莇i薤絲炊罔合喬
-0xbda0: 絎絨怨篆丈寛腱腱腟膵膺茵茱画莵頑鹿演篁篏緇
-0xbdc0: 羆羝g研紊絎炊腑膰膕紂丞肴菴遺絣紙ョ腴h薈水緇罐罧
-0xbde0: 羣羹ょ丞綏♂級羝綺句臀我梧決後絅喝鏅らゅ桁
-0xbea0: 怨絅絋上┝絎球絨鎞絨綺綺綮綵井炊傑倶
-0xbec0: 罔罔究下羔羝羚主х隋腓腑ョО腴膃膕х換茵茖活荐取荅活院莖
-0xbee0: 冗筝筝筝箙医翫絳√幻丈≧羌句括h梧臥檎怨顔
-0xbfa0: 罎罧膵決画Е蕋莨怨飴篌娯拭箴球紲絲絲綽井罍网羌御訓括
-0xbfc0: 腑腱膣活h荀荐肴昆莨臥篋坂紂球絨絨処荐菴i膃ヨ√
-0xbfe0: 劫絽ユィ羂雁∞膺茵育蕭經綉井∵協罎茖
-0xc0a0: 羮阪娯九√緇ф炊贋贋2罩f牙膕乗紕域処タ
-0xc0c0: 茯茫腮糸賢ユ括膠膰乗莢莎よ掘莵腆・
-0xc0e0: 腦膀茯腟区篁絎e絨綏井贋羌羇羹醇腥睡膩
-0xc1a0: 膵臂肴壕荅莖莊級檎潔藪羲悟九胼膵括紂絏ェ丈
-0xc1c0: 腓腑腱膕膣腟荐顔脂♂у球√紕絅遵絮ゅf恰
-0xc1e0: 劫沓罕罕醇ヤ悟膤膩靛∴取肢莎育薑鍽
-0xc2a0: 笈篆翫恰羝莇渇篆絮莖靛茴倶絖絖絨篁
-0xc2c0: 紊羆域上絋ユ井究薈薑篏絲乗絏怨遣緇贋炊外羯粋茴
-0xc2e0: 藥薇篁e伾ぇ膃蕁薹号у絎羃∽侵∵御茫乗後ц後
-0xc3a0: 篏莨医オ怨圭腴莨炊莪欠檎罔処遺弦「罩羞≧腴膊膓
-0xc3c0: 茯e綣丈罟罧窮決ょュ医ユ堺雁臀頑薤括腴合
-0xc3e0: 腱腦九∞筝篁峨綽醇惹掩絵茵決┿渇罔ц莢筝絲
-0xc4a0: 絽絽喝綣綣球繍緇贋我∽羹榊肴頑壕梧区粋莇莊渇潔薐ュ
-0xc4c0: 羃莖ョ恰乾紜罎罕菴初紂エ罕私羲莨肢膓顔罎炊衆紕桁膣
-0xc4e0: i挟篋篏球莢ゅ絽綺綺綮桁究堺罌羆腆胼腮膩荐茫莵
-0xc5a0: 檎藜羈ユ∽究惨膃羣阪峨捷よ菴後゛紊絮綺羞紫莢取拶
-0xc5c0: 剛罧炊庄育糸球絋絮緇羝∞肢莖初ョ阪綺絅贋
-0xc5e0: 紂紂絅絎絣九惹掩罌惹羞羚羔綵腑欠膈膈膤腟怨
-0xc6a0: hよ茗莟荼狗薑育絨ф羇括ヨ頑絣藉
-0xc6c0: 緇緇恰合g睡ゆ茯罘≦悟罎翫薐区絲後丑羃莟
-0xc6e0: 絅e箙茗咲罐∫Υ膰桁罐荵f篋絨弱菴莖劫賛ヤ抗
-0xc7a0: 絋絨翠篁糸綽茯羶∞Π腑√ц援怨拘綽究紙膕箙綮寂∽羶膣処
-0xc7c0: 莨画ゅ郡荀傑晦羇丞句翫臀笈薤篆喝肴而劫
-0xc7e0: 罐括ょ処卸紕画睡Гц篌ュ閿順膕区菴羲膰ォ薈藝
-0xc8a0: 順援_膊梧膈罠綛∴∽咲蕭篌臀井膈ラ芥阪ら寂軸ゅ
-0xc8c0: 絽炊鮎羆膵莢膀蕋醇ょ絋
-0xc8e0: 綵惹我号罸羈牙腆腱膩臀決ヨ←茯壕音翠蕋罔膂後絨上小罸窮臂
-0xc9a0: 藜紙腮合蕭綵偒綣弱∝惹:紮紵膣乗篆球終罔羂傑∝エ茵荅
-0xc9c0: 綮腱画薜綵羌莢ц紙銀篁紊紿絲絽綺
-0xc9e0: ф羌句茘莢莖莎顔箴罩∴絨罐蘂肴篌緇綛
-0xcaa0: 胼壕荀羞球羃娯藪糸翫恰ゆ絅膕膤膣井筝篏球球綛
-0xcac0: 綣筝初膠渇糸腆уョヨ膊鎀膀膩莨肴箴水紲綣篆
-0xcae0: 罩茖莠腥紜罸膂粋d晋怨絎絣医劾經綺掩ф丈号
-0xcba0: 羈羈∞合牙見活茲荐莟蕋初崖薺箙鋋≦絋絽遵綽炊贋
-0xcbc0: 罍膣∴茗莢莢翠冗峨紜我雁х腥羃≧綛絅膺糸
-0xcbe0: 脾薛藝糸絋号ф罸罕綛藪冗罅篋篆e号羃菴箴膵藝推∽
-0xcca0: 羲恰薛綏括絏絲羚腮絋膕羂紊∝∞ч機罎紿水ュ
-0xccc0: 菴潔薐翫И羯罍膓睡桑∫査御─絋絖罸牙恐我藥√
-0xcce0: 絨ゆ紫云莢医句箙九肴狗綣ョ√綵合荐活活羃合
-0xcda0: 茫莠後篏絎ュ構羚ф句欠援茖茯級紊篋篏
-0xcdc0: 茯莠翠綛弱絎劫左寱罐罕羇羣句腦臂荀茗∴ラ初丈
-0xcde0: 羃羌雁膺惹臂肴8ヨア守傑腟∴初箙怨球罨羶荀у鎡ユ罌
-0xcea0: ∵頯♂∫後腴ュ羌羣隋膕腴蘊箴倶篋篋筝
-0xcec0: 絲罌羔主腮膤ц茫守級膩羞活莠i藝紂羔
-0xcee0: 蕁篁や雫箴桁怨矯イ腓取顔潔狗藝藹∽罩翫g茖綮羲g膂丞郡
-0xcfa0: i薛罠莖莊峨翫綮綣罐惹羌羲∝主乗藝胼
-0xcfc0: 茫荅掩莖薹俄篋薜荅罎羚丞
-0xcfe0:
-0xd0a0: 綣筝筝筝筝延原筝寂舷箙箙箙篋篋莟篋綣篋篋篋篋篋≫紺篋割唆篁篁篁篁篁
-0xd0c0: 篁篁篁篁隙篏篌遺篏篏篏篏銀箴鋐篏私秋篏遺篏箴箴篆篆篆篆篆篆篆篆
-0xd0e0: 篆ュュ篌篆九≦篆鞘侵後翫
-0xd1a0: 喝ュe劫球≦阪桁弱糸水
-0xd1c0: ゅ√喝怨峨医球遵
-0xd1e0: 医球上у喝劫翫喝水遵怨莨
-0xd2a0: 莨у弱球e蕋喝球後劫後e怨喝
-0xd2c0: 筝紊糸桁ヲ・ョーカ膂主寯
-0xd2e0: 弱九球怨桁医糸九√後ュ
-0xd3a0: ゅ上弱ュ遵阪√劫e後喝
-0xd3c0: 糸上弱ゅ桁上遵劫翫九
-0xd3e0: ゅュ九翫弱劫水
-0xd4a0: 桁後糸≦水喝ゅ医
-0xd4c0: e紂峨≦、紂紂井紂遵々紜紜劫紜紜阪紜糸後〓紕紕紕紕紕紕
-0xd4e0: 紕紕ゅ紕紕阪9紕糸弱遵紊紊紊罌紊ュが紊紊峨じ紊丞絅絅絅絅絅絅√絅уガ絅
-0xd5a0: 絅後絋篏箴絋eΣ紮紮紮絋紮紮紲ュ紲紲紲紲紿紿紿紲球╋紿√紵紵弱上
-0xd5c0: 紵遵e絆絆絆絆阪糸絳絳絳峨絳絳九上絖絖絖絖絖絖絖ュ絖医喝球御絖
-0xd5e0: 絎絎絎後絲絲絲絲絲ゅ絲√絲ュ絲医九喝絨絨絨絨絨絨√姶絨後姐絮絮絮絮
-0xd6a0: 絮絮鎕怨卯絮箙√蔚絮劫絏絏絋絏絏糸俺絏弱卸絣絏上絣絣絣遵該絣絛絣經經經
-0xd6c0: 經經經經經√經經綉綉綉綉綉綉喝偽絛絛絛絛√絛絛絛遵絛桁脅綏綏綏綏綏
-0xd6e0: 綏綏峨卦絽絽絽絽絽絽九厳綛綛綛綛綛綛綛綛√垢綛綛球攻綛咲瑳綛水綮綮綮綮綮
-0xd7a0: 綮綮e綮綮綮√察綮綮綮綮怨山綮医惨綮後讃綣綣綵綵綣綣綣綣綣綣後綵綵綵
-0xd7c0: 綵綵綵綵綵≦臭綵喝酬緇緇綵水緇緇緇緇緇緇緇緇緇緇弱綽糸燭綽後娠綽喝真
-0xd7e0: 掩堺傑fゆф
-0xd8a0: ф≧御翫唇醇究倶傑贋堺≧紙掩
-0xd8c0: 丈ф炊惹贋醇恰傑贋ユ掩究
-0xd8e0: 傑堺臀号f倶堺贋炊醇惹丈
-0xd9a0: ≧井我恰f惹丈紙炊
-0xd9c0: 掩ф究丈ォ倶」オ
-0xd9e0: セf嚱贋倶ф倶ユ
-0xdaa0: 紙掩ц≧f倶贋我堺醇ゆf贋
-0xdac0: 倶悟我御莅傑≧掩
-0xdae0: 紙恰究倶贋ゆф∽井号丈
-0xdba0: 御炊井究傑ч御炊倶御傑fゆ
-0xdbc0: 惹≧傑贋恰御ゆ∽号ф罅罅罅
-0xdbe0: 罌恰罅罅f〃罅炊罌閄罌罌罌罌罟罌号ヾ罌究罌堺閄罅丈罍罎罍罎∽う罍≧罍
-0xdca0: 罍罍ф罎倶罎罍罍fぅ罍号罍罎罎罎罎fぁ罍罐号シ罐罐御カ罐罐丈ギ罎号ゴ罎醇
-0xdcc0: 罐≧罐网罐网我Ξ罕网炊罕网丈絲罕罕网紙网ф┏网网网网网贋罕罔罔罕炊
-0xdce0: 罕我Ё罔网掩罕罔罕罔罔罠罔f罘罔罘我╋罘御罘∽罘罘罔御│罟罟罟罟罟∽
-0xdda0: 罟罟紙罠罟御恰罠罠罠罟罠罠罠紙罠堺罨薔掩罨御欠罨拷罩罩罩
-0xddc0: 罩罩罩罩罩≧御号炊罧罧罧罧罧罧罧ゆ罧罧罧我掩恰傑惹罸罸罸罸罸罸
-0xdde0: 藝丈羂羂羂羂ゆ娃羆羆羆∽迂羃羃羃羃羃羆丈烏羆恰羃羈羈掩羃醇羈羈羃羃掩仮
-0xdea0: 羃堺羈羈羈羇茵羇倶勧羇醇憾羇羇究干羇羇羌f羌ゆ羌号羔羔羶ゆ羞号羝羔
-0xdec0: 羞羔御羞羞羞羞羞羞羞堺羞ゆ羞羞羝羚羝羝羚我羝丈牽羚羝羚倶羝羚羝堺
-0xdee0: 羯炊羝御羣羣羯羣傑羣醇痕羯羣我羯羣闒ユ羣羹羲羯羯御讃羲炊参羲掩晒羲我
-0xdfa0: 羲丈羯傑羹堺集羮羮羹羹羶恰臭羮羹惹羮羮羶羹羮恰升羮≧召羮号羮羶羶羶羶
-0xdfc0: 羶掩信羶羶榊闞丞羹雁亥丞牙g援悟括
-0xdfe0: 順ョ∝紫合丞х窮
-0xe0a0: 合睡亥牙紫主睡雁丞∝х合牙
-0xe0c0: ∝∞合桁雁ョ丞騌亥悟窮紫榊ウ
-0xe0e0: サョ∝ョ夝牙榊睡亥g句丞х
-0xe1a0: gх牙亥援悟欠主
-0xe1c0: х悟句雁ョg括窮順悟主援g
-0xe1e0: 主亥榊牙括х∞∝ょ雁亥紫∞∝х
-0xe2a0: 牙句悟主亥雁悟合榊∞ョх紫
-0xe2c0: ょョ欠悟ョ睡丞合亥句合睡主順紫
-0xe2e0: g主腓腓隋腆隋雁隋主腆腆g窮→腆脾脾脾脾腆丞⊆脾脾脾
-0xe3a0: 脾х脾順4腓腓腓腓腓腓腑腑腑腑腑腑腑腑榊タ胼胼胼ч胼胼胼括合榊腱
-0xe3c0: 腱腱∞В腮腮腮腮腮腮胼腮援┿腮丞┠腥腥腥腥∞∝蘊腥亥合順腦腦腦腦腦腴
-0xe3e0: 腦句腴腦翠腴腴腴腴霱腴腴腴腴腴∞∝腴腴亥膃霳膃膃括膃膃膃窮膃句
-0xe4a0: 膈榊膈膃膈膈膈窮ョ雁х亥援膈膊膊膊膊膊膊膊膊膊靁膊膀膀膀膀靃
-0xe4c0: 膀膀膂膂膀膀ョ膂膂膂膀括欠膂膀句娃膂х葵膂膂欠茜膂順膠膠膠靏膠膠膠膠
-0xe4e0: 膠ョ卯膠窮膕膕ょ沖膕∝黄膕∞襖膕括臆膕援荻膕合化膤膤膤膤膤膤膤∫紫劾膤牙慨膤句該膣
-0xe5a0: 膣膣膣膣腟腟膣膣牙歓膣窮腟括腟腟牙季腟腟靚g膓腟膓靚順膓榊峡膓g教膩
-0xe5c0: 膓膰順侠膓膩膓悟膓亥膩膩ょ膩紫群膩∞膰膰g検膰膰援膰膰膰∝膵膰紫元膰合
-0xe5e0: 膰牙減膵х膵膵膵膵膵合巧膵膵主校膾膩膵処小膵睡膾膾膾膾膾膾膾膾膾膾膽悟失
-0xe6a0: 臀臀臀臀臀臀臀臀臀臀臀臀臀臀х集臂臂臂臂臂臂臂臂臂臂臂g少臂牙捷臂
-0xe6c0: 臂梧援膺膺膺膺膺∞職膺膺括森蕋∴粋肢
-0xe6e0: 活画域区壕処粋ヨ沿h
-0xe7a0: 乗取沿ヨ頑よh域笈乗梧処
-0xe7c0: ц肴肢乗梧活
-0xe7e0: ∵沿決梧乗肢∴h頑活肴肢壕
-0xe8a0: 笈頑画沿壕ェ「h取オ活笈ィ
-0xe8c0: ű恡埈兓∵ス梧嶒取決
-0xe8e0: 壕笈∵壕粋肢∴∴粋頑取h
-0xe9a0: よ決乗肴壕ヨ壕
-0xe9c0: 乗肴∵域粋箙ц沿h区域h
-0xe9e0: 肢壕頑粋決肢ヨ梧頑
-0xeaa0: h∵処活肢画乗区決
-0xeac0: ∵∴沿区壕ц肢茵茵茵茵茵∵゛茴茵乗茵笈―茴笈_茴茴茴茴茴茴∵茴よ
-0xeae0: 茴沿茖茖茖茖茖茖壕茖取4茖茖画茲茲茲茱茲茲ヨお茲茱茱茲肢ざ茲梧茲茱茱
-0xeba0: 茱茱よキ茱茱茱頑シ茱乗荀荀荀荀荀∴Ι荀荀荀荀画肴処粋茹茹茹茹цТ茹梧
-0xebc0: 荐荐荐荐荐ヨ╋荅荅荅荅荅荅取荅荅∵茯茯茯茯∴茯ヨ茯茯h茫茫茫茫茫
-0xebe0: 茫よ沿茫茫∵決茫茗茗茗茫∴茗茗茗茗渇茗茗茗乗茘茘茘顑茘茘茘茘茘
-0xeca0: 茘茘茘茘頑処莅莅莅莅莅莅莅莪肴莪粋莟莟莟莟莟∵卯莟梧浦莢莢莢莢莢
-0xecc0: 莢莟取莢莢莢処臆莢活荻莢区莖莖よ械莖莖処該莖肢茣茣茣茣顢茣藹茣莖茣茣
-0xece0: 莎莎沿騎莇莇莊莇乗矯莊顦莊莊莊莊莊莊莊莊h啓荼荼莊粋荼荼荼莵荼笈鍵荼頑
-0xeda0: 莵莵莵莵莵莵莵よ荼莵h莵区慌莵取荳荳荳荳荳荳荳荳荳荳荳∴根荳域荳
-0xedc0: 荵荵荵荵荵h纂荵肢捌荵乗莠莠莠莠莠莠莠莠莠莠莠活嫉莠壕莉莠乗莉莉莉莉
-0xede0: 莉∵州莉よ莨莨h将莨莨決菴ヨ植菴菴菴顔菴壕榛♂ч狗級壕晋
-0xeea0: 冗狗臥初演級∫ゆ
-0xeec0: 臥育iラ渇臥∫級顔咲♂
-0xeee0: 級狗翠ら翠拷潔咲
-0xefa0: ∫i咲級脂守ーャュケラら
-0xefc0: 狗級♂咲∫育級潔初守冗翠
-0xefe0: ч守脂拷冗羶狗♂ラ∫♂潔
-0xf0a0: 臥ч演臥育顔狗檎拷茱拷
-0xf0c0: ら育拷初冗ら演拷守咲
-0xf0e0: i渇顔藹牙狗級檎ら♂潔初蕁馹蕁蕁蕁
-0xf1a0: 蕁演ヾ蕁渇→蘂蘂演狗蕋蕋蕋蕋蕕蕕蕕蕕蕕蕕♂蕕蕕ら蕕蕕蕕初ぞ薀薀薀薀
-0xf1c0: 薀薀薀薀薤薤薤ラΝ薤薤守薈薈薈薈薈薈薈演Р薈脂Ц薑薑駔薈∫薑薑潔薊薊
-0xf1e0: 薑冗薊薊薊薊薊∫ラら薊薊薨薨育守蕭駜蕭蕭蕭蕭蕭∫i蕭蕭蕭蕭顔演
-0xf2a0: 蕭脂薔薔薔薔∫iラч薔薔薔薔薔臥薛薛駧薛薛薛薛顔藪藪藪藪藪藪
-0xf2c0: 藪顔薇藪拷薇駫薇薇i∫ら薇♂虻薇臥演育薜薜薜薜薜薜薜薜薜薜薜薜ラ阿
-0xf2e0: 薜育薜臥薜冗蕷蕷ч蔚蕷檎皆薐薐育藉薐藉藉藉藉藏藉i薺藉藉薺藉翠款薺薺
-0xf3a0: 薺薺薺ら薺薺薺臥藏藏薺薺咲藏ら匡藏臥薹藏脂狂藏咲薹騂薹薹薹檎窪薹薹
-0xf3c0: 藐藐藐藕級更藕初藝藝藝藝藝藝藝藝ラ懇藝檎昏藝♂藥藥騌藥藥藥藥藥藥ラ雑
-0xf3e0: 藥顔散藥潔珊藥脂纂藥初藜潔藜♂蒔藜冗藹藹藹i藹藹♂拾藹ч習藹藹潔讐藹狗蘊蘊
-0xf4a0: 罕ゅ
-0xf4c0:
-0xf4e0:
-0xf5a0:
-0xf5c0:
-0xf5e0:
-0xf6a0:
-0xf6c0:
-0xf6e0:
-0xf7a0:
-0xf7c0:
-0xf7e0:
-0xf8a0:
-0xf8c0:
-0xf8e0:
-0xf9a0:
-0xf9c0:
-0xf9e0:
-0xfaa0:
-0xfac0:
-0xfae0:
-0xfba0:
-0xfbc0:
-0xfbe0:
-0xfca0:
-0xfcc0:
-0xfce0:
-0xfda0:
-0xfdc0:
-0xfde0:
-0xfea0:
-0xfec0:
-0xfee0:
-0xffa0:
-0xffc0:
-0xffe0:
diff --git a/ext/POSIX/t/posix.t b/ext/POSIX/t/posix.t
index d73dae0745..a4d3792ddd 100644
--- a/ext/POSIX/t/posix.t
+++ b/ext/POSIX/t/posix.t
@@ -92,7 +92,7 @@ SKIP: {
skip("_POSIX_OPEN_MAX is inaccurate on MPE", 1) if $Is_MPE;
skip("_POSIX_OPEN_MAX undefined ($fds[1])", 1) unless &_POSIX_OPEN_MAX;
- ok( &_POSIX_OPEN_MAX == 16 || &_POSIX_OPEN_MAX == 20, "The two allowed values according to susv2 and susv3" );
+ ok( &_POSIX_OPEN_MAX >= 16, "The minimum allowed values according to susv2" );
}
diff --git a/lib/Tie/Array.pm b/lib/Tie/Array.pm
index 1cc99b8980..6fdd258953 100644
--- a/lib/Tie/Array.pm
+++ b/lib/Tie/Array.pm
@@ -119,7 +119,7 @@ Tie::Array - base class for tied arrays
=head1 SYNOPSIS
- package NewArray;
+ package Tie::NewArray;
use Tie::Array;
@ISA = ('Tie::Array');
@@ -143,7 +143,7 @@ Tie::Array - base class for tied arrays
sub EXTEND { ... }
sub DESTROY { ... }
- package NewStdArray;
+ package Tie::NewStdArray;
use Tie::Array;
@ISA = ('Tie::StdArray');
diff --git a/lib/Tie/File.pm b/lib/Tie/File.pm
index 2b6c9a5db3..9fc7eab689 100644
--- a/lib/Tie/File.pm
+++ b/lib/Tie/File.pm
@@ -2,10 +2,10 @@
package Tie::File;
use Carp;
use POSIX 'SEEK_SET';
-use Fcntl 'O_CREAT', 'O_RDWR';
+use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX';
require 5.005;
-$VERSION = "0.13";
+$VERSION = "0.14";
# Idea: The object will always contain an array of byte offsets
# this will be filled in as is necessary and convenient.
@@ -102,7 +102,7 @@ sub STORE {
if (not defined $oldrec) {
# We're storing a record beyond the end of the file
- $self->_extend_file_to($n);
+ $self->_extend_file_to($n+1);
$oldrec = $self->{recsep};
}
my $len_diff = length($rec) - length($oldrec);
@@ -133,7 +133,7 @@ sub STORESIZE {
# file gets longer
if ($len > $olen) {
- $self->_extend_file_to($len-1); # record numbers from 0 .. $len-1
+ $self->_extend_file_to($len);
return;
}
@@ -145,11 +145,84 @@ sub STORESIZE {
delete @{$self->{cache}}{@cached} if @cached;
}
+sub PUSH {
+ my $self = shift;
+ $self->SPLICE($self->FETCHSIZE, scalar(@_), @_);
+ $self->FETCHSIZE;
+}
+
+sub POP {
+ my $self = shift;
+ scalar $self->SPLICE(-1, 1);
+}
+
+sub SHIFT {
+ my $self = shift;
+ scalar $self->SPLICE(0, 1);
+}
+
+sub UNSHIFT {
+ my $self = shift;
+ $self->SPLICE(0, 0, @_);
+ $self->FETCHSIZE;
+}
+
+sub CLEAR {
+ # And enable auto-defer mode, since it's likely that they just
+ # did @a = (...);
+ my $self = shift;
+ $self->_seekb(0);
+ $self->_chop_file;
+ %{$self->{cache}} = ();
+ $self->{cached} = 0;
+ @{$self->{lru}} = ();
+ @{$self->{offsets}} = (0);
+}
+
+sub EXTEND {
+ my ($self, $n) = @_;
+ $self->_fill_offsets_to($n);
+ $self->_extend_file_to($n);
+}
+
+sub DELETE {
+ my ($self, $n) = @_;
+ my $lastrec = $self->FETCHSIZE-1;
+ if ($n == $lastrec) {
+ $self->_seek($n);
+ $self->_chop_file;
+ # perhaps in this case I should also remove trailing null records?
+ } else {
+ $self->STORE($n, "");
+ }
+}
+
+sub EXISTS {
+ my ($self, $n) = @_;
+ $self->_fill_offsets_to($n);
+ 0 <= $n && $n < $self->FETCHSIZE;
+}
+
sub SPLICE {
my ($self, $pos, $nrecs, @data) = @_;
my @result;
- $pos += $self->FETCHSIZE if $pos < 0;
+ {
+ my $oldsize = $self->FETCHSIZE;
+ my $oldpos = $pos;
+
+ if ($pos < 0) {
+ $pos += $oldsize;
+ if ($pos < 0) {
+ croak "Modification of non-creatable array value attempted, subscript $oldpos";
+ }
+ }
+
+ if ($pos > $oldsize) {
+ return unless @data;
+ $pos = $oldsize; # This is what perl does for normal arrays
+ }
+ }
$self->_fixrecs(@data);
my $data = join '', @data;
@@ -157,6 +230,7 @@ sub SPLICE {
my $oldlen = 0;
# compute length of data being removed
+ # Incidentally fills offsets table
for ($pos .. $pos+$nrecs-1) {
my $rec = $self->FETCH($_);
last unless defined $rec;
@@ -164,7 +238,7 @@ sub SPLICE {
$oldlen += length($rec);
}
- $self->_fill_offsets_to($pos);
+ # Modify the file
$self->_twrite($data, $self->{offsets}[$pos], $oldlen);
# update the offsets table part 1
@@ -187,6 +261,12 @@ sub SPLICE {
# that knows that the file does indeed start at 0.
$self->{offsets}[0] = 0 unless @{$self->{offsets}};
+ # Perhaps the following cache foolery could be factored out
+ # into a bunch of mor opaque cache functions. For example,
+ # it's odd to delete a record from the cache and then remove
+ # it from the LRU queue later on; there should be a function to
+ # do both at once.
+
# update the read cache, part 1
# modified records
# Consider this carefully for correctness
@@ -224,7 +304,8 @@ sub SPLICE {
}
@{$self->{lru}} = (@new, @changed);
- @result;
+ # Yes, the return value of 'splice' *is* actually this complicated
+ wantarray ? @result : @result ? $result[-1] : undef;
}
# write data into the file
@@ -256,24 +337,23 @@ sub _twrite {
# $bufsize is required to be at least as large as the data we're overwriting
my $bufsize = _bufsize($len_diff);
my ($writepos, $readpos) = ($pos, $pos+$len);
+ my $next_block;
# Seems like there ought to be a way to avoid the repeated code
# and the special case here. The read(1) is also a little weird.
# Think about this.
do {
$self->_seekb($readpos);
- my $br = read $self->{fh}, my($next_block), $bufsize;
+ my $br = read $self->{fh}, $next_block, $bufsize;
my $more_data = read $self->{fh}, my($dummy), 1;
$self->_seekb($writepos);
$self->_write_record($data);
$readpos += $br;
$writepos += length $data;
$data = $next_block;
- unless ($more_data) {
- $self->_seekb($writepos);
- $self->_write_record($next_block);
- }
} while $more_data;
+ $self->_seekb($writepos);
+ $self->_write_record($next_block);
# There might be leftover data at the end of the file
$self->_chop_file if $len_diff < 0;
@@ -324,7 +404,7 @@ sub _fill_offsets_to {
$self->_seek(-1); # tricky -- see comment at _seek
$rec = $self->_read_record;
if (defined $rec) {
- push @OFF, $o+length($rec);
+ push @OFF, tell $fh;
} else {
return; # It turns out there is no such record
}
@@ -391,14 +471,16 @@ sub _cache_flush {
# entirely populated. Now we need to write a new record beyond
# the end of the file. We prepare for this by writing
# empty records into the file up to the position we want
-# $n here is the record number of the last record we're going to write
+#
+# assumes that the offsets table already contains the offset of record $n,
+# if it exists, and extends to the end of the file if not.
sub _extend_file_to {
my ($self, $n) = @_;
$self->_seek(-1); # position after the end of the last record
my $pos = $self->{offsets}[-1];
# the offsets table has one entry more than the total number of records
- $extras = $n - ($#{$self->{offsets}} - 1);
+ $extras = $n - $#{$self->{offsets}};
# Todo : just use $self->{recsep} x $extras here?
while ($extras-- > 0) {
@@ -426,6 +508,17 @@ sub _bufsize {
$b;
}
+# Lock the file
+sub flock {
+ my ($self, $op) = @_;
+ unless (@_ <= 3) {
+ my $pack = ref $self;
+ croak "Usage: $pack\->flock([OPERATION])";
+ }
+ my $fh = $self->{fh};
+ $op = LOCK_EX unless defined $op;
+ flock $fh, $op;
+}
# Given a file, make sure the cache is consistent with the
# file contents
@@ -499,7 +592,7 @@ Tie::File - Access the lines of a disk file via a Perl array
=head1 SYNOPSIS
- # This file documents Tie::File version 0.13
+ # This file documents Tie::File version 0.14
tie @array, 'Tie::File', filename or die ...;
@@ -509,7 +602,12 @@ Tie::File - Access the lines of a disk file via a Perl array
$n_recs = @array; # how many records are in the file?
$#array = $n_recs - 2; # chop records off the end
- # As you would expect
+ # As you would expect:
+
+ push @array, new recs...;
+ my $r1 = pop @array;
+ unshift @array, new recs...;
+ my $r1 = shift @array;
@old_recs = splice @array, 3, 7, new recs...;
untie @array; # all finished
@@ -628,8 +726,35 @@ The C<tie> call returns an object, say C<$o>. You may call
$rec = $o->FETCH($n);
$o->STORE($n, $rec);
-to fetch or store the record at line C<$n>, respectively. There are
-no other public methods in this package.
+to fetch or store the record at line C<$n>, respectively. The only other public method in this package is:
+
+=head2 C<flock>
+
+ $o->flock(MODE)
+
+will lock the tied file. C<MODE> has the same meaning as the second
+argument to the Perl built-in C<flock> function; for example
+C<LOCK_SH> or C<LOCK_EX | LOCK_NB>. (These constants are provided by
+the C<use Fcntl ':flock'> declaration.)
+
+C<MODE> is optional; C<< $o->flock >> simply locks the file with
+C<LOCK_EX>.
+
+The best way to unlock a file is to discard the object and untie the
+array. It is probably unsafe to unlock the file without also untying
+it, because if you do, changes may remain unwritten inside the object.
+That is why there is no shortcut for unlocking. If you really want to
+unlock the file prematurely, you know what to do; if you don't know
+what to do, then don't do it.
+
+All the usual warnings about file locking apply here. In particular,
+note that file locking in Perl is B<advisory>, which means that
+holding a lock will not prevent anyone else from reading, writing, or
+erasing the file; it only prevents them from getting another lock at
+the same time. Locks are analogous to green traffic lights: If you
+have a green light, that does not prevent the idiot coming the other
+way from plowing into you sideways; it merely guarantees to you that
+the idiot does not also have a green light at the same time.
=head1 CAVEATS
@@ -675,11 +800,22 @@ suggests, for example, that and LRU read-cache is a good tradeoff,
even if it requires substantial adjustment following a C<splice>
operation.
-=head2 Missing Methods
+=head1 CAVEATS
+
+(That's Latin for 'warnings'.)
+
+The behavior of tied arrays is not precisely the same as for regular
+arrays. For example:
-The tied array does not yet support C<push>, C<pop>, C<shift>,
-C<unshift>, C<splice>, or size-setting via C<$#array = $n>. I will
-put these in soon.
+ undef $a[10]; print "How unusual!\n" if $a[10];
+
+C<undef>-ing a C<Tie::File> array element just blanks out the
+corresponding record in the file. When you read it back again, you'll
+see the record separator (typically, $a[10] will appear to contain
+"\n") so the supposedly-C<undef>'ed value will be true.
+
+There are other minor differences, but in general, the correspondence
+is extremely close.
=head1 AUTHOR
@@ -693,7 +829,7 @@ C<mjd-perl-tiefile-subscribe@plover.com>.
=head1 LICENSE
-C<Tie::File> version 0.13 is copyright (C) 2002 Mark Jason Dominus.
+C<Tie::File> version 0.14 is copyright (C) 2002 Mark Jason Dominus.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -718,21 +854,20 @@ For licensing inquiries, contact the author at:
=head1 WARRANTY
-C<Tie::File> version 0.13 comes with ABSOLUTELY NO WARRANTY.
+C<Tie::File> version 0.14 comes with ABSOLUTELY NO WARRANTY.
For details, see the license.
=head1 TODO
-C<push>, C<pop>, C<shift>, C<unshift>.
+Tests for default arguments to SPLICE. Tests for CLEAR/EXTEND.
+Tests for DELETE/EXISTS.
-More tests. (Configuration options, cache flushery. _twrite shoule
-be tested separately, because there are a lot of weird special cases
-lurking in there.)
+More tests. (Configuration options, cache flushery, locking. _twrite
+should be tested separately, because there are a lot of weird special
+cases lurking in there.)
More tests. (Stuff I didn't think of yet.)
-File locking.
-
Deferred writing. (!!!)
Paragraph mode?
diff --git a/lib/Tie/File/01_gen.t b/lib/Tie/File/01_gen.t
index 58c7a9732c..d69d232b67 100644
--- a/lib/Tie/File/01_gen.t
+++ b/lib/Tie/File/01_gen.t
@@ -77,7 +77,7 @@ sub check_contents {
# now check FETCH:
my $good = 1;
for (0.. $#c) {
- $good = 0 unless $a[$_] eq "$c[$_]\n";
+ $good = 0 unless $a[$_] eq "$c[$_]$/";
}
print (($open && $good) ? "ok $N\n" : "not ok $N # fetch @c\n");
$N++;
diff --git a/lib/Tie/File/04_splice.t b/lib/Tie/File/04_splice.t
index aae678f664..f8628a2e11 100644
--- a/lib/Tie/File/04_splice.t
+++ b/lib/Tie/File/04_splice.t
@@ -10,11 +10,10 @@
# Then, it checks the actual contents of the file against the expected
# contents.
-use lib '/home/mjd/src/perl/Tie-File2/lib';
my $file = "tf$$.txt";
my $data = "rec0$/rec1$/rec2$/";
-print "1..88\n";
+print "1..97\n";
my $N = 1;
use Tie::File;
@@ -137,6 +136,34 @@ check_contents("rec0$/rec1$/");
splice(@a, 0, 17);
check_contents("");
+# (89-92) In the past, splicing past the end was not correctly detected
+# (1.14)
+splice(@a, 89, 3);
+check_contents("");
+splice(@a, @a, 3);
+check_contents("");
+
+# (93-96) Also we did not emulate splice's freaky behavior when inserting
+# past the end of the array (1.14)
+splice(@a, 89, 0, "I", "like", "pie");
+check_contents("I$/like$/pie$/");
+splice(@a, 89, 0, "pie pie pie");
+check_contents("I$/like$/pie$/pie pie pie$/");
+
+# (97) Splicing with too large a negative number should be fatal
+# This test ignored because it causes 5.6.1 and 5.7.2 to dump core
+# NOT MY FAULT
+if ($] < 5.006 || $] > 5.007002) {
+ eval { splice(@a, -7, 0) };
+ print $@ =~ /^Modification of non-creatable array value attempted, subscript -7/
+ ? "ok $N\n" : "not ok $N \# \$\@ was '$@'\n";
+} else {
+ print "ok $N \# skipped (5.6.0 through 5.7.2 dump core here.)\n";
+}
+$N++;
+
+
+
sub init_file {
my $data = shift;
open F, "> $file" or die $!;
diff --git a/lib/Tie/File/07_rv_splice.t b/lib/Tie/File/07_rv_splice.t
index aaab1f7d6b..75c8a3af51 100644
--- a/lib/Tie/File/07_rv_splice.t
+++ b/lib/Tie/File/07_rv_splice.t
@@ -7,7 +7,7 @@
my $file = "tf$$.txt";
my $data = "rec0$/rec1$/rec2$/";
-print "1..45\n";
+print "1..48\n";
my $N = 1;
use Tie::File;
@@ -130,6 +130,22 @@ check_result();
@r = splice(@a, 0, 17);
check_result('rec0', 'rec1');
+# (46-48) Now check the scalar context return
+splice(@a, 0, 0, qw(I like pie));
+my $r;
+$r = splice(@a, 0, 0);
+print !defined($r) ? "ok $N\n" : "not ok $N \# return should have been undef\n";
+$N++;
+
+$r = splice(@a, 2, 1);
+print $r eq "pie$/" ? "ok $N\n" : "not ok $N \# return should have been 'pie'\n";
+$N++;
+
+$r = splice(@a, 0, 2);
+print $r eq "like$/" ? "ok $N\n" : "not ok $N \# return should have been 'like'\n";
+$N++;
+
+
sub init_file {
my $data = shift;
open F, "> $file" or die $!;
diff --git a/lib/Tie/File/14_lock.t b/lib/Tie/File/14_lock.t
new file mode 100644
index 0000000000..a771d8deef
--- /dev/null
+++ b/lib/Tie/File/14_lock.t
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+#
+# Check flock() feature
+#
+# This isn't a real test; it just checks to make sure we can call the method.
+# It doesn't even check to make sure that the default behavior
+# (LOCK_EX) is occurring. This is because I don't know how to write a good
+# portable test for flocking. I checked the Perl core distribution,
+# and found that Perl doesn't test flock either!
+
+use Fcntl ':flock'; # This works at least back to 5.004_04
+
+my $file = "tf$$.txt";
+my ($o, $n);
+my @a;
+
+print "1..4\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+# 2-4 Who the heck knows?
+open F, "> $file" or die $!;
+close F;
+$o = tie @a, 'Tie::File', $file, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+print $o->flock() ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+print $o->flock(LOCK_UN) ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+
+END {
+ 1 while unlink $file;
+}
+
diff --git a/lib/Tie/File/15_pushpop.t b/lib/Tie/File/15_pushpop.t
new file mode 100644
index 0000000000..76fe4c1653
--- /dev/null
+++ b/lib/Tie/File/15_pushpop.t
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+#
+# Check PUSH, POP, SHIF, and UNSHIFT
+#
+# Each call to 'check_contents' actually performs two tests.
+# First, it calls the tied object's own 'check_integrity' method,
+# which makes sure that the contents of the read cache and offset tables
+# accurately reflect the contents of the file.
+# Then, it checks the actual contents of the file against the expected
+# contents.
+
+use lib '/home/mjd/src/perl/Tie-File2/lib';
+my $file = "tf$$.txt";
+1 while unlink $file;
+my $data = "rec0$/rec1$/rec2$/";
+
+print "1..38\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+my $o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+my ($n, @r);
+
+
+
+# (3-11) PUSH tests
+$n = push @a, "rec0", "rec1", "rec2";
+check_contents($data);
+print $n == 3 ? "ok $N\n" : "not ok $N # size is $n, should be 3\n";
+$N++;
+
+$n = push @a, "rec3", "rec4\n";
+check_contents("$ {data}rec3$/rec4$/");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# Trivial push
+$n = push @a;
+check_contents("$ {data}rec3$/rec4$/");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# (12-20) POP tests
+$n = pop @a;
+check_contents("$ {data}rec3$/");
+print $n eq "rec4$/" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec4\n";
+$N++;
+
+# Presumably we have already tested this to death
+splice(@a, 1, 3);
+$n = pop @a;
+check_contents("");
+print $n eq "rec0$/" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec0\n";
+$N++;
+
+$n = pop @a;
+check_contents("");
+print ! defined $n ? "ok $N\n" : "not ok $N # last rec should be undef, is $n\n";
+$N++;
+
+
+# (21-29) UNSHIFT tests
+$n = unshift @a, "rec0", "rec1", "rec2";
+check_contents($data);
+print $n == 3 ? "ok $N\n" : "not ok $N # size is $n, should be 3\n";
+$N++;
+
+$n = unshift @a, "rec3", "rec4\n";
+check_contents("rec3$/rec4$/$data");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# Trivial unshift
+$n = unshift @a;
+check_contents("rec3$/rec4$/$data");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# (30-38) SHIFT tests
+$n = shift @a;
+check_contents("rec4$/$data");
+print $n eq "rec3$/" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec3\n";
+$N++;
+
+# Presumably we have already tested this to death
+splice(@a, 1, 3);
+$n = shift @a;
+check_contents("");
+print $n eq "rec4$/" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec4\n";
+$N++;
+
+$n = shift @a;
+check_contents("");
+print ! defined $n ? "ok $N\n" : "not ok $N # last rec should be undef, is $n\n";
+$N++;
+
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+sub check_contents {
+ my $x = shift;
+ local *FH;
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ my $open = open FH, "< $file";
+ binmode FH;
+ my $a;
+ { local $/; $a = <FH> }
+ print (($open && $a eq $x) ? "ok $N\n" : "not ok $N\n");
+ $N++;
+}
+
+END {
+ 1 while unlink $file;
+}
+
diff --git a/lib/perl5db.pl b/lib/perl5db.pl
index e48a9aa415..3365691a7e 100644
--- a/lib/perl5db.pl
+++ b/lib/perl5db.pl
@@ -23,6 +23,7 @@ sub eval {
local $saved[0]; # Preserve the old value of $@
eval { &DB::save };
if ($at) {
+ local $\ = '';
print $OUT $at;
} elsif ($onetimeDump) {
if ($onetimeDump eq 'dump') {
@@ -617,6 +618,8 @@ if ($notty) {
$header =~ s/.Header: ([^,]+),v(\s+\S+\s+\S+).*$/$1$2/;
unless ($runnonstop) {
+ local $\ = '';
+ local $, = '';
if ($term_pid eq '-1') {
print $OUT "\nDaughter DB session started...\n";
} else {
@@ -750,7 +753,7 @@ EOP
&eval;
}
print $OUT $stack_depth . " levels deep in subroutine calls!\n"
- if $single & 4;
+ if $single & 4;
$start = $line;
$incr = -1; # for backward motion.
@typeahead = (@$pretype, @typeahead);
@@ -778,6 +781,7 @@ EOP
local $SIG{__WARN__};
eval "\$cmd =~ $alias{$i}";
if ($@) {
+ local $\ = '';
print $OUT "Couldn't evaluate `$i' alias: $@";
next CMD;
}
@@ -785,11 +789,14 @@ EOP
$cmd =~ /^q$/ && ($fall_off_end = 1) && clean_ENV() && exit $?;
$cmd =~ /^t$/ && do {
$trace ^= 1;
+ local $\ = '';
print $OUT "Trace = " .
(($trace & 1) ? "on" : "off" ) . "\n";
next CMD; };
$cmd =~ /^S(\s+(!)?(.+))?$/ && do {
$Srev = defined $2; $Spatt = $3; $Snocheck = ! defined $1;
+ local $\ = '';
+ local $, = '';
foreach $subname (sort(keys %sub)) {
if ($Snocheck or $Srev^($subname =~ /$Spatt/)) {
print $OUT $subname,"\n";
@@ -1349,6 +1356,7 @@ sub sub {
print_trace($LINEINFO, -1, 1, 1, "$sub$al") )
: print_lineinfo(' ' x $stack_depth, "exited $sub$al\n")) if $frame & 2;
if ($doret eq $stack_depth or $frame & 16) {
+ local $\ = '';
my $fh = ($doret eq $stack_depth ? $OUT : $LINEINFO);
print $fh ' ' x $stack_depth if $frame & 16;
print $fh "list context return from $sub:\n";
@@ -1368,6 +1376,7 @@ sub sub {
print_trace($LINEINFO, -1, 1, 1, "$sub$al") )
: print_lineinfo(' ' x $stack_depth, "exited $sub$al\n")) if $frame & 2;
if ($doret eq $stack_depth or $frame & 16 and defined wantarray) {
+ local $\ = '';
my $fh = ($doret eq $stack_depth ? $OUT : $LINEINFO);
print $fh (' ' x $stack_depth) if $frame & 16;
print $fh (defined wantarray
@@ -1526,6 +1535,8 @@ sub cmd_b_load {
}
break_on_load($_) for @files;
@files = report_break_on_load;
+ local $\ = '';
+ local $" = ' ';
print $OUT "Will stop on load of `@files'.\n";
}
@@ -1566,7 +1577,10 @@ sub break_on_line {
}
sub cmd_b_line {
- eval { break_on_line(@_); 1 } or print $OUT $@ and return;
+ eval { break_on_line(@_); 1 } or do {
+ local $\ = '';
+ print $OUT $@ and return;
+ };
}
sub break_on_filename_line {
@@ -1611,7 +1625,10 @@ sub cmd_b_sub {
if not defined &$subname and $s !~ /::/ and defined &{"CORE::GLOBAL::$s"};
$subname = "main".$subname if substr($subname,0,2) eq "::";
}
- eval { break_subroutine($subname,$cond); 1 } or print $OUT $@ and return;
+ eval { break_subroutine($subname,$cond); 1 } or do {
+ local $\ = '';
+ print $OUT $@ and return;
+ }
}
sub cmd_B {
@@ -1620,7 +1637,10 @@ sub cmd_B {
if ($line eq '*') {
eval { &delete_breakpoint(); 1 } or print $OUT $@ and return;
} elsif ($line =~ /^(\S.*)/) {
- eval { &delete_breakpoint($line || $dbline); 1 } or print $OUT $@ and return;
+ eval { &delete_breakpoint($line || $dbline); 1 } or do {
+ local $\ = '';
+ print $OUT $@ and return;
+ };
} else {
print $OUT "Deleting a breakpoint requires a line number, or '*' for all\n"; # hint
}
@@ -1905,6 +1925,8 @@ sub save {
sub print_lineinfo {
resetterm(1) if $LINEINFO eq $OUT and $term_pid != $$;
+ local $\ = '';
+ local $, = '';
print $LINEINFO @_;
}
@@ -1925,6 +1947,7 @@ sub postponed_sub {
++$i until $dbline[$i] != 0 or $i >= $max;
$dbline{$i} = delete $postponed{$subname};
} else {
+ local $\ = '';
print $OUT "Subroutine $subname not found.\n";
}
return;
@@ -1944,6 +1967,7 @@ sub postponed {
local *dbline = shift;
my $filename = $dbline;
$filename =~ s/^_<//;
+ local $\ = '';
$signal = 1, print $OUT "'$filename' loaded...\n"
if $break_on_load{$filename};
print_lineinfo(' ' x $stack_depth, "Package $filename.\n") if $frame;
@@ -1968,11 +1992,15 @@ sub dumpit {
do 'dumpvar.pl';
}
if (defined &main::dumpValue) {
+ local $\ = '';
+ local $, = '';
+ local $" = ' ';
my $v = shift;
my $maxdepth = shift || $option{dumpDepth};
$maxdepth = -1 unless defined $maxdepth; # -1 means infinite depth
&main::dumpValue($v, $maxdepth);
} else {
+ local $\ = '';
print $OUT "dumpvar.pl not available.\n";
}
$single = $osingle;
@@ -1983,6 +2011,7 @@ sub dumpit {
# Tied method do not create a context, so may get wrong message:
sub print_trace {
+ local $\ = '';
my $fh = shift;
resetterm(1) if $fh eq $LINEINFO and $LINEINFO eq $OUT and $term_pid != $$;
my @sub = dump_trace($_[0] + 1, $_[1]);
@@ -2181,6 +2210,7 @@ sub xterm_get_fork_TTY {
# This example function resets $IN, $OUT itself
sub os2_get_fork_TTY {
local $^F = 40; # XXXX Fixme!
+ local $\ = '';
my ($in1, $out1, $in2, $out2);
# Having -d in PERL5OPT would lead to a disaster...
local $ENV{PERL5OPT} = $ENV{PERL5OPT} if $ENV{PERL5OPT};
@@ -2273,6 +2303,7 @@ sub readline {
if (@typeahead) {
my $left = @typeahead;
my $got = shift @typeahead;
+ local $\ = '';
print $OUT "auto(-$left)", shift, $got, "\n";
$term->AddHistory($got)
if length($got) > 1 and defined $term->Features->{addHistory};
@@ -2326,6 +2357,7 @@ sub option_val {
sub parse_options {
local($_)= @_;
+ local $\ = '';
# too dangerous to let intuitive usage overwrite important things
# defaultion should never be the default
my %opt_needs_val = map { ( $_ => 1 ) } qw{
@@ -2434,6 +2466,7 @@ sub catch {
sub warn {
my($msg)= join("",@_);
$msg .= ": $!\n" unless $msg =~ /\n$/;
+ local $\ = '';
print $OUT $msg;
}
@@ -2500,6 +2533,7 @@ sub tkRunning {
if (${$term->Features}{tkRunning}) {
return $term->tkRunning(@_);
} else {
+ local $\ = '';
print $OUT "tkRunning not supported by current ReadLine package.\n";
0;
}
@@ -2978,6 +3012,7 @@ sub print_help {
. $Term::ReadLine::TermCap::rl_term_set[1]
}gex;
+ local $\ = '';
print $OUT $_;
}
@@ -3006,6 +3041,7 @@ sub diesignal {
&warn(Carp::longmess("Signal @_"));
}
else {
+ local $\ = '';
print $DB::OUT "Got signal @_\n";
}
kill 'ABRT', $$;
@@ -3077,6 +3113,7 @@ sub warnLevel {
}
sub dieLevel {
+ local $\ = '';
if (@_) {
$prevdie = $SIG{__DIE__} unless $dieLevel;
$dieLevel = shift;
@@ -3164,6 +3201,8 @@ sub methods_via {
for $name (grep {defined &{${"${class}::"}{$_}}}
sort keys %{"${class}::"}) {
next if $seen{ $name }++;
+ local $\ = '';
+ local $, = '';
print $DB::OUT "$prepend$name\n";
}
return unless shift; # Recurse?
@@ -3350,6 +3389,7 @@ sub db_complete {
}
sub end_report {
+ local $\ = '';
print $OUT "Use `q' to quit or `R' to restart. `h q' for details.\n"
}
diff --git a/makedepend.SH b/makedepend.SH
index 19c90d6303..d18138d773 100755
--- a/makedepend.SH
+++ b/makedepend.SH
@@ -130,9 +130,6 @@ for file in `$cat .clist`; do
-e p \
-e '}' ) >UU/$file.c
if [ "$osname" = os390 ]; then
- if [ "$file" = perly.c ]; then
- $echo '#endif' >>UU/$file.c
- fi
$cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
$sed \
-e '/^#.*<stdin>/d' \
diff --git a/op.c b/op.c
index a03f0e5875..1af8113669 100644
--- a/op.c
+++ b/op.c
@@ -3451,11 +3451,13 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
newSTATEOP(0, Nullch, imop) ));
if (packname) {
+#ifdef WIN32
if (ckWARN(WARN_MISC) && !gv_stashpvn(packname, packlen, FALSE)) {
Perl_warner(aTHX_ WARN_MISC,
"Package `%s' not found "
"(did you use the incorrect case?)", packname);
}
+#endif
safefree(packname);
}
diff --git a/perl.c b/perl.c
index 91a3ddaf68..a2921fb1e4 100644
--- a/perl.c
+++ b/perl.c
@@ -2257,7 +2257,7 @@ Perl_moreswitches(pTHX_ char *s)
forbid_setid("-D");
if (isALPHA(s[1])) {
/* if adding extra options, remember to update DEBUG_MASK */
- static char debopts[] = "psltocPmfrxuLHXDSTR";
+ static char debopts[] = "psltocPmfrxuLHXDSTRJ";
char *d;
for (s++; *s && (d = strchr(debopts,*s)); s++)
diff --git a/perl.h b/perl.h
index 4f94734f7a..70569c996d 100644
--- a/perl.h
+++ b/perl.h
@@ -2358,11 +2358,12 @@ Gid_t getegid (void);
#define DEBUG_S_FLAG 0x00010000 /* 65536 */
#define DEBUG_T_FLAG 0x00020000 /* 131072 */
#define DEBUG_R_FLAG 0x00040000 /* 262144 */
-#define DEBUG_MASK 0x0007FFFF /* mask of all the standard flags */
+#define DEBUG_J_FLAG 0x00080000 /* 524288 */
+#define DEBUG_MASK 0x000FFFFF /* mask of all the standard flags */
#define DEBUG_DB_RECURSE_FLAG 0x40000000
-#define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? */
-
+#define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? Signal
+ that something was done? */
# define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG)
# define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG)
@@ -2383,6 +2384,7 @@ Gid_t getegid (void);
# define DEBUG_S_TEST_ (PL_debug & DEBUG_S_FLAG)
# define DEBUG_T_TEST_ (PL_debug & DEBUG_T_FLAG)
# define DEBUG_R_TEST_ (PL_debug & DEBUG_R_FLAG)
+# define DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG)
#ifdef DEBUGGING
@@ -2408,6 +2410,7 @@ Gid_t getegid (void);
# define DEBUG_S_TEST DEBUG_S_TEST_
# define DEBUG_T_TEST DEBUG_T_TEST_
# define DEBUG_R_TEST DEBUG_R_TEST_
+# define DEBUG_J_TEST DEBUG_J_TEST_
# define DEB(a) a
# define DEBUG(a) if (PL_debug) a
@@ -2470,6 +2473,7 @@ Gid_t getegid (void);
# define DEBUG_S_TEST (0)
# define DEBUG_T_TEST (0)
# define DEBUG_R_TEST (0)
+# define DEBUG_J_TEST (0)
# define DEB(a)
# define DEBUG(a)
diff --git a/pod/perlrun.pod b/pod/perlrun.pod
index 0a709bdcee..9bbb8d9386 100644
--- a/pod/perlrun.pod
+++ b/pod/perlrun.pod
@@ -313,7 +313,7 @@ B<-D14> is equivalent to B<-Dtls>):
8 t Trace execution
16 o Method and overloading resolution
32 c String/numeric conversions
- 64 P Print preprocessor command for -P, source file input state
+ 64 P Print profiling info, preprocessor command for -P, source file input state
128 m Memory allocation
256 f Format processing
512 r Regular expression parsing and execution
@@ -326,9 +326,11 @@ B<-D14> is equivalent to B<-Dtls>):
65536 S Thread synchronization
131072 T Tokenising
262144 R Include reference counts of dumped variables (eg when using -Ds)
+ 524288 J Do not s,t,P-debug (Jump over) opcodes within package DB
All these flags require B<-DDEBUGGING> when you compile the Perl
-executable. See the F<INSTALL> file in the Perl source distribution
+executable (but see L<Devel::Peek>, L<re> which may change this).
+See the F<INSTALL> file in the Perl source distribution
for how to do this. This flag is automatically set if you include B<-g>
option when C<Configure> asks you about optimizer/debugger flags.
diff --git a/pp_sys.c b/pp_sys.c
index 099eab9063..51afe1d6c9 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2285,7 +2285,7 @@ PP(pp_socket)
PP(pp_sockpair)
{
-#if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM))
+#if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
dSP;
GV *gv1;
GV *gv2;
diff --git a/sv.h b/sv.h
index d925421b20..8fd4ae7b69 100644
--- a/sv.h
+++ b/sv.h
@@ -1229,7 +1229,7 @@ Returns a pointer to the character buffer.
#define SvSetMagicSV_nosteal(dst,src) \
SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst))
-#ifdef DEBUGGING
+#if !defined(SKIP_DEBUGGING)
#define SvPEEK(sv) sv_peek(sv)
#else
#define SvPEEK(sv) ""
diff --git a/t/comp/use.t b/t/comp/use.t
index fb597770d0..e0281b4d20 100755
--- a/t/comp/use.t
+++ b/t/comp/use.t
@@ -5,7 +5,7 @@ BEGIN {
@INC = '../lib';
}
-print "1..27\n";
+print "1..28\n";
my $i = 1;
eval "use 5.000"; # implicit semicolon
@@ -168,3 +168,18 @@ print "ok ",$i++,"\n";
}
print "ok ",$i++,"\n";
}
+
+
+{
+ # Regression test for patch 14937:
+ # Check that a .pm file with no package or VERSION doesn't core.
+ open F, ">xxx.pm" or die "Cannot open xxx.pm: $!\n";
+ print F "1;\n";
+ close F;
+ eval "use lib '.'; use xxx 3;";
+ unless ($@ =~ /^xxx defines neither package nor VERSION--version check failed at/) {
+ print "not ";
+ }
+ print "ok ",$i++,"\n";
+ unlink 'xxx.pm';
+}
diff --git a/t/lib/warnings/op b/t/lib/warnings/op
index 2fa54b8262..ff00dcd2ed 100644
--- a/t/lib/warnings/op
+++ b/t/lib/warnings/op
@@ -952,12 +952,3 @@ EXPECT
Use of "package" with no arguments is deprecated at - line 3.
Global symbol "BEGIN" requires explicit package name at - line 4.
BEGIN not safe after errors--compilation aborted at - line 4.
-########
-# op.c [Perl_utilize]
-use warnings 'misc';
-push @INC, sub { $_[1] eq 'Joe.pm' ? *DATA : undef };
-eval "use Joe";
-__DATA__
-package joe; 1;
-EXPECT
-Package `Joe' not found (did you use the incorrect case?) at (eval 1) line 2.