2008年2月 8日

Perlスクリプトをexeファイルに変換

(2011.1.23追記)
同様の用途であれば、PARがおすすめ。
--------------

ふと、そういったものがあるのではと考えて探してみた。

Perl2Exe Home Page (IndigoStar Software)
PerlスクリプトをEXE形式の実行ファイルへ変換「Perl2Exe Lite」 (窓の杜)

perl2exeでは正規表現や2次元の連想配列(ハッシュ)を多用した、複雑なスクリプトも変換して実行できた。
Cで書くのは辛い文字列処理等がある変換ツール等を、配布する場合にはかなり便利。値段がちょっと高いのが難点。

さらに調べてみたらperlcc というのもあるのね。
ActivePerl 5.6.1 Build635 で変換したものは、print "Hello World\n"; だけでもNGだったのだが、
5.8.8 Build822 ではOK。下記のスクリプトくらいだったら、問題なく実行できたのだが、、、(続く)

#!/cygdrive/c/usr/Perl/bin/perl

%Values;

$Values{'test'} = "Hello,World\n";

foreach ( keys %Values )
{
print;
print "\n";
print $Values{$_};
}

前述の1000行近くある複雑なスクリプトだとNG。
perlccは 5.10では削除されているくらいで(下記参照)、

perldelta - perl 5.10.0 の新機能

あまり使えるものではないようだ。
ちなみに、ActivePerl の perlcc と Visual C++ でのビルド の仕方。あてずっぽうでやったがうまくいった。
C:\usr\Perl に ActivePerl 5.8 をインストールしているとする。
まず、perlcc.bat -c hogehoge.pl で hogehoge.c を生成する。

Visuial C++ (私の環境は.NET 2003)では「Win32 コンソール プロジェクト」を作成し、アプリケーションの設定で"空のプロジェクト"をチェックして「完了」。
あとはプロジェクトに既存項目の追加で前述の hogehoge.c を追加する。
あとは、プロジェクトのプロパティで、
・C/C++ 全般の 「追加のインクルード ディレクトリ」に C:\usr\Perl\lib\CORE を入れる。
・リンカ の 全般の「追加のライブラリディレクトリ」にも同じく C:\usr\Perl\lib\CORE を入れる。
・リンカ の 入力の「追加の依存ファイル」に perl58.lib を入れる。

これでビルドした exe ファイルは perl58.dll を同じディレクトリに置くか、パスを通しておけば実行できる。

コメントする