こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

pp (Perl Packager) で requireの代わりになるもの

ActivePerl v5.8.7 をWin-2000で使っています。

オリジナルのスクリプト内で、これもオリジナルのモジュールをrequireしている場合に、
ppでexe形式に変換できるのですが、他のPCでコピーして使おうとしたときに、
”require先のファイルが無い”とエラーになってしまいます。
これを回避する方法はないでしょうか?
(requireの代わりに、該当箇所にモジュールファイルの内容すべてをペーストしてしまう、ということで一時凌ぎはできるのですが、何か違うような気がしています)
よろしくお願いいたします。

------------------------
#!perl
require "c:\\perl\\sub\\userfunc.pm";
:
:
------------------------

pp -o sample.exe sample.pl c:\perl\sub\userfunc.pm

とやって、exeを作っています。

(c:\perl\sub\userfunc.pmを持たないPCで)実行すると、
C:\>sample.exe
Can't locate c:\perl\sub\userfunc.pm in @INC (@INC contains: ・・・/inc CODE(0xdca6ac) . CODE(
0xdca7cc)) at script/sample.pl line 2.

投稿日時 - 2006-10-13 19:11:28

QNo.2470179

困ってます

質問者が選んだベストアンサー

userfunc.pmをsample.plと同じフォルダに入れて
pp -o sample.exe sample.pl userfunc.pm
としたらどうですか?

こちらで試したところではパスを\ではなく / で指定すれば大丈夫のようでしたが、、、
i:\home\tarou\pblic_html\test.pl
i:\home\jcode.pl  の場合に test.pl中にrequire "i:/home/jcode.pl"; と記述して

pp -o test.exe testpl i:\home\jcode.pl だと実行時にエラー
pp -o test.exe testpl i:/home/jcode.pl だと実行可能 でした。

参考URL:http://www.perldoc.jp/docs/modules/PAR-0.75/script/pp.pod

投稿日時 - 2006-10-13 20:13:41

補足

Makefileで汎用的に書いてみました。私自身用にもメモ。

# Makefile for Perl Package

SRC=\
sample.pl\

INC=\
c:\perl\sub\

TARGET= $(SRC:.pl=.exe)

# PL (*.pl)
PP= pp

### rules ###

all:$(TARGET)

.SUFFIXES: .pl .exe
.pl.exe:
$(PP) $< -I $(INC) -o $@

投稿日時 - 2006-10-17 16:20:54

お礼

お返事が遅くなり、大変申し訳ありません。
ご回答ありがとうございました。
教えて頂いた方法を参考に、次のようにしました。
(1)スクリプト内では、require "userfunc.pm";のようにパス名なしのファイル名を記述。
(2)ppコンパイル時に、 /I オプションを付けて、c:\\perl\\sub のパスを明示。

こうすることで、exeの中にモジュールファイルも組み込まれるようで、
他のPerlを入れていないPCへ持っていっても使うことができるようになりました。

以上、遅くなりましたが、お礼まで。

投稿日時 - 2006-10-17 16:20:46

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)