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