Perl | install_japerl_Framework.bat | japerl.bat | jacode.pl | Char.pm | Perl-Exactly | Strict-Perl | Modern-Open | Fake-Our | Fake-Encode | Stable-Module | SjisTk | DBD-mysqlPPrawSjis | DBD-PgPPSjis | Sjis.pm | EUCJP.pm | UTF2.pm

404 Flag Not Found

     楽できて普遍的な方法を探していますか?

Sjisソフトウェアは日本語情報処理のための Perl プログラムです(JPerlのような使い心地を目指しています)。 JA.pm(日本語ドキュメント) English Version

インストール方法

以下のファイルを @INC に含まれるディレクトリ、例えば C:\Perl\site\lib にコピーするとインストール完了です。もちろん ppm や cpanminus を使っても大丈夫です。

使い方

スクリプト先頭に以下の記述をします。そうするとスクリプトをシフトJISで記述でき、正規表現をはじめとしてPerlの動作もシフトJISによる日本語文字列に対応するようになります。最近ではjaperl.batを使う方法もあります。この方法だと"use Sjis;"を書かずに済むので、将来、本流に戻るときに有利かもしれません。

use Sjis;
print "こんにちは、並行世界!\n";

Sjisソフトウェアの概要

  • バイナリデータを扱うことで日本語文字列(※1)を扱います。
  • 数値、文字列、バイト列をデータ型で区別しないこれまでのPerlの長所を継承します。
  • データの長さ、あるいは位置を扱う既存の関数は、これまで通りバイト単位でそれらを扱います。
  • 文字単位で扱いたい場合は、このソフトウェアが提供している文字指向のサブルーチンを利用することができます。
  • 1つのスクリプト中のリテラル文字列はシフトJIS符号化方式に限定し、UTF8フラグは使いません
  • このソフトウェアとperlインタプリタによって、アプリケーションプログラマに対して文字指向のperl処理系を提供します。
  • 書かれたスクリプトはバイト指向のスクリプトに変換され、perlインタプリタで実行されます。
  • アプリケーションプログラム中に「use Sjis;」と書くだけでシフトJISリテラルを記述できるようになります。
  • 正規表現のリテラルもシフトJISで記述でき、その動作もシフトJISに対応します。
  • DOS/Windows風のOSの場合はディレクトリ名、ファイル名を扱う関数・演算子もシフトJISに対応します。
  • その他の特徴
    • シフトJISそのままの値を扱うことができる
    • オブジェクト指向は導入していない
    • UNIX風のOS、DOS/Windows風のOSの場合は他に必要なモジュールがない
    • perl5.00503からperl5.22まで幅広く実行することができる
    • SjisTkモジュールと組合わせてTkモジュールをシフトJISで利用できる
    • MacOS上でMacJPerlの機能を実現する

※1 ここでいう文字、文字列は利用者およびperl処理系にとってのそれであって、perlインタプリタにとってはバイト列に見えています。モダンPerl用語での文字列ではありません。以降に出現する「文字」「文字列」も同様とします。

データはバイト列として扱うこともでき、文字列として扱うこともできます。
バイト列であるか文字列であるかは、UTF8フラグが決めることではなく、私たち人間
が決めることです。なぜならセマンティックスを扱うためには心が必要だからです。
心を持たないコンピュータはシンタックスしか処理することができません。

「文字を扱っている」のは、コンピュータではなく、人間です。それは最も単純な構
成の ASCII コードでさえそうです。日本語情報処理の場合(例えばシフトJISで対応
する場合など)は、1.数値の桁を増やす、2.数値の桁数が可変となることに対応する、
だけなのでこの基本的な原理は変わりません。

だから「文字列」という用語はインタプリタのためではなく、人間のためにあった方
がよいと考えます。このソフトウェアは「文字列」という用語を私たちのために取り
戻します。

つまり、私たちが文字列だと思っているものが文字列です。

