中島さんのXPDFJ(http://hp1.jonex.ne.jp/~nakajima.yasushi/)を利用してPDFファイルの生成を試みています。
分らないことだらけではあるのですが、試行錯誤しながらやっておりまして、cgiファイルでいろんな操作をしている中の1つにPDFファイルの作成ができるように、次のように書き、perlチェックをしてみたところその下の内容のエラーが表示されました。
書いた内容
$outfile = "○○.pdf";
$xmlfile = "○○.xml";
use XPDFJ;
$xpdfj = new XPDFJ;
$xpdfj->parsefile($xmlfile, outfile => $outfile);
出てきたエラー内容
Can't locate XPDFJ.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at ○○.cgi line 2760.
BEGIN failed--compilation aborted at ○○.cgi line 2760.
readme.txtを読むと「PDFJを構成する次のモジュールファイル群をPerlから利用できる(すなわち@INCにセットされた)ディレクトリにおけば利用できる」とあるのですが、この@INCにセットされたディレクトリとはどこのことを言っているのでしょうか。
レンタルサーバー(専用サーバーではありません)では扱えない領域なのでしょうか。
No.1ベストアンサー
- 回答日時:
@INCはuseあるいはrequireした時にそのモジュールが探されるディレクトリのリストです。
@INC自体はただの配列なのでpushなどでディレクトリを指定できます。
BEGIN {
push @INC, './lib';
}
# ./lib/XPDFJ.pmがあればエラーは表示されないはず
use XPDFJ;
ちなみにBEGIN { ... }というのは
use XPDFJ;
の前に
push @INC, './lib';
を実行するために必要です。
Perlはコンパイルフェーズ(構文チェックやモジュール読み込みなど)と実際の実行フェーズがあり、
use XPDFJ;
はコンパイルフェーズに行われるので普通に
push @INC, './lib';
use XPDFJ;
と書いたのではuse XPDFJの方が先に実行されてしまうからです。
BEGIN {}の中に記述することでコンパイルフェーズにその中の文が実行されます。
大変分かり易い解説ありがとうございました。
最初相対パスでやっていてうまくいきませんでしたが、フルパスで指定してみたらエラーチェックではOKと出て、まず最初の関所をクリアすることができました。
今は実行してみたら実際にはInternal Server Errorとなりファイルが生成されないことで悩んでます。
まだまだ完成まで遠そうですが、初めてのことで非常に悩んだ場所でしたので、かなり前進しました。
ありがとうございました。
No.2
- 回答日時:
INCはモジュールを検索するパスのようなものです。
> この@INCにセットされたディレクトリとはどこのことを言っているのでしょうか。
エラーメッセージに書かれているとおりです。すなわち、
/usr/lib/perl5/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/5.8.5
/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
.......
デフォルトの値はperlがインストールされているディレクトリなどの情報をベースに決定され、通常は一般ユーザへのパーミッションがないディレクトリのみです。
INC 変数の値に要素を追加したり、環境変数PERL5LIBを設定することで後から追加したりすることもできたはずです。
あと、use lib を使うときに絶対パスを書くことでも対処できます。(セキュリティ的にはベスト)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python エクセル読み込み xlrd...
-
CPAN の初期設定のやり直し方を...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
erf(x)とerfc(x)のカタカナ読み...
-
これはパワハラになりますか?
-
vba 標準モジュールインポート...
-
シャープ製品JH-WB1821 と BCG...
-
Excel VBA 『Call』で呼び出す...
-
パワーポイントでマクロ(Auto_C...
-
ユーザー定義関数に#NAME?が返...
-
Access VBA標準モジュールにつ...
-
エクセルVBA クラスモジュール...
-
Excel VBA 定義されたプロージ...
-
PPMが起動しない
-
グラフのX,Y座標を取得したい
-
VBSがコンパイルエラーになりま...
-
Form間の値の渡し方
-
Perlのライセンス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPAN の初期設定のやり直し方を...
-
Perl+DBD::Oracleのエラーがわ...
-
use lib qw(変数名);は無理?
-
perlのモジュールについて
-
python 環境構築について
-
Pg.pmモジュールがロードできない
-
SpreadSheet::ParseExcelで取得...
-
GLIBC_2.4 以上がインストール...
-
web mart cgi
-
CygwinでPerlのCSV_XSを実行する
-
Python エクセル読み込み xlrd...
-
python
-
DBIをCPANからインストール時に...
-
メールフォームからメール送信...
-
YAMLについて
-
vimのvsplit実行時の挙動に関して
-
HTML::FillInFormが使えない(...
-
@INCにrequireされたファイルが...
-
perl MeCab 和布蕪 エラー
-
DB_Fileモジュールインストール...
おすすめ情報