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

解決済みの質問

HTML::Embperlが使えない!

HTML::Embperlをインストールしてプログラムを作成したのですがエラーになってしまうのです!

OSはRed Hat Linux 8で
Perlはv5.8.0 built for i386-linux-thread-multiで
HTML::EmbperlはHTML-Embperl-1.2b4-2.i386.rpmです。

原因を特定するために次のとおり、いたって単純なプログラムを作成しました。
#!/usr/bin/perl -w
use strict;
use HTML::Embperl;

これを実行すると
Can't locate loadable object for module HTML::Embperl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-t
hread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at ./try line 3
Compilation failed in require at ./try line 3.
BEGIN failed--compilation aborted at ./try line 3.
のように長々とエラーメッセージが出てしまいます。

$ ls -l /usr/lib/perl5/site_perl/HTML/Embperl.pm
-r--r--r-- 1 root root 39448 2月 15 1999 /usr/lib/perl5/site_perl/HTML/Embperl.pm

HTML::Embperlのインストール自体は成功していると思うのですが・・・
誰か、他に何をチェックすればいいか教えてください~

投稿日時 - 2007-07-07 18:48:45

QNo.3147472

暇なときに回答ください

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

一言「Read Documents」に尽きるようです.

RPMに過分な信頼をおいてはいけません.
RPMをパッケージした人の環境に激しく依存する可能性が高いですし,
そもそもパッケージした人がspecファイルを間違ったりしてたら
もう終わりです.実際いわゆる「野良RPM」だと結構あるわけです.
#ディストリ公認のものだとそういうことは案外少ないけど
#RedHat8っていまでもメンテナンスされてる?

で。。。CPANから直接ファイルを入手してきて
「きちんとインストールの手順書」を読みましたか?
それから,先にいれたRPM版をきちんとRPMの流儀にのっとって
削除しましたか?
同じモジュールを異なる方法でインストールして
整合がとれなくなると悲惨なことになるのはお分かりでしょうか?
とくにバージョンが異なっていることにお気づきですか?
#RPMはたぶん1.2b4でCPANは2.2.0,互換性がなくても不思議なくらい
#バージョンが違います.
#実際わざわざ2.0のReadmeに「1.xとの互換性」なんて項目があります

>このディレクトリーの中にEmbperl.pmがあったので
>このディレクトリーの名前をHTMLへ変更して/usr/lib/perl5/site_perlへ移動しました。

こんなことを手動でするようにどこかに書いてありましたか?
手作業でできるほど生半可なモジュールではないはずですよ.
実際,展開したディレクトリに install.podがあります
それを読みましたか?
perl Makefile.PL
make
make test
make install
この手順を踏めとかいてあるはずです.

それと。。。CPANからファイルを落としてくるのと
CPANモジュールを使うのは別物です.
CPANモジュールはPerlモジュール用のrpmとかaptみたいなものです.
依存関係を考慮して,自動でやってくれる優れものです.
使い方はCPANモジュールそのもののマニュアル
例えば,
perldoc cpan
をしてください.

投稿日時 - 2007-07-08 10:36:33

お礼

kabaokabaさん、ご返信ありがとうございます。
RPMを過信してはいけないのですね。
現在レッドハット8がメンテされてるかどうかは知りませんが、私のレッドハットはCDからインストールしただけのヤツなのでノーメンテ版ですね・・・
とにかくRPMはCDに入ってるものに限って使用した方が無難ってことですね。
CPANで入手したファイルの手順書は読んでいないのです・・・。
RPMの流儀にのっとって削除するとはrpmコマンドを使用してアンインストールすることと認識してよいでしょうか。それならちゃんとやったのですが・・・。

INSTALL.podというのを見てみました。
そして予想はしていましたが日本語でないため、読むのは断念しました。
そこで、いつもの手段なのですが、良く分からないけど、ひとまず
perl Makefile.PL
make
make test
make install
を実行してみました。

そして、どうにかインストールできたようです。
しかし、これでもプログラムは動きませんでした。
今、思ったのですが
私がインストールしたのはEmbperl
だけど、私がインストールしたかったのはHTML::Embperlだったのでは!?
CPANを検索してみたら案の定EmbperlとHTML::Embperlが別々のファイルとして出てきました。
ですので今からEmbperlを消してHTML::Embperlを入れ直さないといけないのです。
インストール方法は教えていただいたとおり覚えました。
もしよければ削除方法も教えてもらえないでしょうか^^;

投稿日時 - 2007-07-08 21:11:50

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

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

回答(3)

ANo.3

とりあえず。。。
>私のレッドハットはCDからインストールしただけのヤツなのでノーメンテ版ですね・・・
いや・・・そういうことではなくって。。。
外部公開サーバではないことと祈りつつ。。

本題.
>そして予想はしていましたが日本語でないため、読むのは断念しました。
手厳しいことをいうようですが,論外です.
高校程度の英文であるのが普通なので辞書を片手に読みましょう.

>もしよければ削除方法も教えてもらえないでしょうか^^;
やはり一言「Read Document」です.
ぐぐってもすぐにそれらしい情報に行き着きます.
cpan unistall
くらいはやってみてください.

投稿日時 - 2007-07-08 21:32:26

お礼

kabaokabaさん、ご返信ありがとうございます。

これは手厳しいですね。
でもスミマセン、今回は読まずに導入させてください・・・
まだ外部には公開していませんので、見逃してください・・・