Perlはグルー言語(glue language)のひとつであり、異質なものを結びつけるのを得意
としています。しかしながら、UTF8フラグを使用すると外部文字列と内部文字列の区別
ができ、その結びつけをアプリケーションプログラマが行うことになってしまいます
(ツールの仕事がいつの間にかあなたの仕事に!?)。

既存の言葉の意味を変えなければならないのは、その手法が適切でないことを暗示
していると思われるのです。

Sjisソフトウェアの詳細

このソフトウェアは JPerl on the Modern Perl です。perl を JPerl のようにすることが
でき、日本語をモダンに処理します。ここでいうモダンは、アプリケーションプログラマが
上方に位置する解くべき問題に注力でき、下方に位置するインタプリタの実装都合に煩わ
されない、ということを意味しています。例えば文字コード変換は要件として上方に位置し、
デコードやエンコードはインタプリタの実装都合として下方に位置します。

その一方で、このソフトウェア自身の実装方法は?というとモダンPerlではなくてスタン
ダードPerlです。使うひとにやさしい反面、このソフトウェアを実装・保守する方法は前
近代的、そして標準的です。橋は両岸にかからなければ、その役目を果たせないからです。
近代的なスクリプトは前近代的なインタプリタ上で実行することができません。時間を敵
と考えず、味方と捉えることができれば、過去からも未来からも支持されるソフトウェア
になります。

シフトJISをそのまま処理し、かつ値が [\x80-\xFF] のオクテットは Latin-1 を表すことが
ないため、もはやUTF8フラグは使用しません。

シフトJISは第2オクテットに 

            @ [ ¥ ] ^ ‘ { | } 

など、ダブルクォート文字列や正規表現で特別な役割を果たす 1 オクテット文字と同じ値が
使われています。それに加えてPerlの q qq qx qw m s tr y qr は任意の文字をデリミタに
できるため、クォートしたい文字の第2オクテットがデリミタの値と同じになることがありま
す。このソフトウェアはそれらのオクテットの直前に chr(0x5c) を入れることでエスケー
プし、本来使用したかった2オクテット文字をバイト指向の perl 上で使用できるようにしま
す。なお、インターネット上には「直後」と書かれた資料もありますが、正しくは「直前」で
す。そうでなければエスケープすることができません。 

このエスケープ処理によって文字コードが UTF-8 に変換されることはありません。従来同様、
バイト列はすなわちオクテット列であり、かつ文字列でもあるため、オクテット列として
操作するのか文字列として操作するのかは、必要がない限りperl処理系に指示せずにすみ
ます。

外部コードはそのままの値で内部コードになります。もとい、内部コードとして設計され
たシフトJISを内部コードとして使用することができます。

もとよりマッピングテーブルがない仕組みなので、システムに固有な外字コードを扱う場合
でもマッピングテーブルを追加作成する必要がありません。

ファイル名、ディレクトリ名をシフトJISで取り扱っている環境においてはそれらをファイル
の内容と同様に扱うことができます。これはファイルの中に記述したファイル名をそのまま
perl の組込み関数や演算子に渡せることを意味しています。DOS/Windows 風の OS の場合
はパスの区切り文字として \ が使われているため、それらをうまく扱うためのルーチン も
ランタイムルーチンである Esjis.pm に含まれています。

このソフトウェアが提供する環境では、文字列の長さや文字列中の文字の位置を表すときは
これまで通り 1 オクテットを 1 と数えます。それにより、今までのスクリプトとこれからの
スクリプトは互換性が保たれ、新旧互いにコードを貼りつけあい、実装を継承することに
よって機能を継承することができます。

文字単位で数える関数は Sjis::* という名前で用意されています。例えば文字数を調べる
関数は Sjis::length です。これは言ってみれば関数名のエスケープです。 

このソフトウェアはperl5.00503で書かれているため、現在jperlを利用している人でも気軽に
試すことができます。もし思っていたものと違った場合でも Sjis.pm と Esjis.pm を削除
すればアンインストール完了です。

