やっぱりすごいperl PC98のMS-DOSからWin8まで同じ実行ファイルで!

LinuxやWEBで有名なperlは、ほとんど全てといっても過言ではない程のOSで稼働します。
たまたま、私はPC98シリーズのMS-DOSperlの強力な正規表現を使用したく、コンパイル済みの実行ファイルを
所有しています。
今になって、かなり秀逸では!?と思ったのでblogにしました。

実行ファイルは1ファイルだけでいい!
perl.exe
だけでOKです。
普通にインストールと関連スクリプトが数百のファイルがインストールされてしまうperlですが、
CGIでなければ、この1つだけあれば大抵のバッチ的な用途はOKです。
しかも、PC98版MS-DOSでも、ネット上のperlの知恵・知識がそのまま使えます。
ファイル・ディレクトリ操作も一通りの動作ができてます。
まだPC98やMS-DOSをお使いの方も多いと思いますので、実行を以下のブリーフケースに
置いておきますね。
GPLのものなのとフリーなので、全て自己責任にてお願いします。

Yahooの共有フォルダ変更に伴い、新しいURLに更新しました。
http://yahoo.jp/box/L6qB_c
上記のはリビジョン5.004_02(5.0リソースキット)ですが、T98-NEXTエミュ内ではDPMIエラーとなり使用できません。(実機では問題ありません。ちなみにEMMにはMELEMMを使用しています。)
ベクターにある
http://www.vector.co.jp/soft/dos/util/se000203.html?ds
ものやCPANのものではうまく動作しませんでした。2013.7.23附記

perl -v 実行時の表示
---------------  ここから  ---------------
This is perl, version 5.004_02

Copyright 1987-1997, Larry Wall


MS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis
djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996
djgpp v2 port (perl5004) by Laszlo Molnar, 1997

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 5.0 source kit.

---------------  ここまで  ---------------


※動作環境に、Windows 8 Consumer Preview 32bit日本語版 を追加します!!!コマンドプロンプトで動作しました。
 他に、Windows XP SP2、Windows7 でも動作します。
 PC9801やPC9821のMS-DOS5.0A-Hでも、windows8でも動作するとはすごい・・・
 動作内容は、ディレクトリの再帰正規表現でファイル内を検索、そして各ディレクトリで
 バッククォートによるコマンド実行まで正常に動作します。
 以下が実際のプログラムです。
※補足ですが、エミュレータのAnex86では動作しますが、T98-NextだとDPMIがサポートされていないようで
 DPMI関連のエラーで起動できません。



;#2012.3.26
;#第1引数の正規表現(例: \x1B\x64 )を含むファイルを、カレント以下の
;#全てのディレクトリのファイルから検索する。
;#ファイル中のバイナリ(外字)を含む行を知りたかったので作成。
;#

#-- 再帰実行 --#
reflexiveFile('.');

#-------------------------------------------#
#■ディレクトリ配下を全て表示
#-------------------------------------------#
sub reflexiveFile{
my $dir = shift;
my @list = ();

#-- カレントの一覧を取得 --#
opendir(DIR, $dir) or die("Can not open directory:$dir ($!)");
@list = `dir /b $dir`; #/bはディレクトリのファイル・フォルダ名のみ表示するオプション
# @list = readdir(DIR); #特定の漢字を含むファイル名のとき(Ⅲ、新)、文字化けしてしまうようです。
closedir(DIR);

foreach $file (sort @list) {
chop $file; #dirコマンドで改行コードも混入してしまうので、ここで改行を削除します。
next if( $file =~ /^\.{1,2}$/ ); # '.' と '..' はスキップ

#-- ディレクトリの場合は自分自身を呼び出す --#
if( -d "$dir/$file" ){
reflexiveFile("$dir/$file");
}
#-- それ以外は表示 --#
else{
# print `perl -ne "print \\"\$ARGV:\$_\\" if /\\xba\\x82/" $dir\\$file`;
print `perl -ne "print \\"\$ARGV:\$_\\" if /$ARGV[0]/" $dir\\$file`;
}
}
}