Revision history for this software.

0.64  2026-06-29 JST (Japan Standard Time)
  - doc lib/mb.pm + README (step 8 doc sub-step): expand the usage documentation
    of the three ways to run (filter / modulino / runtime).  The POD "=head1
    Runtime multibyte interface ..." section now opens with a path comparison
    table (how to invoke, what gets codepoint semantics, supported perl
    versions) and rules of thumb for choosing a path, and gains a detailed
    "=head2 strict vs lenient" subsection: mb's character unit is STRICT (a
    well-formed multi-byte sequence of the current encoding OR a US-ASCII byte
    [\x00-\x7F]); the codepoint walk (mb::length / mb::substr / mb::index) halts
    at the first stray octet; what is "stray" is encoding-dependent (the same
    "A\x85B" is length 1 under utf8 but length 2 under sjis); codepoint
    character classes (\S etc.) are strict; the single deliberate lenient
    exception is the transpiled dot "." on the filter / modulino paths
    ("(?>$over_ascii|.)"), while the runtime interface (mb::qr) keeps even "."
    strict; mb::valid() is the explicit strict predicate; and a "how to choose"
    guide contrasts the codepoint (strict) and octet (lenient) models.  README
    gains matching "THREE WAYS TO RUN" and "STRICT VS LENIENT" sections.  POD/
    README only; lib/mb.pm code is unchanged (diff is POD-only), $VERSION stays
    0.64, Pod::Checker still 0/0, and the full direct-run tally is unchanged at
    ok 465,965 / not ok 0 (zero regression).
  - doc lib/mb.pm (step 8): add a new "=head1 Runtime multibyte interface
    (mb::qr / mb::valid / mb::split) and the three transpile paths" POD section
    (POD-only, US-ASCII, Pod::Checker clean: 0 errors / 0 warnings).  It
    documents (1) the three ways a script reaches codepoint semantics -- the
    path-1 opportunistic source filter ("use mb;" on perl 5.8+), the modulino
    ("perl mb.pm script.pl", in-process eval or *.oo child), and the path-3
    runtime interface ("use mb qw(*mb utf8);") -- and (2) the three runtime
    subroutines ported in steps 1/5: mb::qr() (the functional form of
    $mb{qr/.../}, returning a codepoint regex STRING not a qr// object, which
    matters on perl 5.005_03), mb::valid() (the strict, opt-in well-formedness
    predicate that uses the STRICT unit, not the lenient everyday $x, and whose
    verdict varies by script encoding: utf8 strict / rfc2279 permissive / wtf8
    surrogate-tolerant), and mb::split() (the UTF8::R2-compatible runtime
    split).  No code change to lib/mb.pm (diff is POD-only); $VERSION stays 0.64.
  - doc (step 8): extend all 21 doc/mb_cheatsheet.*.txt with four new sections,
    "Runtime codepoint regex (mb::qr)", "Validate well-formed bytes (mb::valid)",
    "Split on codepoint boundaries (mb::split)" and "Three ways to run (filter /
    modulino / runtime)", localized in each language and numbered consecutively
    after the existing sections so t/9080-cheatsheets.t (S2 consecutive
    numbering) still passes.  The mb::split section completes the cheatsheet
    coverage of all three runtime subroutines (mb::qr / mb::valid / mb::split)
    required by step 8, matching the POD section above.
  - test (step 8): test-asset integration.  The curated mb-native runtime tests
    added in steps 1-7 -- t/1007_runtime_qr.t, t/1010_filter.t,
    t/1011_modulino.t, t/1012_valid.t, t/1013_valid_encodings.t, t/1014_split.t,
    t/1015_import_args.t, t/1016_source_encoding.t -- are confirmed as the
    integrated, deduplicated runtime test set, numbered to mb's existing 1xxx
    convention.  A blanket inheritance of UTF8::R2's ur2_* qr suite was
    EVALUATED and DECLINED: it is not additive.  ur2_* encodes mb8's
    octet-lenient \S/\H/\V semantics (a lone \x85 / \xA0 matches \S), whereas
    mb's documented codepoint \S matches only "a well-formed multi-byte
    sequence OR a US-ASCII byte [\x00-\x7F]", so a lone stray octet matches
    neither and a direct port produces 6 not-ok per qr file (e.g. assertions
    317/318/327/328/337/338 in ur2_1020_qr1).  This is mb-0.63's long-standing
    behaviour, not a port regression, so per the zero-regression rule the bulk
    inheritance is withdrawn; selective inheritance of non-diverging ur2_* cases
    remains possible as a future per-file-vetted additive sub-step.
  - QA (step 8): final release-candidate QA.  Full direct-run tally is
    ok 465,965 / not ok 0 (unchanged from step 7; zero regression).  All meta
    tests green: 9001-load=32, 9010-encoding=54, 9020-perl5compat=160,
    9025-perl542compat=11, 9030-distribution=620, 9040-style=31, 9050-pod=6
    (Pod::Checker still 0/0 after the new POD), 9060-readme=10,
    9080-cheatsheets=63 (after the new cheatsheet sections).  Verified on perl
    5.38.2 only; old-perl real-machine confirmation (5.005_03 / 5.6 / 5.8) and
    perl 5.41+ source::encoding firing remain on the maintainer's pre-release
    checklist.
  - verify lib/mb.pm (step 7): re-confirm the Perl 5.41+ "no source::encoding;"
    injection.  All five script-level transpile paths route their mb::parse()
    output through mb::_insert_source_encoding_unimport(): the path-1 source
    filter, the modulino *.oo writer, the modulino in-process eval, and the two
    require-time prefix *.oo writers.  The runtime mb::eval() (a string eval)
    intentionally does NOT inject, exactly as in the mb8-0.01 source it was
    ported from.  The injection regex is byte-for-byte identical to mb8-0.01,
    so the port is exact.  No code change was needed (verification only);
    "use v5.41", "use v5.42", "use 5.041", "use 5.042" and higher all receive
    "; no source::encoding;" on the SAME physical line (before any trailing
    comment, no line-number shift), while "use v5.40" / "use 5.040" and earlier,
    and "require VERSION", are correctly left alone.
  - test (step 7): add t/1016_source_encoding.t (34 assertions) locking in the
    injection behaviour by inspecting the transpiled text directly, so it needs
    no Perl 5.41+ interpreter and runs on every perl from 5.005_03 up (no source
    filter, no version-specific feature; pure US-ASCII body).  It checks the
    accepted version notations, the below-threshold non-matches, same-line
    placement / line-number preservation, trailing-comment handling, CRLF and CR
    line endings, multiple version statements, and the require/no non-matches.
    MANIFEST gains the new test file.  All prior assertions still pass unchanged;
    total is 465,965 (zero regressions, +38 = +34 new test assertions +4 added
    MANIFEST-integrity checks in 9030-distribution).  Verified on perl 5.38.2
    only; real execution under perl 5.41+ is deferred to the maintainer.
  - feature lib/mb.pm (step 6): clarify the import() / main() argument errors.
    The argument acceptance is unchanged -- import() still accepts the runtime
    tokens *mb and %mb plus every encoding name (big5 / big5hkscs / eucjp /
    gb18030 / gbk / rfc2279 / sjis / uhc / utf8 / wtf8), and the modulino
    main() -e still accepts every encoding name (NOT narrowed to the UTF-8
    family like mb8).  Only the three die messages for an unsupported argument
    were made explicit: import() now dies with "import argument '...' not
    supported (use one of: *mb, %mb, big5, big5hkscs, eucjp, gb18030, gbk,
    rfc2279, sjis, uhc, utf8, wtf8)." and both main() -e branches now die with
    "script_encoding '...' not supported (use one of: big5, big5hkscs, eucjp,
    gb18030, gbk, rfc2279, sjis, uhc, utf8, wtf8)." (the runtime tokens *mb /
    %mb are import-only and are not advertised by the modulino).  This is a
    message-text-only change; the die-firing condition is identical, so no
    existing behaviour changes (additive only).
  - test (step 6): add t/1015_import_args.t (46 assertions: unsupported import
    argument dies with an explicit listing message naming *mb / %mb and the
    encodings; both main() -e forms (-eXXX and -e XXX) die the same way and the
    modulino listing omits *mb / %mb; every supported token *mb / %mb and all
    ten encodings is still accepted by use mb '...').  The test loads mb with
    require, exercises the rejection paths through eval (they die in the
    argument scan before any side effect) and the acceptance paths in a child
    perl, so it runs on every perl from 5.005_03 up.  MANIFEST gains the new
    test file.  All prior assertions still pass unchanged; total is 465,927
    (zero regressions, +50 = +46 new test assertions +4 added MANIFEST-integrity
    checks in 9030-distribution).  Verified on perl 5.38.2 only.
  - feature lib/mb.pm (step 5): port two runtime functions from mb8-0.01.
    sub mb::valid(;$) (about 13 lines) is inserted right before
    sub mb::require(); it is a non-destructive predicate that whole-matches
    its argument (or $_) against the STRICT unit ($over_ascii or a US-ASCII
    byte, NOT the lenient $x), returning 1 for well-formed input and 0 when
    any stray octet is present.  The string is never modified.  sub
    mb::split(;$$$) (about 40 lines) is inserted right before sub mb::_split();
    it is the UTF8::R2-compatible runtime split for path-3 callers (the
    transpiler still uses mb::_split, untouched).  When the first argument is
    '' or an empty (?^...:) group it splits on $x codepoints; otherwise it
    delegates to CORE::split via qr{@{[mb::qr($_[0])]}} (mb::qr returns a
    string, so it is interpolated into a fresh qr{}).  The $] < 5.012
    implicit-split-to-@_ deprecation warning under $^W is carried over as is.
    Both subs depend only on pre-existing mb internals ($over_ascii, $x,
    mb::qr); no existing behaviour is changed (additive only).
  - test (step 5): add t/1012_valid.t (20 assertions: well-formed and
    malformed octet cases, $_ default, non-destructiveness, strict-walk
    relation), t/1013_valid_encodings.t (18 assertions: utf8 / rfc2279 / wtf8
    well-formedness differences and set/get round trip), and t/1014_split.t
    (80 assertions: argument counts 0..3, positive/negative/exceeding LIMIT,
    scalar and list context, ASCII and full-width multibyte).  Tests load mb
    with require and set the encoding explicitly, so they exercise the runtime
    functions without the source filter and run on every perl from 5.005_03
    up.  MANIFEST gains the three new test files.  All 465,747 prior
    assertions still pass unchanged; total is 465,877 (zero regressions,
    +130 = +118 new test assertions +12 added MANIFEST-integrity checks in
    9030-distribution).  Verified on perl 5.38.2 only; the 5.005_03 /
    5.6 / 5.8 confirmation of mb::split's $] < 5.012 path remains for ina to
    run on a real old perl.
  - audit lib/mb.pm (step 4): perl 5.005_03 read-only-value audit of every
    destructive s/// and tr/// in the code region.  Result: no new code change
    is required.  No destructive s///|tr/// is applied to $_[n], to a string
    literal, or to a bare read-only $_; every such target is a fresh writable
    lexical (copy-first idioms (my $c = $src) =~ s///, my($c) = @_, and
    my $c = $_[n]).  The one runtime sub that may receive a qr// argument and
    substitutes on it, _r2_qr(), already copies first via my $source = "$_[0]"
    (mitigation A, added in an earlier 0.64 step).  The tr/x// occurrences are
    count-only (no /d, empty replacement) and never modify their operand.
  - decision lib/mb.pm (step 4): mitigation B (re-expressing the file-scoped
    transpile-path $x as a plain string instead of a qr// object) is NOT
    applied; the file-scoped $x stays qr/(?>$over_ascii|[\x00-\x7F])/ and stays
    STRICT.  Reason, measured empirically: a qr// object interpolates into a
    larger pattern as a modifier-isolated subpattern ((?^...:...)), and the
    transpile path depends on that isolation where $x sits inside /x and escape
    contexts; the bare-string form drops the wrapper and regressed the
    qr-as-q / s-as-q escape transpilation (406 assertions failed on perl 5.38 in
    t/2023_basic_escape_qr_as_q.t and t/2025_basic_escape_s_as_q.t), so the
    change was reverted.  The file-scoped $x is never the target of a
    destructive s///, only ever interpolated into search patterns, so it has no
    read-only hazard to fix.  A short comment recording this was added at the $x
    definition; this is the only edit to lib/mb.pm in step 4 and is comment-only
    (behaviour unchanged).
  - test (step 4): all 465,747 assertions from the previous 0.64 step still
    pass unchanged on perl 5.38.2 (zero regressions); no test was added or
    removed.  The read-only failures this audit targets only reproduce on perl
    5.005_03 / 5.6, which is not available in this environment, so the
    5.005_03-specific behaviour remains to be confirmed on a real old perl.
  - feature lib/mb.pm: port the runtime UTF-8 codepoint regex engine from
    mb8-0.01.  sub _r2_qr() (about 188 lines) and sub mb::qr() (3 lines)
    are inserted right after sub list_all_by_hyphen_utf8_like() (same
    package mb context).  _r2_qr() builds a multibyte-aware regular
    expression string from the body of a qr/.../ token at run time and is
    the engine behind the UTF8::R2-compatible $mb{qr/.../} interface.
    Dependencies ($over_ascii, the $bare_* classes, mb::chr, and
    list_all_by_hyphen_utf8_like) are all pre-existing in mb and unchanged;
    list_all_by_hyphen_utf8_like is byte-identical between mb and mb8.
  - robustness lib/mb.pm: _r2_qr() now builds a *local* strict STRING form of
    the one-codepoint matcher, my $x = "(?>$over_ascii|[\x00-\x7F])", and uses
    it throughout in place of the file-scoped qr// object $x.  The file-scoped
    $x is a qr// object; on perl 5.005_03 a qr// object loses its body when
    interpolated into another pattern ("$qr" -> "(?-xism:)"), so an embedded
    $x silently degraded to a match-anything sub-pattern on old perl, causing
    negative codepoint classes, hyphen-range boundaries, quantifier shortfall
    and "." (without /s) to over-match.  A plain string interpolates losslessly
    from 5.005_03 onward.  The local form is kept STRICT ([\x00-\x7F]); the
    file-scoped qr// $x is left untouched for mb's transpile path.
  - change lib/mb.pm: the %mb tie FETCH is changed from { $_[1] } (a no-op
    pass-through) to { _r2_qr($_[1]) } so that $mb{qr/.../} now builds a
    UTF-8 codepoint regex at run time.  This is additive: import() exports
    an *untied* snapshot copy of %mb, so no existing code or test reaches
    FETCH; the change therefore cannot alter existing behaviour.  $x is
    deliberately kept strict (qr/(?>$over_ascii|[\x00-\x7F])/); leniency is
    not introduced here.
  - add t/1007_runtime_qr.t: 27 assertions exercising $mb{qr/.../} via a
    direct tie my %mb, 'mb' (UTF-8 character classes, hyphen ranges,
    negation, quantifiers, POSIX classes, alternation, mixed ASCII and
    multibyte ranges, and the /i and /s modifiers).  This file is encoded
    in UTF-8 by design (an explicit-UTF-8 test).
  - test: 465,697 existing assertions all pass unchanged; total is now
    465,724 (+27) with zero failures.
  - feature lib/mb.pm: port "path 1", the opportunistic source code filter,
    from mb8-0.01 into import(), made ADDITIVE for mb.  On perl 5.8 or later,
    "use mb;" (or "use mb 'utf8';" etc.) installs a Filter::Util::Call source
    filter that reads the whole remaining source in one pass and, for a genuine
    path-1 script, runs it through mb::parse() followed by
    mb::_insert_source_encoding_unimport() -- so such a script needs only
    "use mb;" to be auto-transpiled and the modulino (perl mb.pm script.pl) is
    no longer required on 5.8+.  CRUCIAL GUARD: if the buffered source itself
    calls mb::set_script_encoding(), the script is treated as octet-oriented /
    runtime-managed (mb's long-standing "use mb; then call mb::* on octet data"
    convention) and is passed through UNCHANGED.  This is what makes the change
    additive: every pre-existing "use mb;" caller -- which was never
    source-filtered, because mb-0.63 had no filter, and which sets its own
    encoding at run time -- behaves exactly as before, so the existing 465,697
    assertions are all unchanged.  Filter::Util::Call has been a core module
    since perl 5.8.0 and is require()d only at run time, so no new dependency is
    declared; if it is somehow unavailable, "use mb;" silently loads as the
    plain runtime import (no die, to preserve the legacy convention).
  - feature lib/mb.pm: import() now also recognises the *mb / %mb tokens and,
    when present, suppresses the source filter (runtime-interface request,
    reserved for a later step).  Existing single-argument encoding invocations
    are unchanged; no shipped code or test passes these tokens.
  - change lib/mb.pm: on perl 5.005_03 / 5.6 the source filter is unavailable;
    "use mb;" loads as the plain runtime import exactly as before (it does NOT
    die), and source transpilation there is via the modulino as always.
  - change lib/mb.pm: sub main() sets PERL_MB_OCTET=1 in the environment of the
    child interpreter it spawns to run the transpiled *.oo script.  The child
    loads -Mmb=ver,enc, so without this flag the new path-1 filter could
    transpile the already transpiled *.oo a second time.  import() honours
    PERL_MB_OCTET by skipping the filter, preventing double transpilation.
  - add t/1010_filter.t: 5 assertions that drive "use mb 'utf8';" scripts (with
    no mb::set_script_encoding call, i.e. genuine path-1) through a child perl
    and confirm auto-transpilation (length, character-class match, substitution,
    global capture count, negated class).  On perl < 5.8 the cases self-skip.
    This file is encoded in UTF-8 by design (an explicit-UTF-8 test).
  - feature lib/mb.pm: sub main() (the modulino) now splits the execution path
    on whether the target script contains a __DATA__/__END__ section, mirroring
    mb8-0.01.  A script with no __DATA__/__END__ is transpiled and run in
    process by CORE::eval with no temporary file: the *.oo companion script,
    the $script.lock directory, and the child interpreter are all skipped.  A
    "package main;\n#line 1 \"$script\"\n" prefix is prepended so that run-time
    error messages report the original script name and correct line numbers.
    A script that does contain __DATA__/__END__ keeps the previous behaviour
    (write *.oo only when stale, then run it through a child interpreter),
    because an in-process string eval cannot provide a working <DATA> handle.
    The source is now read once, up front, for the __DATA__/__END__ test; the
    poor-make staleness check and MSWin32 @ARGV globbing are unchanged.
  - change lib/mb.pm: the in-process branch also sets PERL_MB_OCTET=1 (local)
    around the CORE::eval, so that a "use mb;" / "use mb 'utf8';" inside the
    transpiled source does not re-install the path-1 source filter and
    transpile a second time.
  - change lib/mb.pm: when run as a modulino ($0 eq __FILE__), $INC{'mb.pm'} is
    registered (if not already set) before main() is called.  This makes a
    "use mb;" / "require mb" inside an in-process transpiled script resolve to
    the already loaded modulino instead of reloading mb.pm, which would
    otherwise emit many "Subroutine ... redefined" warnings.  This mirrors the
    child-interpreter path, where -Mmb=ver,enc already populates $INC{'mb.pm'}.
  - add t/1011_modulino.t: 6 assertions covering the modulino split -- a
    no-__DATA__ script runs in process (codepoint length, character-class
    match, and absence of any *.oo file), a __DATA__ script reads <DATA> via a
    child interpreter (and a *.oo file IS created), and an in-process run-time
    error reports the original line number.  This file is encoded in UTF-8 by
    design (an explicit-UTF-8 test).

0.63  2026-06-14 JST (Japan Standard Time)
  - fix t/lib/INA_CPAN_Check.pm: ok() now has prototype ($;$) so that a
    failing regex match passed inline (e.g. ok($text =~ /pat/, "label"))
    is evaluated in scalar context.  Without the prototype, a no-capture
    regex failure returns an empty list in list context, causing the label
    string to land in the first argument and the test to silently pass.
    This masked all P10 failures for t/9xxx test files (9 false passes
    per run).
  - fix t/lib/INA_CPAN_Check.pm: add BEGIN { pop @INC if $INC[-1] eq '.' }
    CVE-2016-1238 mitigation (P12 guard was missing from the file).
  - fix t/lib/INA_CPAN_Check.pm: add $VERSION = $VERSION self-assign
    (P10 guard was missing from the file).
  - fix t/lib/INA_CPAN_Check.pm: check_B() B4 regex now also matches
    'VERSION' => q{x.xx} and "VERSION" => q{x.xx} forms used in
    ina@CPAN Makefile.PL files (the old pattern matched only single- or
    double-quoted values, so B4 always failed for this distribution).
  - fix t/9001-load.t, t/9010-encoding.t, t/9020-perl5compat.t,
    t/9025-perl542compat.t, t/9030-distribution.t, t/9040-style.t,
    t/9050-pod.t, t/9060-readme.t, t/9080-cheatsheets.t: add
    use vars qw($VERSION); $VERSION = $VERSION; to each file so that
    P10 ($VERSION self-assign) is satisfied when t/9020-perl5compat.t
    scans the t/9xxx test files themselves.
  - fix lib/mb.pm: _open_r() now prepends "< " read-mode prefix, matching
    _open_w()/_open_a(). The old 2-arg open($fh,$_[0]) misparsed filenames
    ending in '|' (a legal MBCS trail byte 0x7C in Shift_JIS/EUC/GBK etc.)
    as a pipe/command open. Works on Perl 5.005_03 and all later versions.
  - fix pmake.bat: _dist_check_sources() now scopes selfcheck targets to
    match t/9020-perl5compat.t and t/9040-style.t. The multibyte transpiler
    core (lib/mb.pm) and the t/NNNN fixtures (non-t/9xxx) are excluded from
    the P1-P12 / C1 / K1-K3 house-style scans (they intentionally carry
    post-5.005_03 tokens and non-US-ASCII bytes as transformation data);
    t/lib/*.pm added to targets. Fixes 212 spurious 'pmake dist' FAILs.
  - fix t/lib/INA_CPAN_Check.pm: check_C() again honours the caller's
    utf8_ok option (the 0.63 rewrite dropped it, so lib/mb.pm and the
    t/[1-8]xxx MBCS fixtures all false-failed C1 -- 106 spurious FAILs in
    t/9030). _find_pm_t() now returns a list instead of taking a \@out-param,
    so the module no longer violates its own K2 rule (1 FAIL in t/9040).
  - add eg/mb_length.pl: minimal US-ASCII, 5.005_03-clean usage example
    (satisfies the new check_F F1 "eg/*.pl exists"); registered in MANIFEST.

0.62  2026-05-17 JST (Japan Standard Time)
  - fix lib/mb.pm: _open_a(), _open_r(), _open_w() rewritten to use a
    unique numbered package glob (mb::FH::H<n>) instead of \do{local *_}.
    The old implementation always resolved to *main::_ causing IO-slot
    collisions on Perl 5.005_03.  New design: each function increments
    $mb::_fh_seq and returns the glob-name string; callers use
    no strict 'refs' with readline(*{$fh}) / print {*{$fh}} / close($fh).
    Function signatures changed from ($$) to ($): the filehandle argument
    is no longer passed in; callers now assign the return value instead.
  - fix lib/mb.pm: all six call sites of _open_r() and _open_w() updated
    to the new calling convention.
  - fix t/4006_mb_getc.t: replace six open(my $fh,...) with SKIP-guard
    with bareword filehandle form (FILE41-FILE43, FILE51-FILE53).

0.61  2026-04-03 JST (Japan Standard Time)
  - fix t/9050-pod.t: skip G11 Pod::Checker errors check when
    Pod::Checker < 1.51 to avoid false FAILs caused by mis-reported
    errors for valid L</section>, L</"section">, and L<URL> syntax
    on older Perl installations (CPAN Testers FAIL fix)
  - fix lib/mb.pm: update =head1 Perl 5.42 and source::encoding POD
    to accurately describe that no source::encoding; is appended on
    the same line as qualifying use VERSION statements (not in a
    BEGIN block), and clarify that only DAMEMOJI inside string and
    regexp literals are escaped; comments and POD are left untouched

0.60  2026-03-31 JST (Japan Standard Time)
  - fix lib/mb.pm: =encoding utf8 -> utf-8 (Pod::Checker 1.45 compat)
  - fix t/9025-perl542compat.t: avoid "implicit split to @_" deprecation
    warning on Perl 5.8.x in T7 (use explicit array variable instead of
    scalar(split ...))
  - fix t/9050-pod.t: skip G12 Pod::Checker warnings check when
    Pod::Checker < 1.60 to avoid false FAILs caused by mis-reported
    warnings for valid L<> link syntax on older Perl installations

0.59  2026-03-29 JST (Japan Standard Time)
  - add t/lib/INA_CPAN_Check.pm: shared test library aligned with
    DB-Handy 1.07, HTTP-Handy 1.03, LTSV-LINQ 1.07, mb-JSON 0.04
  - add t/9001-load.t: module load, $VERSION, public API (mb::*) (32 tests)
  - add t/9010-encoding.t: US-ASCII, trailing whitespace, newline checks
  - add t/9020-perl5compat.t: Perl 5.005_03 compatibility; P1-P14 for
    lib/*.pm and t/9xxx, M1-M7 for Makefile.PL (160 tests)
  - add t/9025-perl542compat.t: unit tests for
    _insert_source_encoding_unimport() (11 tests)
  - add t/9030-distribution.t: MANIFEST, version, META, Changes checks
  - add t/9040-style.t: ina@CPAN coding style E and K checks
  - add t/9050-pod.t: POD structure G1-G12 including Pod::Checker (6 tests)
  - add t/9060-readme.t: README required sections R1-R5 check (10 tests)
  - add t/9080-cheatsheets.t: doc/ cheat sheet quality checks
  - add doc/mb_cheatsheet.*.txt: mb quick reference in 21 languages
  - add SECURITY.md
  - fix lib/mb.pm: warnings stub now guards with
    !defined(&warnings::import) to suppress "import redefined" warnings
  - fix lib/mb.pm: supports Perl 5.42 source::encoding pragma;
    add _insert_source_encoding_unimport() helper that appends
    "no source::encoding;" on the same line as "use v5.41" or later
    statements (before any trailing comment) so that line numbers in
    error messages are not shifted between original and transpiled script
  - fix lib/mb.pm: add =head2 Perl 5.42 and source::encoding in POD
  - fix lib/mb.pm: remove whitespace-only lines in POD verbatim blocks
    (Pod::Checker warnings=0 achieved)
  - fix lib/mb.pm: update "newest perl" to "perl 5.42" in SYNOPSIS POD
  - fix README: add INSTALLATION, AUTHOR, LICENSE AND COPYRIGHT,
    PERL 5.42 AND source::encoding sections;
    update "newest perl" to "perl 5.42"
  - fix t/lib/INA_CPAN_Check.pm: _slurp and _slurp_lines strip CR (\r)
    to handle CRLF line endings on Windows
  - fix pmake.bat: add CVE-2016-1238 mitigation (pop @INC) to
    generated Makefile.PL
  - created by INABA Hitoshi

0.58  2024-07-07 00:00:00
  - supports ^^ logical xor operator
  - created by INABA Hitoshi

0.57  2023-07-07 00:00:00
  - supports finally { block }
  - supports mb::finally { block }
  - supports CORE::finally { block }
  - supports REG_INF has been raised from 65,536 to 2,147,483,647
  - created by INABA Hitoshi

0.56  2023-03-23 00:00:00
  - add t/8101_old_package_big5.t
  - add t/8102_old_package_big5hkscs.t
  - add t/8103_old_package_eucjp.t
  - add t/8104_old_package_gb18030.t
  - add t/8105_old_package_gbk.t
  - add t/8106_old_package_rfc2279.t
  - add t/8107_old_package_sjis.t
  - add t/8108_old_package_uhc.t
  - add t/8109_old_package_utf2.t
  - add t/8110_old_package_wtf8.t
  - created by INABA Hitoshi

0.55  2023-03-23 00:00:00
  - fix ver.0.54
  - created by INABA Hitoshi

0.54  2023-03-20 00:00:00
  - fix transpiling Sjis::do { block } --> do { block }
  - fix transpiling Sjis::eval { block } --> eval { block }
  - fix transpiling Sjis::split --> mb::_split
  - update POD
  - created by INABA Hitoshi

0.53  2023-03-17 00:00:00
  - supports Sjis::* subroutines when sjis encoding
  - supports GBK::* subroutines when gbk encoding
  - supports UHC::* subroutines when uhc encoding
  - supports Big5::* subroutines when big5 encoding
  - supports Big5HKSCS::* subroutines when big5hkscs encoding
  - supports EUCJP::* subroutines when eucjp encoding
  - supports GB18030::* subroutines when gb18030 encoding
  - supports RFC2279::* subroutines when rfc2279 encoding
  - supports UTF2::* subroutines when utf2 encoding
  - supports WTF8::* subroutines when wtf8 encoding
  - update POD
  - created by INABA Hitoshi

0.52  2022-12-08 00:00:00
  - supports %mb for compatibility with UTF8::R2 script
  - update POD
  - created by INABA Hitoshi

0.51  2022-10-15 00:00:00
  - update POD
  - created by INABA Hitoshi

0.50  2022-10-08 00:00:00
  - update POD
  - created by INABA Hitoshi

0.49  2022-09-14 00:00:00
  - supports RFC2279 encoding by command line option "-e rfc2279"
  - created by INABA Hitoshi

0.48  2022-09-02 00:00:00
  - update POD
  - created by INABA Hitoshi

0.47  2022-08-20 00:00:00
  - update POD
  - remove /o from regexp
  - created by INABA Hitoshi

0.46  2022-08-06 00:00:00
  - update POD
  - created by INABA Hitoshi

0.45  2022-07-14 00:00:00
  - update POD
  - created by INABA Hitoshi

0.44  2022-06-12 00:00:00
  - update POD
  - created by INABA Hitoshi

0.43  2022-05-10 00:00:00
  - update POD
  - created by INABA Hitoshi

0.42  2022-04-19 00:00:00
  - update POD
  - created by INABA Hitoshi

0.41  2022-03-18 00:00:00
  - fix eratta of comments
  - update POD
  - created by INABA Hitoshi

0.40  2022-02-19 00:00:00
  - updated for safety and long life
  - add MOJIBAKE samples
  - created by INABA Hitoshi

0.39  2022-02-05 00:00:00
  - supports try/catch syntax
  - add DAMEMOJI samples
  - created by INABA Hitoshi

0.38  2022-01-25 00:00:00
  - remove some documents
  - created by INABA Hitoshi

0.37  2022-01-18 00:00:00
  - supports iterating over multiple values at a time: for my ($key, $value) (%hash) { ... }
  - supports iterating over multiple values at a time: for my ($left, $right, $gripping) (@moties) { ... }
  - supports defer { block }
  - created by INABA Hitoshi

0.36  2021-10-30 00:00:00
  - supports /[]/xx, m/[]/xx, qr/[]/xx, s/[]//xx, split /[]/xx, and split m/[]/xx
  - created by INABA Hitoshi

0.35  2021-10-20 00:00:00
  - supports signatures
  - created by INABA Hitoshi

0.34  2021-10-19 00:00:00
  - supports opendir(my $dir, ...)
  - created by INABA Hitoshi

0.33  2021-10-15 00:00:00
  - allow 07, 0o7 and 0O7
  - allow 0b1 and 0B1
  - allow 123.4e5,  123.4E5,  123.e5,  123.E5,  .4e5,  and .4E5
  - allow 123.4e+5, 123.4E+5, 123.e+5, 123.E+5, .4e+5, and .4E+5
  - allow 123.4e-5, 123.4E-5, 123.e-5, 123.E-5, .4e-5, and .4E-5
  - allow 0xFF, 0XFF, 0xff, and 0Xff
  - allow 0xFF.Ep5,  0xFF.EP5,  0xFF.p5,  and 0xFF.P5
  - allow 0xFF.Ep+5, 0xFF.EP+5, 0xFF.p+5, and 0xFF.P+5
  - allow 0xFF.Ep-5, 0xFF.EP-5, 0xFF.p-5, and 0xFF.P-5
  - allow 0Xff.Ep5,  0Xff.EP5,  0Xff.p5,  and 0Xff.P5
  - allow 0Xff.Ep+5, 0Xff.EP+5, 0Xff.p+5, and 0Xff.P+5
  - allow 0Xff.Ep-5, 0Xff.EP-5, 0Xff.p-5, and 0Xff.P-5
  - created by INABA Hitoshi

0.32  2021-10-03 00:00:00
  - expands wildcard arguments of command line on Microsoft Windows
  - created by INABA Hitoshi

0.31  2021-08-26 00:00:00
  - escape "@{^CAPTURE}" to "@{[mb::_CAPTURE()]}", not "@{[join $", mb::_CAPTURE()]}"
  - created by INABA Hitoshi

0.30  2021-06-28 00:00:00
  - fix POD
  - created by INABA Hitoshi

0.29  2021-06-16 00:00:00
  - fix print lc $_;
  - created by INABA Hitoshi

0.28  2021-05-25 00:00:00
  - supports die <<HEREDOC, and more
  - add SEE ALSO of POD
  - created by INABA Hitoshi

0.27  2021-04-24 00:00:00
  - fix confess() and cluck() messages
  - created by INABA Hitoshi

0.26  2021-04-13 00:00:00
  - fix return then /regexp/
  - fix $any->split, etc
  - created by INABA Hitoshi

0.25  2021-03-15 00:00:00
  - fix mb::_ignorecase()
  - created by INABA Hitoshi

0.24  2021-03-14 00:00:00
  - supports print FILEHANDLE <<HEREDOC
  - fix tr/A-Z/a-z/
  - use subroutine prototype
  - sorts POD document
  - created by INABA Hitoshi

0.23  2021-02-27 00:00:00
  - fix parse_expr_balanced()
  - fix cluck()
  - removed package name from some variables
  - created by INABA Hitoshi

0.22  2021-02-21 00:00:00
  - supports version strings
  - removed package name from some variables
  - created by INABA Hitoshi

0.21  2021-02-14 00:00:00
  - fix mb::reverse() with no parameters on scalar context
  - local $_ in mb::chr, mb::_lstat, mb::_stat
  - created by INABA Hitoshi

0.20  2021-01-27 00:00:00
  - removes $term and introduce parse_ambiguous_char()
  - removes mb::PERL package
  - CORE::split() acts as mb::split()
  - supports stacking filetest with no space like -r-w-x
  - created by INABA Hitoshi

0.19  2021-01-10 00:00:00
  - supports free format of mb::use, mb::no
  - created by INABA Hitoshi

0.18  2021-01-06 00:00:00
  - tried to CPAN Test id=116942340, 116942329, 116879165, 116879164, 116879048, 116879043, 116837347
  - created by INABA Hitoshi

0.17  2021-01-02 00:00:00
  - supports mb::use, mb::no
  - created by INABA Hitoshi

0.16  2020-12-29 00:00:00
  - supports mb::PERL (use Perl module in MBCS encoding)
  - created by INABA Hitoshi

0.15  2020-12-27 00:00:00
  - supports codepoint range of codepoint class of regular expression by hyphen
  - supports new octal syntax 0oddddd
  - created by INABA Hitoshi

0.14  2020-12-13 00:00:00
  - supports WTF-8
  - created by INABA Hitoshi

0.13  2020-12-12 00:00:00
  - supports range of ASCII by hyphen for tr///
  - created by INABA Hitoshi

0.12  2020-11-28 00:00:00
  - was changed interface of mb::_open_w()
  - supports mb::get_OSNAME()
  - supports mb::get_script_encoding()
  - supports autovivification of file handle only on perl 5.005
  - supports mb::_chdir() with no parameters
  - created by INABA Hitoshi

0.11  2020-09-05 00:00:00
  - INCOMPATIBLE CHANGE: transpiles eval 'string' to eval 'string' (NOT mb::eval 'string')
  - INCOMPATIBLE CHANGE: transpiles do 'file' to do 'file' (NOT mb::do 'string')
  - INCOMPATIBLE CHANGE: transpiles require 'file' to require 'file' (NOT mb::require 'string')
  - created by INABA Hitoshi

0.10  2020-08-30 00:00:00
  - supports also opendir, not only opendir()
  - removed "use Symbol;"
  - fix from \*qq{...} to qq{...}, transpiling filetest -X qq{...}
  - avoid syntax error: Can't coerce array into hash at ..., transpiling regexp /[ABC]{3}/
  - created by INABA Hitoshi

0.09  2020-08-28 00:00:00
  - supports also lstat, not only lstat()
  - supports also stat, not only stat()
  - supports also filetest -X testee, not only -X (testee)
  - supports stackable file test operators
  - created by INABA Hitoshi

0.08  2020-07-28 00:00:00
  - supports also mb::getc, not only mb::getc()
  - created by INABA Hitoshi

0.07  2020-07-25 00:00:00
  - add cluck() subroutine
  - fix qq-like here document (remove unnecessary \n)
  - supports $mb::PERL as $^X($EXECUTABLE_NAME) for execute MBCS Perl script
  - supports $mb::ORIG_PROGRAM_NAME as original $0($PROGRAM_NAME) before transpile
  - created by INABA Hitoshi

0.06  2020-07-16 00:00:00
  - supports absolute path of mb::do()
  - supports absolute path of mb::require()
  - created by INABA Hitoshi

0.05  2020-07-15 00:00:00
  - removed some tests to avoid FAIL on MSWin32(I beg better idea).
  - created by INABA Hitoshi

0.04  2020-07-14 00:00:00
  - allows calling subroutines without parentheses, chop, chr, do, dosglob, eval, index, index_byte, lc, lcfirst, length, ord, require, reverse, rindex, rindex_byte, substr, tr, uc, ucfirst, split, chdir, and unlink
  - self support confess() for MBCS encoding
  - created by INABA Hitoshi

0.03  2020-07-13 00:00:00
  - support s###
  - fix (?:@{mb::_dot}) to (?:@{[@mb::_dot]}), and so on
  - created by INABA Hitoshi

0.02  2020-07-12 00:00:00
  - fix test scripts on MSWin32 but not MBCS
  - fix running on Microsoft Windows of detect_system_encoding
  - created by INABA Hitoshi

0.01  2020-07-07 00:00:00
  - mb.pm modulino original version
  - created by INABA Hitoshi

Sjis/1.22  2019-08-29 00:00:00
  - remove unnecessary logic from e_string
  - support KSC5601
  - support Big5
  - created by INABA Hitoshi

Sjis/1.21  2019-08-25 00:00:00
  - rename dist name Char-Sjis-ver.sion.tar.gz to Sjis-ver.sion.tar.gz
  - remove lib/Char/Sjis.pm
  - move t/Sjis/*.t to t/*.t
  - created by INABA Hitoshi

Sjis/1.20  2019-07-22 00:00:00
  - unfix Experimental Issue: meta_yml_has_provides
  - created by INABA Hitoshi

Sjis/1.19  2019-07-21 00:00:00
  - fix Kwalitee Issues: main_module_version_matches_dist_version, again
  - created by INABA Hitoshi

Sjis/1.18  2019-07-20 00:00:00
  - fix Kwalitee Issues: main_module_version_matches_dist_version
  - fix Extra Issues: meta_yml_declares_perl_version
  - created by INABA Hitoshi

Sjis/1.17  2019-07-19 00:00:00
  - fix Experimental Issue: meta_yml_has_provides
  - created by INABA Hitoshi

Sjis/1.16  2019-07-14 00:00:00
  - fix Kwalitee Issue: distname_matches_name_in_meta
  - try fixing Kwalitee Issue: meta_json_conforms_to_known_spec
  - try fixing Kwalitee Issue: meta_yml_conforms_to_known_spec
  - fix Extra Issue: has_tests_in_t_dir
  - fix Extra Issue: use_warnings
  - fix Experimental Issue: has_separate_license_file
  - remove makealldists.pl, makeallt.pl, and make_CaseFolding.pl
  - fix tr//xyz/c --> 'x' to 'z'
  - created by INABA Hitoshi

Sjis/1.15  2019-05-02 00:00:00
  - fix Kwalitee Issue: main_module_version_matches_dist_version
  - fix Extra Issue: has_meta_json
  - fix Experimental Issue: meta_yml_has_repository_resource
  - convert some documents to UTF-8
  - created by INABA Hitoshi

Sjis/1.14  2019-04-30 00:00:00
  - try https://rt.cpan.org/Public/Bug/Display.html?id=129343
  - created by INABA Hitoshi

Sjis/1.13  2019-04-28 00:00:00
  - avoid Kwalitee Issue no_pod_errors
  - avoid Kwalitee Issue use_strict
  - add 403_podtest.t
  - rename Sjis/JA.pm to Sjis/JA.pod
  - created by INABA Hitoshi

Sjis/1.12  2019-04-15 00:00:00
  - 098_jperlprint.t covers cygwin
  - 213_do.t covers perl 5.26 or later
  - 355_substr_perldoc.t with script header avoids FAIL of test
  - add 402_regexp_xx.t
  - skip test t/Sjis/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/Big5HKSCS/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/Big5Plus/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/GB18030/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/GBK/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/HP15/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/INFORMIXV6ALS/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/KPS9566/212_dbmopen.t on perl 5.028 on MSWin32
  - skip test xt/UHC/212_dbmopen.t on perl 5.028 on MSWin32
  - support CaseFolding-12.0.0.txt
  - created by INABA Hitoshi

Sjis/1.11  2018-09-22 00:00:00
  - support indented here-documents
  - created by INABA Hitoshi

Sjis/1.10  2018-09-20 00:00:00
  - support CaseFolding-11.0.0.txt
  - created by INABA Hitoshi

Sjis/1.09  2018-09-18 00:00:00
  - exit with actual exit value
  - change META.yml version 1.3 to 1.4
  - remove pMakefile.PL
  - add pmake.bat
  - add LICENSE
  - skip test t/Sjis/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/Big5HKSCS/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/Big5Plus/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/GB18030/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/GBK/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/HP15/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/INFORMIXV6ALS/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/KPS9566/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - skip test xt/UHC/212_dbmopen.t on perl 5.028 on MSWin32 AMD64
  - created by INABA Hitoshi

Sjis/1.08  2016-07-29 00:00:00
  - support Windows 10
  - remove SjisTk module support
  - created by INABA Hitoshi

Sjis/1.07  2016-07-10 00:00:00
  - fc() supports CaseFolding-9.0.0.txt
  - support StrawberryPerl 5.24.0
  - support ActivePerl 5.24.0
  - created by INABA Hitoshi

Sjis/1.06  2015-05-29 00:00:00
  - remove 181_jperlre.t
  - add README2ND
  - created by INABA Hitoshi

Sjis/1.05  2015-06-15 00:00:00
  - performance enhancements by (?>possessive groups)
  - support StrawberryPerl 5.20.2
  - support ActivePerl 5.20.2
  - support Perl 5.22.0
  - support StrawberryPerl 5.22.0
  - support (~. |. &. ^. &.= |.= ^.=) bitwise operators
  - support <<>> double-diamond operator
  - support /n non-capturing regular expression flag
  - support fc() Unicode 7.0 case folding
  - change qr/[[:^lower:]]/i and qr/[[:^upper:]]/i to Perl 5.16 compatible
  - support -i switch on command line on use Char, use Sjis
  - support -w switch on command line on use Char
  - not support \b{...} and \B{...}
  - yada yada operator document
  - add make_CaseFolding.pl
  - created by INABA Hitoshi

Sjis/1.04  2015-03-01 00:00:00
  - boring version numbers
  - fix broken POD documents on CPAN
  - add documents
  - fix _open_a to _open_r in Esjis::do
  - flushing output at make file
  - add test scripts to all encoding distributions
  - cope with "Parse errors: No plan found in TAP output" on FreeBSD and NetBSD
  - cope with "/bin/sh: /bin/perl: Argument list too long" on Mac OS X
  - changed two pass filter to one pass
  - created by INABA Hitoshi

Sjis/1.03  2015-02-01 00:00:00
  - support Char::eval
  - support # encoding: OldUTF8
  - integrated the Sjis software family
  - add makealldists.pl
  - add makeallt.pl
  - add Sjis/JA.pm
  - add Sjis/The_moment_of_birth_of_ShiftJIS_aka_MSKanji.txt
  - add Sjis/escapelist.txt
  - add t/dist/*.t
  - created by INABA Hitoshi

Sjis/1.02  2015-01-01 00:00:00
  - support Sjis::eval
  - support StrawberryPerl 5.20.1
  - support ActivePerl 5.20.1
  - optimize LONG_STRING_FOR_RE
  - created by INABA Hitoshi

Sjis/1.01  2014-09-08 00:00:00
  - avoid "Octal number in vector unsupported" on perl 5.6
  - fix broken t/243_filetest.t of Big5Plus
  - created by INABA Hitoshi

Sjis/1.00  2014-09-01 00:00:00
  - support EUC-TW
  - support yada-yada or triple-dot operator
  - created by INABA Hitoshi

Sjis/0.99  2014-08-03 00:00:00
  - fix fix name: in META.yml Char::Sjis to Char-Sjis
  - fix sub e_capture() on SBCS
  - created by INABA Hitoshi

Sjis/0.98  2014-08-02 00:00:00
  - experimental release
  - created by INABA Hitoshi

Sjis/0.97  2014-07-28 00:00:00
  - fix name: in META.yml
  - support Perl 5.20.0
  - support StrawberryPerl 5.20.0
  - support perl on Raspberry Pi
  - created by INABA Hitoshi

Sjis/0.96  2014-04-26 00:00:00
  - fix m/[ABC]/i
  - created by INABA Hitoshi

Sjis/0.95  2014-01-21 00:00:00
  - fix using "use 5.00503;"
  - created by INABA Hitoshi

Sjis/0.94  2014-01-13 00:00:00
  - support CaseFolding-6.3.0.txt
  - support Perl 5.18.2
  - created by INABA Hitoshi

Sjis/0.93  2013-12-29 00:00:00
  - fix quoting after filetest operators
  - Esjis::unlink() deletes read only file too
  - remove PERL5.BATes
  - remove strict.pm_, warnings.pm_, warnings/register.pm_, and feature.pm_
  - truncate(), getpwnam(), and getpwuid() into eval q{}
  - consider Win95Cmd.exe by PERL5SHELL
  - remove $ENV{'COMSPEC'}
  - changed condition for escaping script
  - support ActivePerl 5.18.1.1800 Windows (x86)
  - support ActivePerl 5.18.1.1800 Windows (64-bit, x64)
  - created by INABA Hitoshi

Sjis/0.92  2013-07-18 00:00:00
  - support JIS8
  - support Arabic
  - support Hebrew
  - support TIS-620
  - created by INABA Hitoshi

Sjis/0.91  2013-07-07 00:00:00
  - improve split() for over 32766 octet string
  - add short README
  - use Esjis ver.sion; --> use Esjis ver.sion.0;
  - undo BEGIN { unshift @INC, '/Perl/site/lib/Sjis'; } in Esjis.pm
  - created by INABA Hitoshi

Sjis/0.90  2013-06-08 00:00:00
  - support Perl 5.18.0
  - support StrawberryPerl 5.18.0
  - \s in a regex matches a vertical tab on perl 5.18.0 or later
  - support lvalue Sjis::substr()
  - follow File::HomeDir 1.00
  - support DWIM Perl
  - add dperl.bat
  - created by INABA Hitoshi

Sjis/0.89  2013-05-12 00:00:00
  - cancel improving multi-byte anchoring for over 32766 octet string on perl 5.10.0
  - add perl518.bat, perl64518.bat, aperl518.bat, aperl64518.bat, sperl518.bat, and sperl64518.bat
  - support Cygwin's Perl
  - add cperl.bat
  - created by INABA Hitoshi

Sjis/0.88  2013-05-01 00:00:00
  - improve multi-byte anchoring for over 32766 octet string
  - remove multi-byte anchoring of UTF2 and OldUTF8
  - support ActivePerl 5.16.3
  - support ActivePerl 5.14.4
  - fix errata
  - created by INABA Hitoshi

Sjis/0.87  2013-03-22 00:00:00
  - support Strawberry Perl 5.16.3
  - support Perl 5.16.3
  - support Strawberry Perl 5.14.4
  - support Perl 5.14.4
  - fix errata
  - remove module (Win32.pm)
  - created by INABA Hitoshi

Sjis/0.86  2013-01-27 00:00:00
  - fix Sjis::getc(BAREWORD)
  - created by INABA Hitoshi

Sjis/0.85  2013-01-13 00:00:00
  - support Microsoft Windows 95
  - support Microsoft Windows NT 4.0
  - support KPS 9566
  - support Sjis::getc()
  - created by INABA Hitoshi

Sjis/0.84  2012-11-19 00:00:00
  - support Strawberry Perl 5.16.2
  - support Perl 5.16.2
  - delete escape-characters of run-time command
  - have to use both two-argument and three-argument open()
  - support Microsoft Windows 8 Pro (x64)
  - support PowerShell 3.0
  - created by INABA Hitoshi

Sjis/0.83  2012-09-29 00:00:00
  - support Strawberry Perl 5.16.1
  - support ActivePerl 5.16.1
  - support x64 of ActivePerl and Strawberry Perl
  - new ver.sion.0 check (match or die)
  - fix $_ !~ s/regexp/replacement/
  - remove ESCAPE_SECOND_OCTET on single byte encoding
  - escape left brace on un-escaping of \N{...}, \p{...}, and \P{...}
  - remove "distribution_type: script" from META.yml
  - add perl64512.bat, perl64514.bat, perl64516.bat, aperl64512.bat, aperl64514.bat, aperl64516.bat, sperl64512.bat, sperl64514.bat, and sperl64516.bat
  - created by INABA Hitoshi

Sjis/0.82  2012-07-29 00:00:00
  - support Strawberry Perl 5.16.0
  - support ActivePerl 5.16.0
  - support variables in character class in regular expression
  - created by INABA Hitoshi

Sjis/0.81  2012-05-25 00:00:00
  - support fold case escape \F and function fc()
  - support scalar context of Esjis::stat, Esjis::stat_, Esjis::lstat, and Esjis::lstat_
  - support Strawberry Perl 5.8, 5.10, 5.12, and 5.14
  - become independent of strict.pm
  - add feature.pm
  - add perl5.bat
  - add aperl58.bat, aperl510.bat, aperl512.bat, aperl514.bat, and aperl516.bat
  - add sperl58.bat, sperl510.bat, sperl512.bat, sperl514.bat, and sperl516.bat
  - fix dummy access (-T and -B for underline cache) in Esjis::T, Esjis::T_, Esjis::B, and Esjis::B_
  - fix $dbh->Esjis::do to $dbh->do on DBI
  - fix Esjis::split(/(-)|(,)/,"1-10,20") --> (1,"-",undef,10,undef,",",20)
  - fix "\v" means "\x0A", "\x0B", "\x0C", and "\x0D"
  - remove './' at head of return value from Esjis::glob and Esjis::glob_
  - created by INABA Hitoshi

Sjis/0.80  2012-03-22 00:00:00
  - support byte-oriented regexp //b, m//b, m''b, s///b, s'''b, qr//b, qr''b, split(//b), split(m//b), split(m''b), split(qr//b), and split(qr''b)
  - support match once only ??, m??, ??b, and m??b
  - support literal null string pattern
  - support $`, $PREMATCH, ${^PREMATCH}, $&, $MATCH, ${^MATCH}, &', $POSTMATCH, and ${^POSTMATCH}
  - add perl516.bat
  - created by INABA Hitoshi

Sjis/0.79  2011-12-23 00:00:00
  - fix m/[[:lower:]]/i, m/[[:upper:]]/i, m/[[:^lower:]]/i, and m/[[:^upper:]]/i
  - created by INABA Hitoshi

Sjis/0.78  2011-10-28 00:00:00
  - support Windows-1258
  - update documents and URL
  - created by INABA Hitoshi

Sjis/0.77  2011-07-27 00:00:00
  - support KOI8-R, KOI8-U, US-ASCII
  - created by INABA Hitoshi

Sjis/0.76  2011-06-30 00:00:00
  - import $fix_drive_relative_paths from File::DosGlob/1.04
  - support regexp metasymbols \C and \R in regexp
  - support regexp metasymbol \N \N{3} \N{3,} \N{3,5}
  - \N{CHARNAME} means literal N{CHARNAME}
  - \p{PROP} means literal p{PROP}
  - \P{PROP} means literal P{PROP}
  - \X means literal X
  - support POSIX-style character classes
  - modifier /a /d /l /u, and /aa of regexp makes die
  - use 5.12.0; --> use 5.12.0; no strict qw(refs);
  - remove test 201_kanji.t,202_kanji.t,203_kanji.t,204_kanji.t,205_glob.t,210_chmod.t,211_chown.t,212_dbmopen.t,214_glob.t,216_open.t,217_qx.t,218_rename.t,221_sysopen.t,222_system.t,223_truncate.t,225_utime.t,226_chdir.t,227_chmod.t,228_chown.t,229_glob.t,230_mkdir.t,232_qx.t,233_rename.t,234_rmdir.t,235_system.t, and 236_utime.t from EUCJP,UTF2,OldUTF8
  - created by INABA Hitoshi

Sjis/0.75  2011-06-05 00:00:00
  - remove Esjis::binmode and Esjis::open (it's a bad idea)
  - created by INABA Hitoshi

Sjis/0.74  2011-06-01 00:00:00
  - remove Esjis::k_ test
  - fix s#foo#\\#, s#foo#\\#g, s'foo'\\', and s'foo'\\'g
  - created by INABA Hitoshi

Sjis/0.73  2011-05-12 00:00:00
  - hexadecimal escape sequence, \x{HHHHHH} in double-quote-like contexts
  - octal escape sequence, \o{OOOOOO} in double-quote-like contexts
  - support tr///r, y///r
  - support s///r
  - rewrite 'use strict;' to 'use strict; no strict qw(refs);'
  - fix m/$var/i: m/[$VAR$var]/ to m/@{[Esjis::ignorecase($var)]}/
  - fix s//code/e, s//code/ee, s//code/eee, ...
  - support Windows-1252
  - PASS all tests on perl 5.00503 of Solaris8
  - PASS all tests on perl 5.00503 of TURBOLINUX WORKSTATION Japanese 6.0 Limited Edition
  - created by INABA Hitoshi

Sjis/0.72  2011-03-04 00:00:00
  - change name Sjis to Char::Sjis
  - support Latin-2, Latin-3, Latin-4, Latin-5, Latin-6, Latin-7, Latin-8, Latin-9
  - support Cyrillic, Greek
  - add perl514.bat
  - created by INABA Hitoshi

Sjis/0.71  2011-01-26 00:00:00
  - support @homepage environment of @nifty. (Debugging ended thanks to valuable cooperation of jscripter)
  - created by INABA Hitoshi

Sjis/0.70  2011-01-14 00:00:00
  - remove multibyte anchoring of UTF2 and OldUTF8
  - propagate @INC by -I switch from script.pl to script.pl.e
  - propagate $^W by -w switch from script.pl to script.pl.e
  - support chdir(\x5c ends path) by perl5.006 or perl5.00800 on MSWin32(jacode.pl library required)
  - support chdir(\x5c ends long path) by perl5.008001 or later, perl5.010 or perl5.012 on MSWin32(Win32 module required)
  - support GBK
  - bundle strict.pm_ as dummy strict.pm
  - add perl55.bat and perl56.bat
  - created by INABA Hitoshi

Sjis/0.69  2010-12-21 00:00:00
  - support MacOS by Sjis software
  - correct open mode before flock()
  ; beside "escape" by Delight Prescott of MacPerl Power and Ease

Sjis/0.68  2010-11-09 00:00:00
  - re-correct 244_3open.t and 245_2binmode.t
  - created by INABA Hitoshi

Sjis/0.67  2010-11-08 00:00:00
  - correct 244_3open.t and 245_2binmode.t
  - created by INABA Hitoshi

Sjis/0.66  2010-11-07 00:00:00
  - emulate two-argument binmode() on perl5.005
  - emulate three-argument open() on perl5.005
  - dummy functions of utf8.pm and bytes.pm
  - correct write locking routine
  - bundle warnings.pm_ and warnings/register.pm_
  - created by INABA Hitoshi

Sjis/0.65  2010-09-16 00:00:00
  - check code page on DOS-like system before test
  - created by INABA Hitoshi

Sjis/0.64  2010-09-14 00:00:00
  - support SjisTk module
  - support \l, \u, lcfirst, and ucfirst
  - add test of Latin1
  - created by INABA Hitoshi

Sjis/0.63  2010-07-04 00:00:00
  - add test of Big5Plus, Big5HKSCS, GB18030, and UHC
  - created by INABA Hitoshi

Sjis/0.62  2010-07-03 00:00:00
  - redefine \b and \B
  - created by INABA Hitoshi

Sjis/0.61  2010-06-27 00:00:00
  - fix OldUTF8
  - initialize tr variables on demand
  - fix Esjis::lc and Esjis::uc's bug
  - created by INABA Hitoshi

Sjis/0.60  2010-06-16 00:00:00
  - back *.pm files from /lib
  - created by INABA Hitoshi

Sjis/0.59  2010-06-14 00:00:00
  - move *.pm files to /lib
  - fix Makefile.PL
  - fix m/[$@]/ to m/[\$\@]/
  - add HP15 and INFORMIXV6ALS test
  - support Big5-HKSCS
  - created by INABA Hitoshi

Sjis/0.58  2010-06-07 00:00:00
  - fix escapeshellcmd
  - created by INABA Hitoshi

Sjis/0.57  2010-06-02 00:00:00
  - do BEGIN { unshift @INC, '/Perl/site/lib/Sjis'; } in Esjis.pm
  - support 'no Module'
  - remove special routine of Tk module
  - test does only one version of perl
  - support TAP(Test Anything Protocol)
  - add ShiftJIS::Regexp's test
  - rename Makefile.PL to pMakefile.PL(Poor Makefile.PL) for DOS like system
  - standard Makefile.PL for UNIX like system
  - warn if chdir "\x5c" ended path on $^W is true
  - created by INABA Hitoshi

Sjis/0.56  2010-04-21 00:00:00
  - add JPerl's test
  - fix [^]] in regexp from <'^' then ']'> to <not ']'>
  - [] in regexp make die "unmatched [] in regexp at ..."
  - support \b and \B in regexp
  - created by INABA Hitoshi

Sjis/0.55  2010-04-16 00:00:00
  - test.pl support perl5.012
  - support when as a statement modifier
  - support := operator
  - created by INABA Hitoshi

Sjis/0.54  2010-04-02 00:00:00
  - fix /i modifier with character class '[ccc]' in regexp
  - support old UTF-8
  - created by INABA Hitoshi

Sjis/0.53  2010-04-01 00:00:00
  - support Latin-1
  - created by INABA Hitoshi

Sjis/0.52  2010-03-17 00:00:00
  - bugfix ${ foo } in regexp
  - remove modules (re.pm, Fcntl.pm and Symbol.pm)
  - call flock in Esjis::do and Esjis::require
  - add perl64.bat
  - Makefile.pl support UNIX like system
  - created by INABA Hitoshi

Sjis/0.51  2010-03-07 00:00:00
  - remove ** UNAUTHORIZED RELEASE ** modules (Fcntl.pm and Symbol.pm)
  - created by INABA Hitoshi

Sjis/0.50  2010-03-07 00:00:00
  - correct INFOMIXV6ALS to INFORMIXV6ALS (sorry!! forgive me!! ;X)
  - add UNIX like system's shell escape
  - glob @ARGV when [?*] included only
  - avoid warning in Esjis::e
  - flock on write and read script
  - add substitute modules (Fcntl.pm and Symbol.pm)
  - remove modules (Carp.pm and FindBin.pm)
  - created by INABA Hitoshi

Sjis/0.49  2010-02-10 00:00:00
  - add perl512.bat
  - redefined character class \d \s \w for perl 5.11 or later
  - fix test.pl and comment of BUGS AND LIMITATIONS about /o modifier
  - created by INABA Hitoshi

Sjis/0.48  2010-01-28 00:00:00
  - Call Module->import() when Module->can('import') is true only
  - No escape when require jcode.pl and jacode.pl
  - Remove limitation of two or more here-documents in a line
  - created by INABA Hitoshi

Sjis/0.47  2010-01-02 00:00:00
  - shorten script of EUCJP.pm and UTF2.pm
  - glob always function as File::DosGlob::glob
  - ignore use module File::DosGlob, Wildcard, Japanese, and JExt
  - created by INABA Hitoshi

Sjis/0.46  2009-12-02 00:00:00
  - fix bug of split q//
  - created by INABA Hitoshi

Sjis/0.45  2009-11-30 00:00:00
  - fix bug of Esjis::split when string is empty
  - created by INABA Hitoshi

Sjis/0.44  2009-11-16 00:00:00
  - support given and when keywords
  - support \gN, \g{N}, and \g{-N} in s///
  - support stacked filetest operators
  - created by INABA Hitoshi

Sjis/0.43  2009-10-12 00:00:00
  - support UTF-2 (aka UTF-8)
  - fix bug of join separated multiple octet of EUCJP, INFOMIXV6ALS, and GB18030
  - created by INABA Hitoshi

Sjis/0.42  2009-09-28 00:00:00
  - rewrite split(m/^/) to split(m/^/m) on any version of perl
  - fix bug of function Sjis::substr()
  - created by INABA Hitoshi

Sjis/0.41  2009-09-18 00:00:00
  - add test script
  - rename Esjis::ord() to Sjis::ord()
  - rename Esjis::reverse() to Sjis::reverse()
  - remove Esjis::shift_matched_var()
  - add Esjis::capture()
  - support !~ tr///
  - support s///g
  - support \h and \v
  - created by INABA Hitoshi

Sjis/0.40  2009-08-27 00:00:00
  - support INFOMIX V6 ALS, GB18030, EUC-JP
  - created by INABA Hitoshi

Sjis/0.39  2009-08-06 00:00:00
  - support Sjis::length, Sjis::substr, Sjis::index, and Sjis::rindex
  - created by INABA Hitoshi

Sjis/0.38  2009-08-05 00:00:00
  - improve qw
  - filetest operator before parenthesis '-X ('
  - escape sequence of hexadecimal number of one digit
  - fix bugs of function charlist_not_qr
  - created by INABA Hitoshi

Sjis/0.37  2009-07-09 00:00:00
  - separate Tk modules, make-*.pl, and test scripts
  - remove perl55.bat, and perl56.bat
  - created by INABA Hitoshi

Sjis/0.36  2009-05-17 00:00:00
  - do local $@ before eval
  - support Tk::getOpenFile and Tk::getSaveFile
  - rewrite in pure batch file perl55.bat, perl56.bat, perl58.bat, and perl510.bat
  - fixing world writable files in tarball before upload to CPAN [ #38127 ]
  - created by INABA Hitoshi

Sjis/0.35  2009-05-06 00:00:00
  - support do, require, and use for user library
  - upper compatible function ord and reverse functions only when demanded
  - support p modifier of m//, s///, and qr// of perl5.10
  - support !~~ operator
  - change to secure code, open() to sysopen()
  - change to secure code, undef %ENV before system()
  - add make-hp15.pl(HP-15 Hewlett-Packard developed)
  - created by INABA Hitoshi

Sjis/0.34  2009-04-01 00:00:00
  - memorial version on birth day
  - Sjis::Tk::* modules pre alpha support
  - created by INABA Hitoshi

Sjis/0.33  2009-02-15 00:00:00
  - add script perl56.bat
  - use Tk --> use Sjis::Tk alpha support
  - created by INABA Hitoshi

Sjis/0.32  2009-02-03 00:00:00
  - add script perl55.bat
  - wildcard globbing of @ARGV on command.com or cmd.exe
  - support chr(0x5C) ended path of do '', do "", require '', and require "" on MSWin32
  - chdir croak when dirname ends chr(0x5C) on MSWin32
  - created by INABA Hitoshi

Sjis/0.31  2009-01-29 00:00:00
  - create test data file on execute test.pl
  - require run-time module version
  - rewrite all about "split" logic
  - created by INABA Hitoshi

Sjis/0.30  2009-01-04 00:00:00
  - support context when calling lc(), lc, uc(), uc
  - support chr(0x5C) ended path on MSWin32
    - file test operators
    - functions lstat(), opendir(), stat(), and unlink()
    - glob() and <WILDCARD>
  - remove pl2ebat.bat, jperl55.bat, jperl58.bat, and jperl510.bat
  - merge esjis.pl into Sjis.pm
  - matched variables $1,$2,$3,... after s/// came to function as it was a description
  - support function of chr, ord, and reverse again
  - add test filetest, pathdir, pathfile, and perlmemo
  - created at kanmi-kissa Hahaso in Chichibu

Sjis/0.29  2008-11-20 00:00:00
  - remove \G from $your_gap
  - created by INABA Hitoshi

Sjis/0.28  2008-09-05 00:00:00
  - upgrade Makefile.PL
  - fix backslashed hexadecimal character escapes
  - fix backslashed octal character escapes
  - cancel upper compatible function of chr, ord, and reverse to backward compatibility
  - $1,$2,$3... of s/// in script means $2,$3,$4...
  - created by INABA Hitoshi

Sjis/0.27  2008-08-28 00:00:00
  - change tr output ex. (my $aaa = $bbb) =~ tr/XYZ/xyz/;
    before:
        (my $aaa = $bbb), Esjis::tr($bbb,'XYZ','xyz','');
    after:
        Esjis::tr((my $aaa = $bbb),'XYZ','xyz','');
  - created by INABA Hitoshi

Sjis/0.26  2008-08-27 00:00:00
  - fix errata
  - created by INABA Hitoshi

Sjis/0.25  2008-08-25 00:00:00
  - add Big5Plus, GBK, and UHC support
  - created by INABA Hitoshi

Sjis/0.24  2008-08-18 00:00:00
  - cancel \x{HHHH} syntax support in qq, m, s, and qr
  - escape second octet | of double octet in qq and "" for open() and system()
  - support \1,\2,\3 syntax of s///, and s'''
  - add Japanese document
  - created by INABA Hitoshi

Sjis/0.23  2008-08-11 00:00:00
  - escape second octet ^ of double octet code in m, s, and qr
  - remove brace of \x{HHHH} in qq, m, s, and qr
  - created at cafe mocca in Nagareyama-Otakanomori S.C

Sjis/0.22  2008-08-05 00:00:00
  - support bareword tr, index, rindex, and reverse
  - avoid "Error: Runtime Exception" of q, qq, '', "", and ``
  - remove below bugs
    - escape second octet of double octet code at last q / / string
    - escape second octet \ of double octet code before \ in q / / string
    - / means m / / after print operator
    - m * * rewrite to m { }
    - m - - rewrite to m { }
    - m : : rewrite to m { }
    - m ? ? rewrite to m { }
    - m \ \ rewrite to m { }
    - m ^ ^ rewrite to m { }
    - m | | rewrite to m { }
    - s * * * rewrite to s { } { }
    - s - - - rewrite to s { } { }
    - s : : : rewrite to s { } { }
    - s ? ? ? rewrite to s { } { }
    - s \ \ \ rewrite to s { } { }
    - s ^ ^ ^ rewrite to s { } { }
    - s | | | rewrite to s { } { }
    - qr * * rewrite to qr { }
    - qr - - rewrite to qr { }
    - qr : : rewrite to qr { }
    - qr ? ? rewrite to qr { }
    - qr \ \ rewrite to qr { }
    - qr ^ ^ rewrite to qr { }
    - qr | | rewrite to qr { }
  - created by INABA Hitoshi

Sjis/0.21  2008-07-22 00:00:00
  - add smoke test script
  - remove below bugs
    - remove return $ope of function &e_s2_q
    - remove parameter $ope of function &e_s2 and &e_s2_q
    - add q operator to parameter of function &e_tr_q when delimiter is '/' or '#'
    - add \c@ .. \c_ to $qq_char, $qq_paren, $qq_brace, $qq_bracket, and $qq_angle
    - remove unescape and re-escape logic from function &e_m, &e_s1, and &e_qr
    - any characters meaning .*? in qw { } and qw [ ] to (?:$q_char)*?
    - change \s* to \s+ of between split and m
  - created by INABA Hitoshi

Sjis/0.20  2008-07-14 00:00:00
  - disable below
    - delimiter tr''(), tr''{}, tr''[], and tr''<> of tr///
    - delimiter  y''(),  y''{},  y''[], and  y''<> of y///
    - delimiter  s''(),  s''{},  s''[], and  s''<> of s///
  - limit modifier
    - only c, d, s, b, and B of tr///
    - only c, d, s, b, and B of y///
    - only c, g, i, m, o, s, and x of m//
    - only c, g, i, m, o, s, and x of //
    - only i, m, s, o, and x of qr//
    - only e, g, i, m, o, s, and x of s///
  - change new line code to LF
  - more comment
  - created by INABA Hitoshi

Sjis/0.19  2008-07-03 00:00:00
  - add code for perl5.10
  - created by INABA Hitoshi

Sjis/0.18  2008-05-11 00:00:00
  - tr///B support
  - created by INABA Hitoshi

Sjis/0.17  2008-05-10 00:00:00
  - correct the document
  - created by INABA Hitoshi

Sjis/0.16  2008-05-09 12:00:00
  - separate run-time routines Esjis.pm, add Sjis.pm
  - created by INABA Hitoshi

Sjis/0.15  2008-05-07 00:00:00
  - remove some limitations
  - created at COUNTRY FARM CAFE in Ueno

Sjis/0.14  2008-05-06 00:00:00
  - remove many bugs and add jperl58.bat, perl58.bat
  - created at Cafe CORONA in Akihabara

Sjis/0.13  2008-04-30 00:00:00
  - remove some limitations and many bugs
  - created by INABA Hitoshi

Sjis/0.12  2008-04-27 00:00:00
  - rename Sjis to esjis, remove some limitations
  - created by INABA Hitoshi

Sjis/0.11  2008-04-22 00:00:00
  - compiler version for perl5.5 and perl5.10
  - created by INABA Hitoshi

Sjis/0.10  2008-04-01 00:00:00
  - original version
  - created by INABA Hitoshi