またPurePerl?なのでXSを利用できない状況でもこのソフトウェアを利用することができます。
XSを使っていないおかげで、バイナリ互換問題に煩わされることがなく、perlインタプリタ
を perl5.8, perl5.10, perl5.12, perl5.14, perl5.16, perl5.18, perl5.20, perl5.22,
64ビット版へと移行するのも容易です。

いままでに蓄積されたデータ、スクリプト、ノウハウを今後も利用できるようにし、シンプ
ルな日本語情報処理モデルを提供することがこのソフトウェアの目標です。  

このソフトウェアが使われる領域

  • 基幹システムの現状
    • 基幹システムは JIS C 6226-1978 または JIS X 0208-1983 を基本としており、
    • 実は JIS X 0208-1990 すらあまり参照されていない
    • 基幹システムでは補助漢字(JIS X 0212-1990)は参照されていない
    • 基幹システムでは第3水準、第4水準(JIS X 0213)は参照されていない
    • 一方で、それらの代わりにシステム外字・私用外字が使われ続けている
    • 基幹システムでは符号化方式が分からないものを推測して処理することはあり得ない
    • いわゆる"情報処理"の場においては可変幅は不便なのでプロポーショナルフォントは利用されていない
  • なぜシフトJISが使われるのか
    • 従来どおり半角カナ(JIS X 0201-1969)をそのまま扱える
    • 従来どおり文字数とバイト数の換算が容易
    • 従来どおりに文字と文字コード値が対応している
    • 従来どおりバイト数と表示幅/印字幅が対応している
    • 従来どおりのソート結果になる
    • 従来どおり外字が簡単に扱える
    • 文字集合の大きさが実務的にちょうどよい(大は小を兼ねない)
    • 文字集合が変わると過去に量子化したデータの解釈が不定になってしまう
  • どうして JIS C 6226-1978 が使われ続けるのか
    • 過去の規格に従って、作成・蓄積(エンコード)されたデジタルデータを現在の規格に従って、表示・印刷(デコード)することはできない
    • 系の一部をひとの脳が担っており、工業規格として改正するのはそぐわない

長さの単位が文字よりもバイトのほうがよい理由

  • 互換性
    • 長さの単位が変わるのは影響が大きすぎます
  • システム的に必要なのはバイト数
    • ファイルテスト演算子 -s が返す値の単位はバイト
    • 通信パケットの長さ
    • コンテンツの長さ
    • 確保すべきメモリのサイズ
    • 確保すべきディスクのサイズ
  • 利用者指向なので文字の数え方は用途(アプリケーション)によって異なる
    • 「ギャッ」は1文字(ギャッ)なのか2文字(ギャ)(ッ)なのか3文字(ギ)(ャ)(ッ)なのか4文字(キ)(゙)(ャ)(ッ)なのか
    • 「か゜」は1文字(か゜)なのか2文字(か)(゜)なのか
    • 「あ゛」は1文字(あ゛)なのか2文字(あ)(゛)なのか
    • 「あ゛ーっ!」は1文字(あ゛ーっ!)なのか <中略> 5文字(あ)(゛)(ー)(っ)(!)なのか
  • 文字といってもcodepointなのかgraphemeなのか
  • 他のシステムに文字数を伝達する場合は、数え方について合意していなければ意味をなさない
  • 自/他、新/旧のシステムの違いを超えて長さの単位になり得るのはバイト
  • ※ただし1バイトは8ビットに限る
 このソフトウェアが想定しているスケジュール

 西暦2015年 -- スクリプトはシフトJISで書かれ、外部データは複数の符号化方式が使われている
   use Sjis;
   require 'jacode.pl';

         西暦2025年 -- あまり状況が変わっていないが、Unicodeの私用面にJIS漢字を(区点順に)割当てるひと達が出現する
               -- そうなると4バイト固定長のほうが分かりやすいのでUTF-8でありながらNULパディングによってどの文字も4バイトで扱う技法が普及し始める
               -- これまでのNULの機能は4バイト版のNULNULNULNUL(通称NUL4)によって実現する
               -- それらによりDIS10646第1版で考えていたことが形を変えてある程度叶う
           use Sjis;
           require 'jacode2.pl'; # 'p15jis' がサポートされる

             西暦2030年 -- 内部コードのはずが、いつか見た光景のように外部コードとしても使われだしてしまう
                   -- 当事者間の私的な合意なのでそれを禁止することができない
                   -- その一方で IVS はめったに使われず、使わないことがあたかも合意されているかのようである

 ※ 個人的な妄想です

