Perl 5.6 for Windows CE
Perl on WinCEとして現在のところ、2つのプログラムがあります。
Perlそれ自体と、PerlIDEと名づけられたシンプルなエディタです。
このプログラムはほぼ全てのWinCEプラットホームで、つまり当然WinCE200とPalm Size PC上で実行できます。
CEPC/X86用のビルドがあります。
新着情報 (News)
- 2001年10月27日(土)
- Win32::APIとWin32::OLEが移植されました。Win32::OLEはADOCEと併せて利用することができます。
- 2001年11月03日(土)
- 標準モジュールのロードがおかしなぐらい遅い理由についてプロファイルレポートを追加しました。
Perl
一切のPerlライブラリが、このバイナリアーカイブには含まれていません。
標準的なPerlのディストリビューションからコピーする必要があります。
ごくわずかなxs DLLだけはこのアーカイブに含まれています。
PerlIDE
PerlIDEはPerl用のシンプルなエディタです。
これを使ってスクリプトを作成し、出力を表示させることができます。
カーソルをエラーと行番号の行に当てると、その行に移動することができます。
特徴と制限 (Features/Limitations)
- パイプと外部コマンドを使っていないPerlスクリプトは問題なく動くでしょう。
- 標準出力とカーソル位置に対する、シンプルなターミナルエスケープが使えます。
- いくつかのXS DLLがサポートされます。 (IO/Socket/Dumper/NDBM/SDBM).
- fork()は使えません。
- スレッドとPerlObject?は使えません。
- celib.dllを呼ぶプログラムとの間で、シンプルなパイプを使えます。
- 新しくWin32::APIおよびWin32::OLEモジュールが用意されました。
インストール方法 (Installation)
- デバイスにあったアーカイブを取得し、ZIP形式になっているので、PC上で解凍してください。WinZipのSmart CRLF conversionをオフにするのを忘れないで下さい。解凍されたファイルをデバイスにコピーしてください。
- 最新のcelib.dllを取得し、\windowsディレクトリにコピーしてください。
- MicrosoftのPowertoys for PocketPCに含まれているレジストリエディタか、私のcereg.exeを使ってレジストリエントリを作成します。cereg.exeはPC上で実行してください。この際、ActiveSyncの接続が確立されている必要があります。アーカイブにはサンプルバッチファイルが含まれています。
- PerlIDEへのリンクをデスクトップに作成してください。
- PerlIDEを起動し、オプションダイアログを確認してください。
- .plをクリックするとPerlスクリプトが起動されるように、通常Win32でしているのと同様に、HKEY_CLASSES_ROOTに1つないし2つのキーエントリーを作成します。
- 通常のPerlディストリビューションからファイルをデバイスにコピーしても構いません。このとき、同じバージョンのPerlから持ってきていることを確認してください。
- Perl for WinCEに含まれていたファイルは、上書きしないで下さい。
- UNIXROOTDIR(以下を参照)にDEVディレクトリを作成してください。これは/dev/nullやnullのふりをします。
- getservbyname() でサービスのポートを検索するには、servicesファイルを$UNIXROOTDIR/etc/servicesに作成する必要があります。
Registry
以下がActiveSyncによる接続を確立したPC上で実行することのできるバッチファイルのサンプルです。cereg.exeはこちらにあります。
set perlpath=\Storage Card\perl
set perlexe=%perlpath%\bin\perl.exe
set perllib=%perlpath%\usr\lib\perl5
::- PERL5LIB
cereg -k "HKLM\Environment" -n "PERL5LIB" -v "%perllib%"
::- For ShellExecute
cereg -k "HKCR\.pl" -n "" -v "perlfile"
cereg -k "HKCR\perlfile" -n "" -v "Perl Script"
cereg -k "HKCR\perlfile\DefaultIcon" -n "" -v "%perlexe%,-1"
cereg -k "HKCR\perlfile\Shell\open\command" -n "" -v """"%perlexe%""" ""%%1"""
::- Misc
REM Height of 10 is ok, 14 does almost full screen
cereg -k "HKLM\Environment" -n "ROWS" -v "14"
REM MAX Width for PPC is 29 Chars
cereg -k "HKLM\Environment" -n "COLS" -v "29"
cereg -k "HKLM\Environment" -n "PATH" -v "\Storage Card\bin;%perlpath%\bin"
cereg -k "HKLM\Environment" -n "UNIXROOTDIR" -v "\Storage Card"
問題点 (Problems)
- Autoloaderを使うには、PERL5LIBが通常のスラッシュ(/)を含む必要があります。私はこの問題をまだ追跡していません。
- Casio E100では、ROM上にsocket.dllが存在するようです。これはリネームするべきでしょう - Perlに同梱されているsocket.dllで置換え、XSLoader.pm パッチがこの置き換えたDLLを呼び出すようにします。
- WINCE200デバイスでは、perl56.dll、celib.dll、そしてcedialogs.dllをwindowsディレクトリにコピーする必要があります。これは他のOSバージョンでは必須ではありませんが、しかしどの場合でも良いアイディアだと言えるでしょう。
- WINCE200デバイスではmsvcrt.dllが必要です。これはwindowsディレクトリにコピーする必要があります。msvcrt.dllはこちらにあります。
- 同一のファイルハンドルへの読み込みと書き出しは動作しません。これはRAWファイルに対しては動作するでしょう。これについては、いずれFIXします。
- DOSやWin32のような、テキストモードはサポートされません。全てのファイルはバイナリモードで開かれます。
- デバイスネームをチェックすることでファイルネームが絶対パスかをチェックするようなPerlコードは動作しないでしょう。
- perl -vは、いくつかのデバイスではハングします。
- コンソールウィンドウはPerlが終了したときに閉じられます。コンソールウィンドウへの出力を見たいときは、短いメッセージを表示してReturnの入力を求め、プログラムの終わりではSTDINからの読み込みを行えば良いでしょう。
- ROWが未設定だったり、あまりに大きな値に設定されている場合、コンソールウィンドウは突然イカレちまうでしょう。
- レジストリ由来の環境変数を$ENVで見ることができません。このバグは新しいリリースでFixされます。
- cereg.exeはいくつかのWCE211/PalmSize?デバイスで動作しないことが報告されています。
パフォーマンス
合理的にやろうとして標準モジュールを全て読み込むやりかたは、速度的に遅い類です。私はいくつかのアセンブリと、/Ghオプションを使うシンプルなプロファイラをハックしました。ここにWin32::Serialの材料を読み込むためのプロファイラレポートがあります。私にはこれ以上、効果的にするための短所になるアイディアはありません。Emacs同様、標準モジュールがプレロードされ、Perl内にダンプされるようにするのがベストでしょう。
Notes
今では私のコンソールを使う全てのプログラムには--noconsoleオプションが備わっています。これを使うと、コンソールウィンドウは表示されません。
celib.dllは最新のものを使い、他のパッケージに含まれているもので上書きなどしていないことを確かめてください。celib.dllの新しいビルドは下位互換性を持っています。
パイプが必要で単に他のプログラムからの出力を読み込みたいだけのときは、これの標準出力ファイルをrootディレクトリから読むことができます。これは私のcelib.dllを使っているプログラムでのみ働きます。
Future
Perl 5.7が試験に入ろうとしています。Windows CE版は標準のPerlディストリビューションの一部になるでしょう。