
This is jperl, version 4.019 + 1.3 Nov 15 1991

$RCSfile: perl.c,v $$Revision: 4.0.1.6 $$Date: 91/11/11 16:38:45 $
Patch level: 19

Copyright (c) 1989, 1990, 1991, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 4.0 source kit.

------------------------------------------------------

Larry Wall氏によるperl(Practical Extraction and Report Language)の
日本語対応版(MS-DOS版の実行形式と、ソースのpatch)です。

jperl13.lzh(MS-DOS版実行形式)には以下のファイルが含まれます。
	readme.sj     - このファイル
	readme.13     - 1.0@4.000からの変更履歴
	jperl.exe     - 日本語対応perlのMS-DOS用実行形式
	perlglob.exe  - ファイル名置換(glob)を行うとき使用される
	cpppp.sed     - -Pオプション時に使用されるsedスクリプト
	cpp.exe       - 〃 C PreProcessor

jperl1.3@4.019.tar.Z(ソースのpatch)には以下のファイルが含まれます。
	readme.sj           - このファイル
	readme.13           - 1.0@4.000からの変更履歴
	jperl1.3@4.019.diff - ソースのcontext diff

patchにはunix用のものもMS-DOS用のものも全て含まれています。
		patch -p -N -d PERLDIR < jperl1.3@4.019.diff
あるいはperlのソースのあるディレクトリで
		patch -p -N < jperl1.3@4.019.diff
とした後 Configure を実行してください。
Makefile.SHに
	KANJIFLAGS = -DKANJI
が加えられており、この状態でコンパイルするとShift-JIS対応になります。
さらに“-DEUC”を加えるとEUC対応になります(こちらはテストしていません)。

unix版はNEWS-1860(NEWS-OS4.0.1C)上でcc/gcc(1.40)を使って
make/make testしました(gccには -traditional を加えました)。
MS-DOS版にはMicroSoft C 6.00Aを使用し、test scriptの殆ど
(MS-DOS上では動きそうもないものを除き、ファイル名やechoの
仕様の違い等を修正したもの)をパスしました。


●漢字対応の範囲

・文字列等
	Shift-JISのとき文字列中の漢字の2バイト目はメタキャラクタと
	衝突しません。
	tokenに漢字を使うことはできません。
	文字列の大小関係は、Cライブラリ関数memcmpに依存します。
	ライブラリ関数のmemcmpがsigned charで比較している場合、
	"A" > "Ａ" となってしまいます。
	このようなときは、config.hで#undef HAS_MEMCMPしてください。
	MicroSoft Cではunsigned charですが、NEWS-OSでは
	signed charでした。

・正規表現
	.        は1バイト/2バイトいずれかの“1文字”と
	[aAａＡ] はアルファベットのエーと
	[ぁ-ん]  はひらがなと
	うあ+    は“うあ”,“うああ”,“うあああああああ”等とマッチします

・tr, y
	tr/Ａ-Ｚ/A-Z/; のように2バイト文字も“1文字”として扱います。
	また、オプションとして'B'を追加しています。
	このオプションが付けられた場合、SEARCHLIST, REPLACEMENT,
	及び置換の対象となる文字列の漢字を意識しません。
	以下の例はEBCDICコードの数字をASCIIに変換します。
		y/\360-\371/\060-\071/B;

・format
	formatされた文字列が漢字境界で切れてしまうような場合、
	' 'をpaddingして揃えます。
	同様に、"..."で終る場合"... "が付けられます。

・chop
	chop は末尾の文字が漢字であるとき、その漢字1文字をはぎ取ります。
	返す文字は漢字1文字(2バイト長)になります。
	もし、末尾の文字が漢字の1バイト目となっているような場合、
	その1バイトをはぎ取ります。
	perl.manの-lオプションの項に示されている80カラムで切り揃える例は
	漢字に対応するためには以下のようにすることになります。
		jperl -lpe 'substr($_, 81)="";chop;'