参考情報

  • Sjisソフトウェアファミリー
    • Latin1 Latin-1 を扱うときに
    • Latin2 Latin-2 を扱うときに
    • Latin3 Latin-3 を扱うときに
    • Latin4 Latin-4 を扱うときに
    • Latin5 Latin-5 を扱うときに
    • Latin6 Latin-6 を扱うときに
    • Latin7 Latin-7 を扱うときに
    • Latin8 Latin-8 を扱うときに
    • Latin9 Latin-9 を扱うときに
    • Latin10 Latin-10 を扱うときに
    • Cyrillic キリル文字を扱うときに
    • KOI8R ロシア語、ブルガリア語のキリル文字を扱うときに
    • KOI8U ウクライナ語のキリル文字を扱うときに
    • Greek ギリシア文字を扱うときに
    • Arabic アラビア文字を扱うときに
    • Hebrew ヘブライ文字を扱うときに
    • JIS8 JIS8文字を扱うときに
    • TIS620 タイ文字を扱うときに
    • Windows1252 Windows-1252 を扱うときに
    • Windows1258 ベトナム語向けコードを扱うときに
    • Big5HKSCS 香港のコードを扱うときに
    • Big5Plus 台湾のコードを扱うときに
    • EUCTW 台湾の漢字をいっぱい扱うときに
    • EUCJP UNIXで日本語を扱うときに
    • GB18030 中国のコードを扱うときに(4バイトコード)
    • GBK 中国のコードを扱うときに(2バイトコード)
    • HP15 Hewlett-Packard Development Company 社の HP-15 を扱うときに
    • INFORMIXV6ALS Informix V6 ALS を扱うときに
    • UHC 韓国のコードを扱うときに
    • KPS9566 北朝鮮のコードを扱うときに
    • UTF2 UTF-8 を扱うときに
    • OldUTF8 CESU-8, Modified UTF-8 を扱うときに
    • USASCII やっぱり US-ASCII を扱うときに(最も需要が高そう)
  • 関連ソフトウェア
    • jcode.pl - Wikipedia Sjisソフトウェアはjcode.plをもとに作られました
    • jacode.pl 文字コードの変換には jacode.pl が便利です
    • JPerl JPerlとして使えることを目指しています
    • jperl (再配布)本ページは毎日新聞'95データ集から京都大学テキストコーパス Version 3.0の生成に必要なperl 5.005_04および、そのパッチであるjperl 5.005_04-20040401を再配布するためのページです
    • Debian-3.0(woody)用 jperl パッケージこのディレクトリには,Debian-3.0(woody)用に作成した jperl パッケージが 保存されています.
    • Char.pm 文字コードに煩わされずに文字を扱いたいときに便利です
    • SjisTk Tk モジュールのシフトJIS版
    • DBD-mysqlPPrawSjis DBD-mysqlPP のシフトJIS版

TODO/DONEリスト

ina (2012-02-10 (金) 23:20:37)
・m??, ?? のサポート
・バイト指向の正規表現を実現する /b 修飾子のサポート

ina (2012-03-31 (土) 20:08:00)
・\F と fc() のサポート
Perl 5.16 new features
perl5160delta
perl-5.16 ビギナーズセッション(5分?) akiym
・2012-05-25にバージョン0.81としてリリースしました

ina (2012-06-20 (水))
・Sjis 0.81 が Strawberry Perl 5.16.0 および ActivePerl? 5.16.0 にて全テストパスしました。
・正規表現中の文字列クラス m/[here]/ 内に変数が記述できるようにする。