アンインストール方法についてネットで調べたのですが、これも断念してしまいました;;
その代わりに興味深いコマンドの情報を入手しました。
cpan2rpmというコマンドなのですが、
なんと、このコマンドはCPANのモジュールをRPM形式に変換してくれるそうです。
rpmの使い方ならまだ分かるので、これは私にはおあつらえ向きです。
このコマンドを使用してHTML::EmbperlのRPM化に成功しました。
しかし、rpmコマンドでこれをインストールしようとしたのですが、
足りないモジュールがありインストール出来ませんでした。
足りないモジュールをインストールするためにcpan2rpmコマンドを使用して、順次RPMを導入していったのですが、
中には、そのモジュールをインストールするためには更に、いくつかのファイルが足りず、
さらにそのファイルをインストールするためには、またさらに他の部品が足りず、というように階段状に、足りないものを次々報告され、
目的のHTML::Embperlをインストールためには、色々なモジュールをインストールする必要があり、気が遠くなってしまいました。
そう言うわけでcpan2rpmを使用してのHTML::Embperlのインストールは断念しました。

そして振り出しに戻りCPANから入手したHTML::Embperlをインストールすることにしました。
これはkabaokabaさんに教わったとおり
perl Makefile.PL
make
make test
make install
とやるだけで、あっという間にインストール出来てしまいました。
そして、私が作成したプログラムも無事動かすことが出来ました。

さて、残った問題は、誤ってインストールしてしまったEmbperlの削除です。
別に残しておいても問題無いとは思うのですが、不要なものはなるべく消したいですよね。
今使っているマシンは、つい最近テスト用にレッドハットを入れたばかりですので、
思い切ってレッドハットを入れ直しました^^
そういう訳で結局アンインストールの方法は探せませんでしたが、今回はこれでOKとします。

投稿日時 - 2007-07-12 23:11:14

ANo.1

> Can't locate loadable object for module HTML::Embperl
というメッセージが出ているので、HTML::Embperlそのものではなく
それが呼び出しているモジュール(多分XS(C)でかかれたもの)が
見つからないのではないでしょうか?

CPANモジュールを使ってインストールしたならテストを行うので
インストールに成功したかどうかは一目瞭然なのですが、

> HTML::EmbperlはHTML-Embperl-1.2b4-2.i386.rpmです。

rpmで入れたときはどうかはわかりません。
いずれにしろインストールがきちんとできていないような気がするのですが、
なぜ成功したと思ったのでしょうか?

投稿日時 - 2007-07-08 01:28:10

補足

sakusaker7さん、ご返信ありがとうございます。
なるほどHTML::Embperlが何か別のモジュールを呼んでいるけど、それが私のリナックスに入っていない可能性があるわけですね。
しかし私の過去の経験上、足りない部品があるなら、何が足りないのかエラーメッセージが教えてくれるはずなのです。
エラーに出てこない以上、私がHTML::Embperlを呼んで自力で探すことになるとは思うのですが、
その前にCPAN版を試したいと思います。
しかし私はRPM以外のソフトを入れた経験がほとんどないので、教えてほしいのです。
まずCPANでEmbperl-2.2.0.tar.gzを入手して
# tar -zxf Embperl-2.2.0.tar.gzを実行すると
Embperl-2.2.0というディレクトリーができあがります。
このディレクトリーの中にEmbperl.pmがあったので
このディレクトリーの名前をHTMLへ変更して/usr/lib/perl5/site_perlへ移動しました。
しかしこれだけではダメなようです。
プログラムを実行すると@INCにEmbperl/Syntax.pmがない旨のメッセージが表示されます。
それもそのはず、Embperl/Syntax.pmは
/usr/lib/perl5/site_perl
ではなく、その下の
/usr/lib/perl5/site_perl/HTML
に存在していたのです。
ですのでこのSyntax.pmの入ったEmbperlフォルダーを
/usr/lib/perl5/site_perlへコピーしたところ
今度はEmbperl.pmが@INCに存在しない旨のメッセージが表示されたのです。
だって、これについては、私が明示的に
/usr/lib/perl5/site_perlでなく
/usr/lib/perl5/site_perl/HTMLへ置いたのですものね。
しようがないのでEmbperl.pmも/usr/lib/perl5/site_perlへコピーしました。
これでも、まだエラーになります。
次のエラーはRPM版をインストールしたときのと似ています。
Can't locate loadable object for module Embperl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-
multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20
Compilation failed in require at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20.
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20.
Compilation failed in require at /usr/lib/perl5/site_perl/HTML/Embperl.pm line 29.
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/HTML/Embperl.pm line 29.
Compilation failed in require at ./try line 3.
BEGIN failed--compilation aborted at ./try line 3.
という内容です。
どうやら、まだ色んなものが足りてないようですね・・・
というかEmbperlのインストールのやり方が間違っているのかな??
何かお気づきの点がありましたら教えてください。

ところで
> なぜ成功したと思ったのでしょうか?
と言われて初めて気が付いたのですが
そもそも私はRPMが正しくインストールできたか確認する方法を知らなかったのです。
rpmコマンドで何もエラーメッセージが表示されず、かつ@INC中にHTML/Embperl.pmが存在していましたので
私は何も疑わずインストールは成功したのだと思いこんでいたわけです。
良く分かってはいないのですがRPMという仕組みに絶対的な信頼をおいていたわけです・・・^^;

投稿日時 - 2007-07-08 08:53:32

あなたにオススメの質問