Revision history for this software. 0.65 2026-07-05 JST (Japan Standard Time) - add encoding 'hp15' (HP-15, HP-UX Japanese): the two-octet DBCS [\x80-\xA0\xE0-\xFE][\x00-\xFF], verified against the legacy Char-HP15 / Ehp15 $your_char and %range_tr. The lead set is the discontinuous [\x80-\xA0\xE0-\xFE]; \x80 and \xA0 are leads here (single octets in sjis), and the single octets \xA1-\xDF (JIS X 0201 katakana) and \xFF sit outside the lead set. $over_ascii, the multibyte anchor (all perl-version branches), mb::getc (lead reads a second octet), the encoding allow-lists and "use one of" messages, and the old-package map (HP15::*) all gained hp15. The trailing octet 21..7E includes \x5C, so hp15 also joined the MSWin32 trailing-\x5C filename paths (with its own lead set) and got a dedicated [A-Z]-hyphen routine list_all_by_hyphen_hp15_like that intersects ranges with the exact discontinuous lead / single-octet sets (the contiguous-lead sjis/big5 helpers would mis-split). POD: new "=head2 hp15" catalog entry; Char-HP15 moved into the "Legacy single-encoding distributions mapped to mb encoding names" table and the now-empty partially-subsumed note was removed. New t/1019_hp15_structure.t, t/3031_charclass_hyphen_hp15.t and t/8113_old_package_hp15.t; t/1013_valid_encodings.t gained an hp15 accept case; the 21 doc/mb_cheatsheet.*.txt encoding lists gained the name. - add encoding 'informixv6als' (INFORMIX V6 ALS): the Shift_JIS-compatible two-octet core ([\x81-\x9F\xE0-\xFC][\x00-\xFF]) plus the \xFD three-octet user-defined plane (\xFD[\xA1-\xFE][\x00-\xFF]), verified against the legacy Char-INFORMIXV6ALS / Einformixv6als $your_char and %range_tr. $over_ascii, the multibyte anchor (all perl-version branches), mb::getc (\xFD reads three octets), the encoding allow-lists and "use one of" messages, the old-package map (INFORMIXV6ALS::*), and the MSWin32 trailing-\x5C filename paths (sjis-style) all gained informixv6als. [A-Z]-hyphen ranges get a dedicated list_all_by_hyphen_informixv6als_like: the one- and two-octet cases are identical to sjis's own routine and are reused verbatim, with new cases added for ranges that touch the three-octet \xFD plane -- the one-octet-vs-three-octet cases need \xFD treated as ambiguous (a genuine one-octet character only when NOT followed by \xA1-\xFE, via a negative lookahead, since it is otherwise the plane's lead byte). POD: new "=head2 informixv6als" catalog entry; Char-INFORMIXV6ALS moved into the "Legacy single-encoding distributions mapped to mb encoding names" table and removed from the partially-subsumed note. New t/1018_informixv6als_ structure.t (now also exercising mb::getc through a real filehandle), t/3032_charclass_hyphen_informixv6als.t and t/8112_old_package_informixv6als.t; t/1013_valid_encodings.t gained an informixv6als accept case; the 21 doc/mb_cheatsheet.*.txt encoding lists gained the name. - pre-publication QA pass on 0.65: t/1017_euctw_structure.t and t/1019_hp15_structure.t gained mb::getc coverage through a real filehandle (previously only sjis was exercised, in t/4006_mb_getc.t). - second pre-publication QA pass on 0.65 (documentation and test parity for the three encodings added in this release): (1) POD: the two "script encoding and subroutines (1 of 2) / (2 of 2)" old-package tables gained the missing EUCTW:: / HP15:: / INFORMIXV6ALS:: columns (the aliases themselves already existed and were already exercised by t/8111-t/8113). (2) POD: the per-encoding regular-expression transpilation catalog under "Each elements in regular expressions are transpiled as follows" gained "on euctw / on hp15 / on informixv6als encoding" sections. Every row of every section (13 encodings x 44 patterns = 572 rows, including the 440 pre-existing rows) was verified byte-for-byte against live mb::parse() output. (3) POD: the DAMEMOJI escaping catalog gained an "on informixv6als encoding" section; the escape output for the two-octet core was verified byte-identical to sjis before copying the sjis table. (An "on hp15 encoding" section was initially deferred pending the HP-15 byte-to-character table; it has now been added, see below.) (4) t/1015_import_args.t: the acceptance block is now generated from the @accept list (single source of truth) and @accept, the header comment, and the error-message listing checks all gained euctw / hp15 / informixv6als, which were valid import arguments since their addition but were never exercised by this test. (5) the detect_system_encoding() comment now names only the encodings the function can actually return (it had over-claimed euctw / rfc2279 / wtf8). - detect_system_encoding() now returns euctw for the EUC-TW system locales of the three commercial UNIXes, each verified against the vendor's own documentation before the mapping was added: (1) Oracle Solaris: zh_TW and zh_TW.EUC -- "In the zh_TW locale, the EUC scheme is used to encode CNS 11643.1992 codeset" (Solaris 7 International Language Environments Guide, docs.oracle.com/cd/E19620-01/805-4123/new-71/index.html); Solaris 9 onward names it zh_TW.EUC explicitly (docs.oracle.com/cd/E19683-01/806-6642/6jfipqu66/index.html). zh_TW.BIG5 stays big5. (2) IBM AIX: zh_TW with alias zh_TW.IBM-eucTW, code set IBM-eucTW ("Supported languages and locales", www.ibm.com/docs/en/aix/7.2.0?topic=globalization-supported-languages-locales). The capital-Z Zh_TW / Zh_TW.big-5 stay big5; the lookup is case-sensitive, as on AIX itself. (3) HP-UX: zh_TW.eucTW ("Configuring HP-UX for Different Languages", HP part number 5991-5907, Table A-1 Locale Names). zh_TW.big5 stays big5. The generic "Other Systems" branch is intentionally unchanged: a bare zh_TW is Big5 on glibc systems, so euctw must not capture it there. New t/1020_detect_system_encoding.t exercises the new euctw entries, the unchanged big5 / big5hkscs / sjis / eucjp / gb18030 / gbk / uhc neighbours, the utf8 fallback, the LC_ALL-over-LANG priority, and the AIX case-sensitivity, via mb::set_OSNAME / mb::get_OSNAME. - detect_system_encoding(): every locale-name-to-encoding map was rewritten from bare qw() lists into commented entries, each citing the vendor document that names the locale and its code set: Microsoft Windows code pages -- "Code Page Identifiers" (learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers; the HKSCS code page 951 is annotated as an update-installed variant of 950 that is absent from that page); Oracle Solaris -- the Solaris 7 / Solaris 9 / Solaris 11.3 International Language Environments Guides; HP-UX -- "Configuring HP-UX for Different Languages" (UXL10N-90302) Appendix A Table A-1, plus HP-UX 11i patch PHCO_26453 for zh_CN.gb18030 and the newly added zh_HK.hkbig5; IBM AIX -- "Supported languages and locales" in the AIX documentation; generic branch -- GNU libc localedata/SUPPORTED. Entries with no surviving official manual (japanese, japanese.euc, japan, Japanese-EUC, ja_JP.mscode, ja_JP.AJEC, ja_JP.EUC, ja_JP.ujis, Jp_JP, and HP-UX zh_HK.big5) are annotated as legacy vendor UNIX locale names kept for compatibility. The "Other Systems" branch gained the explicit euctw spellings zh_TW.eucTW (HP-UX / Tru64 UNIX style) and zh_TW.EUC-TW (glibc), and, applying the same verification to the other encodings, the glibc SUPPORTED names ja_JP.EUC-JP (eucjp), ko_KR.EUC-KR (uhc), zh_CN, zh_CN.GBK, zh_SG, zh_SG.GBK (gbk), zh_CN.GB18030 (gb18030), zh_HK and zh_HK.BIG5-HKSCS (big5hkscs). A bare zh_TW stays intentionally unmapped in the generic branch (Big5 on glibc, EUC-encoded CNS 11643 on the Solaris lineage), documented in a comment at the map. t/1020_detect_system_encoding.t grew from 33 to 48 tests covering every new entry, the non-regression of every pre-existing entry it already covered, and the deliberate zh_TW-stays-utf8-fallback rule. - POD: the DAMEMOJI escaping catalog gained the previously deferred "on hp15 encoding" section. Publicly available primary sources settled the question that had deferred it: per Ken Lunde, "CJKV Information Processing" 2nd ed. (O'Reilly Media, 2009), Appendix E "Vendor Character Set Standards" and Appendix F "Vendor Encoding Methods" (both published as free PDFs at resources.oreilly.com/examples/9780596514471; the O'Reilly Japan translation of the 1st edition carries the same material in printed Appendixes C and D), the HP Kanji character set is ASCII/JIS-Roman plus JIS X 0201 katakana plus JIS X 0208-1983 with NO vendor-defined characters, and the standard two-octet area of HP-15 encodes JIS X 0208 with the same octets as Shift-JIS (corroborated by Columbia University's Kermit kanji.txt, www.columbia.edu/kermit/ftp/e/kanji.txt); only the user-defined area (up to 5,366 code points on the extra lead octets such as \x80, \xA0, and \xF0-\xFE) is unique to HP-15 and has no character shapes by definition. Therefore the hp15 DAMEMOJI table is byte- and glyph-identical to the sjis table; this was additionally verified at build time by comparing live escape output of sjis and hp15 for all nine metacharacter trailing octets (40 5B 5C 5D 5E 60 7B 7C 7D) under lead \x83 -- zero differences. The "=head2 hp15" catalog entry and the $over_ascii source comment now carry these findings and the reference URLs, including the Unicode Consortium JIS X 0208 / Shift-JIS mapping tables (www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/) from which the complete HP-15 standard-area code table can be derived mechanically. - doc lib/mb.pm + README: fold three lineage elements from the ancestral Sjis / Char-Sjis distributions into mb's documentation. (1) JRE-style stack diagram: the "Runtime multibyte interface ..." section gains a new "=head2 The runtime stack (a JRE-style view)" that redraws the old Sjis JRE (JPerl Runtime Environment) layer diagram -- script on top, mb.pm middle layer, byte-oriented perl (PVM) at the bottom -- but updated to mb's three paths (filter / modulino / runtime) and noting that the lineage's three files (Sjis.pm + Esjis.pm + Char.pm) have collapsed into the single mb.pm. (2) malformed final octet: the "strict vs lenient" section gains a new "=head3 a malformed final octet is kept, not silently dropped (encoding-dependent)" documenting that on the Shift_JIS family a lead byte ending a string with no trail is kept as a one-octet unit (not deleted, not merged), so mb::chop returns exactly that octet and leaves the prefix intact -- the long-standing Esjis::chop behaviour -- while under utf8 a dangling lead is reported invalid by mb::valid(). README STRICT VS LENIENT gains a matching short note. (3) 1998/1999 provenance: the "From 1998 To You" section now records the Tokyo.pm 1999-September source-filter seed (the minimal "package SJIS; use Filter::Util::Call; sub multibyte_filter" posting, with its URL) and the first appearance of the Esjis run-time engine in ActivePerl Build 522 under MSWin32, compiled Nov 2 1999. (4) encoding-name map: add "=head1 Legacy single-encoding distributions mapped to mb encoding names" (placed right after the encoding catalog). A table maps the 18 previously released single-encoding CPAN distributions that mb fully subsumes -- Sjis/Char-Sjis, Char-EUCJP, Big5/Char-Big5Plus, Big5HKSCS/Char-Big5HKSCS, GBK/Char-GBK, Char-GB18030, Char-UHC, Char-KPS9566/KPS9566, KSC5601, Char-UTF2/UTF2/UTF8-R2, Char-OldUTF8 -- to their mb encoding name (sjis, eucjp, big5, big5hkscs, gbk, gb18030, uhc, utf8, rfc2279), showing the multibyte lead/trail byte ranges of BOTH sides so the equivalence is visible ("==" identical, "<=" legacy is a subset). The UTF-8 family ranges (utf8 strict RFC 3629, rfc2279 permissive) are listed in full; KSC5601 (<= uhc) and Char-OldUTF8 (<= rfc2279, minus overlong C0/C1) get subset notes; the three only-partially-subsumed distributions (Char-EUCTW SS2 plane, Char-INFORMIXV6ALS 0xFD area, Char-HP15 lead structure) are named as not in the table. Byte ranges were verified against the actual $your_char definitions of the legacy modules. - test t/4022_mb_chop_malformed.t (new): regression test pinning the malformed final octet rule above. Under sjis, mb::chop("\x82\xA0\x82") returns "\x82" and leaves "\x82\xA0"; a lone lead byte, a clean full DBCS char, and a single-octet half-width kana each chop as expected; mb::length counts the stray octet as its own unit (length 2); mb::valid tolerates the dangling lead under sjis (1) but rejects it under utf8 (0). US-ASCII source, loaded with require so it runs on perl 5.005_03 and later; closure-array TAP plan. - $VERSION 0.64 -> 0.65. lib/mb.pm code is unchanged (the diff is POD-only); behaviour described by the new test was already present and is now pinned. - add EUC-TW (euctw) script encoding, ported from the legacy Char-EUCTW / Eeuctw engine. This is the first mb encoding with an \x8E (SS2) four-octet structure: CNS 11643 plane 1 is [\xA1-\xFE][\xA1-\xFE] (2 octets) and the SS2 planes 2..16 are \x8E[\xA1-\xB0][\xA1-\xFE][\x00-\xFF] (4 octets). Touched in lib/mb.pm: $over_ascii, the multibyte anchor (5.038+/5.030+/ 5.010001+ branches), mb::getc, the import / set_script_encoding allow-lists and "use one of" messages, mb::get_old_package (euctw -> EUCTW::), the qr/[A-Z]/ hyphen helper (list_all_by_hyphen_euctw_like, modelled on the gb18030/utf8 helpers and covering every octet-length endpoint pair (1-1),(1-2),(1-4),(2-2),(2-4),(4-4) under the legacy length-first ordering, skipping the non-existent 3-octet length) and its dispatch, and POD (=head2 euctw catalog entry; Char-EUCTW moved into the legacy mapping table and removed from the "partially subsumed" note). Like eucjp, euctw is a Unix encoding and is intentionally NOT added to the MSWin32 trailing-\x5C DAMEMOJI groups even though the 4-octet final octet can be \x5C, because EUC-TW is not a Windows ANSI code page. Stray high octets follow mb's strict model (non-characters), matching how eucjp treats them. New tests: t/1017_euctw_structure.t (4/2-octet length/substr/index/rindex/ reverse/chop, the transpiled anchor, and SS2 four-octet hyphen-range cases including a char whose trailing octet is \x5C), t/3030_charclass_hyphen_euctw.t (now exercising all six length-combination endpoint pairs via 1/2/4-octet limits), t/8111_old_package_euctw.t; t/1013_valid_encodings.t gains a euctw get/set round trip; euctw added to the supported-encoding list in all 21 doc/mb_cheatsheet.*.txt. 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 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 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) 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, L, and L 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 <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 < '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 - [] 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 - 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