ina (2012-07-29 (日))
・Sjis 0.82 リリースしました。

ina (2012-08-14 (火))
・Sjis 0.82 が Strawberry Perl 5.16.1.1 のテストにて PASS しました。

ina (2012-09-13 (木))
・!~ と s/// を組合せて記述した場合のバグに現在対処中で、テストを進めています。

ina (2012-09-29 (土))
・Sjis 0.83 をリリースしました。

ina (2012-10-24 (水))
・${^WIN32_SLOPPY_STAT} に対応していない件をドキュメントに書く。
・起動時のコマンドラインパラメータをエスケープ後のスクリプト実行時に引き継ぐ部分の見直し中。
・ドキュメントの見直し中。

ina (2012-10-30 (火))
・ニーズが分からず実装も面倒なので、正規表現のクロイスタ(?s)(?i)をサポートせずにいます。
 (?s) は /s 修飾子と .(ドット) と \N で記述できます。
 (?i) は \F ~ \E で工夫して記述する必要があります。

ina (2012-11-29 (木))
・-Duseithreads にてコンパイルされた perl 5.17.x では m?? が正しく動作しません。[perl #115080] m?? doesn't only once match on -Duseithreads
http://www.nntp.perl.org/group/perl.perl5.porters/2012/09/msg193258.html
perl 5.18 までに解決されるといいのですが。
https://rt.perl.org:443/rt3//Public/Bug/Display.html?id=115080
解決されました。

ina (2012-12-12 (水))
・Win32s 環境では動作しませんでした。
・Microsoft Windows 95 で動作確認しました(command.com に対応する箇所、一箇所の変更が必要です)。
・Microsoft Windows NT 4.0 で動作確認しました。

ina (2012-12-23 (日))
・Sjis::getc を作成しました。

ina (2013-01-27 (日))
・Sjis::getc(BAREWORD) のバグを修正しました。

ina (2013-03-22 (金))
・perl 5.14.4 での動作確認しました。
・perl 5.16.3 での動作確認しました。
・Win32モジュールがなくともEsjis::chdirが動作するようにしました。

ina (2013-05-01 (水))
・正規表現で32,767オクテット以上の文字列を扱えるように改良し、ver.0.88をリリースしました。

ina (2013-05-12 (日))
・ver.0.88 での改良は Perl5.10.0 では利用できないようなので、対象をPerl5.10.1以降に変更して、再度 ver.0.89 としてリリースしました。
・Perl 5.18.0-RC1 で全テストがPASSしました。
・Perl 5.18.0-RC2 で全テストがPASSしました。
・Perl 5.18.0-RC3 で全テストがPASSしました。
・Perl 5.18.0-RC4 で全テストがPASSしました。

ina (2013-05-19 (日))
・Perl 5.18.0 で全テストがPASSしました。

ina (2013-06-03 (月))
・Sjis::substr() の lvalue 対応版を作成し、リリース準備完了。

ina (2013-06-08 (土))
・ver.0.90をリリースしました。
・Perl 5.19.0 で全テストがPASSしました。
・ver.0.89での改良をsplit()関数にも適用しました。

ina (2013-07-07 (日))
・ver.0.91をリリースしました。

ina (2013-07-10 (水))
・JIS8、TIS-620、Arabic、Hebrewの作成中。
・MSWin32版PerlでUTF2とOldUTF8のテストがPASSしないことへの対処中。

ina (2013-07-18 (木))
・ver.0.92をリリースしました。

ina (2013-07-26 (金))
・eval "string"; の string 部分をエスケープする方法を検討中。

ina (2013-07-29 (月))
ver.0.88での対応がPerl本体に反映されるならうれしいことです。

ina (2013-08-06 (火))
・Perl 5.18.1-RC1 で全テストがPASSしました。
・Perl 5.18.1-RC2 で全テストがPASSしました。

ina (2013-08-10 (土))
・Perl 5.18.1-RC3 で全テストがPASSしました。

ina (2013-08-13 (火))
・Perl 5.18.1 で全テストがPASSしました。

ina (2013-08-21 (水))
StrawberryPerl? 5.18.1(32ビット) で全テストがPASSしました。

ina (2013-09-03 (火))
ユーザ交流の場を作りました。

ina (2013-09-27 (金))
ActivePerl? 5.18(32ビット実行形式) で全テストがPASSしました。
ActivePerl? 5.18(64ビット実行形式) で全テストがPASSしました。

ina (2013-12-07 (土))
・表面化していなかったファイルテスト演算子部分のバグの修正・テスト中。
Win95Cmd.exeへの対応を検討中。Win95Cmd.exeが日本語に対応していないのでだめでした。
・Perl 5.18.2-RC1 で全テストがPASSしました。
・Perl 5.18.2-RC2 で全テストがPASSしました。

ina (2013-12-25 (水))
・Perl 5.18.2-RC3 で全テストがPASSしました。
・Perl 5.18.2-RC4 で全テストがPASSしました。
・まもなくver.0.93をリリースします。

ina (2013-12-29 (日))
・ver.0.93をリリースしました。

ina (2014-01-07 (火))
・Perl 5.18.2 で全テストがPASSしました。
・UTF2,OldUTF8の fc() をUnicode6.3に対応させ、テスト中です。

ina (2014-01-13 (月))
・ver.0.94をリリースしました。

ina (2014-03-31 (月))
・Perl5.20のsignaturesへの対応を準備する。

ina (2014-04-26 (土))
・ver.0.96をリリースしました。

ina (2014-05-17 (土))
・Perl 5.20.0-RC1 で全テストがPASSしました。

ina (2014-05-27 (火))
・Perl 5.20.0 で全テストがPASSしました。

ina (2014-08-27 (水))
・EUC-TWを作成中です。

ina (2014-09-01 (月))
・yada-yada 演算子をサポートして ver.1.00 をリリースしました。

ina (2014-09-18 (木))
・Strawberry Perl 5.20.1 で全テストがPASSしました。が、t/212_dbmopen.t にて libgdbm_compat-4_.dll、libdb-6.1_.dll、libgdbm-4_.dll のコンポーネントが見つからないというメッセージボックスが表示されました。

ina (2014-11-27 (木))
ActivePerl? 5.20.1 でテストがPASSしました。

ina (2014-11-30 (日))
・eval "string" は eval Sjis::escape("string") という方法でサポートするようにし、現在テスト中です。

ina (2014-12-24 (水))
・今のペースだとリリースは来年になりそうです。eval Sjis::escape("string") のシンタックスシュガー、Sjis::eval("string") も使えるように考えています。

ina (2015-01-01 (木))
・Sjis::eval をサポートして ver.1.02 をリリースしました(この機能を実現するのに1年半もかかりました!)。
・Perl 5.21.7 で全テストがPASSしました。

ina (2015-01-05 (月))
・Sjis::eval のおかげでSjisソフトウェアファミリーをひとつに統合できるのではないかと検討を始めました。

ina (2015-01-12 (月))
・統合後の名前はChar.pmにしようと考えています。続きはChar.pmで。

ina (2015-02-18 (水))
・Perl 5.20.2 で全テストがPASSしました。

ina (2015-03-05 (木))
・Strawberry Perl 5.20.2 で全テストがPASSしました。

ina (2015-05-04 (月))
ActivePerl? 5.20.2(32ビット実行形式) で全テストがPASSしました。
・エスケープ時の実行速度改善を予定しています。

ina (2015-06-02 (火))
・Perl 5.22.0 の対応準備をしています。

ina (2015-06-14 (日))
・まもなくver.1.05をリリースします。

ina (2015-06-15 (月))
・ver.1.05をリリースしました。

ina (2015-06-25 (木))
・ダブルクォートライクの文字列、正規表現はその中に文字列を(それがダブルクォートライクであれば再帰的に)含むことができるので、それらを扱えるように計画中。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-02-23 (土) 18:03:06 (1583d)