・split
	split(//) は漢字を意識します。これによって生成される配列は
	バイト単位ではなく文字単位で分割されたものとなります。
	以下の例は、文字列の“文字数”を返します。

		sub jlength {split(//, pop(@_)) + 0;}

	バイト単位での分割が必要な場合はunpackかsubstrを使ってください。

・substr
	substrは漢字を意識*しません*。
	漢字を意識して$off文字目から$len文字切り取るサブルーチンは
	以下のように書くことができます。
		sub jsubstr {
			local($str, $off, $len) = @_;
			local(@s);
			@s = split(//,$str);
			$len = $#s unless $len;
			return join("", @s[$off..($off+$len-1)]);
		}

・index, rindex
	いずれも漢字を意識した検索をおこないますが、
	返す値はバイト位置です。文字位置を返すようなサブルーチンは
	以下のように書くことができます。
		sub jindex {
			local($str, $subs, $pos) = @_;
			local($i);
			return $i if (($i = index($str, $subs, $pos)) < 0);
			return &jlength(substr($str, $[, $i-$[)) + $[;
		}

・-B, -T
	ファイルテスト演算子のうち、-T, -Bでは、0x80〜0xFEの
	範囲にあるcharをodd characterとみなしません。

・reverse
	スカラーコンテキストでのreverseは漢字を意識*しません*。
	漢字を意識してreverseするには

		sub jreverse {join('', reverse(split(//, pop(@_))));}

	のようにしてください。


●MS-DOS版
	コマンドラインはシングルクォート(')でも括れますが、
	| や > 、漢字空白等のcommand.comに解釈されてしまう
	文字はダブルクォート(")で括るようにしてください。
	また、file.[ch]やmanual.{man,doc,txt}のような
	csh風のglobbingが可能です(perlglob.exeも同様)。
	もし、環境変数 "CMDLINE" がセットされていると、
	argumentはこの値から取り出されます。
	また、system()等で子プロセスを呼び出した場合、
	コマンド名と引数がsetenvされます。

	-Pオプションを使う場合には、PATHの通っているところに
	sedとcppが必要です。jperlは、perlスクリプトを読む前に
	sed -f cpppp.sed scriptfile | cpp -DMSDOS -I/usr/local/lib/perl
	を実行します。cpppp.sedをsedが読み込める場所に置いてください。
	添付のcpp.exeは、エル・エス・アイ ジャパン(株)さんのLSI-C試食版に
	含まれているものです。

	globbing (while (<*.c>) {...}のような) を使用する場合には
	perlglob.exe をPATHの通っているところに置いておいてください。
	cshのような[..]および{,}が使えます。これはjperl.exeの
	コマンドライン上でも同様です。
	ソースはmsdos/glob.cとなっており、makeするとglob.exeが
	できますが、perlglob.exeはこれをrenameしたものです。

	system()や``では system("/bin/ls > /tmp/tmp$$"); のように
	pathの句切りに'/'を使っても正しく動作しますが、
	command.comの内部コマンドを実行しようとする場合
	switch characterによっては正しく動作できません。
	また 2>&1 のようにファイルハンドルの切り替えもサポートされて
	います。
		$msg = `cmd -invalid_option 2>&1`;
	は、(たぶん)cmdのエラーメッセージを$msgへ代入します。

	crypt()とNDBMがサポートされています。
	crypt()は森公一郎(kmori)氏の作品で、unixのそれと互換性があります。
	NDBMライブラリはOzan Yigit氏のsdbmをMS-DOSに移植したものです。

●ソース
	以下のファイルが増えています。

		kanji.[ch]       漢字処理用
		msdos/rand.c     randomを呼び出すインターフェース
		msdos/random.c   乱数ジェネレータ
		msdos/xargs.c    ワイルドカード展開
		msdos/cpppp.sed  -Pオプション使用時にsedが使うスクリプト
		msdos/crypt.c    crypt()。森公一郎(kmori)氏の作品
		msdos/ndbm.[ch]  NDBMライブラリ。Ozan Yigit氏のsdbmを
		                 MS-DOSに移植したもの
		msdos/xsystem.c  値を返すsystem()

●バグ
	formatの"^"フィールドは、禁則を行いません。
	$: に漢字をセットしても無視されます。

	$] はオリジナルと同じ値を返します。

	MS-DOS版は80[123]?87を使えません。
	オプション(-FPa)を変更して再コンパイルする必要が有ります。

	jperlは、Junker's Pathologically Eclectic Rubbish Listerの略
	ではありません。

----_--__---_-_-_-__--_-__-__---_-_----_--_-_---_---_-----
serow@ibix.co.jp
pcs19614 (ascii-net pcs)
serow (mix)
