重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

perlモジュールをインストールしたいとき、CPANモジュールを使えば手軽に可能ですが、サーバーによってはGCC(コンパイラ)が使えない場合があります。シェル自体が使えないこともあります。
そんなときは、とりあえずダメモトで手動での展開・配置を試みます。
たとえばDate::Simpleなどはこれで問題ないですが、当然、バージョンの整合性や環境に依存するものなどもあり、動かなければ、モジュールの中身やmakeファイルなど調べたり、…などなどすることがあります。
しかし、そもそもモジュールは中身なんて知る必要がないのが利点でもあって、それこそ手軽に機能を使いたいからこそなのに、…などと作業しながら釈然としない気持ちになります。

そこでお聞きしたいのですが、コンパイルしなくても動くかどうかを知る方法、あるいはその情報、どこかに公開されているモジュール別の一覧など、そういうものをご存知ではないでしょうか。
この思いは私だけではない気がするのですが…、皆さんどうなのでしょう。

A 回答 (2件)

モジュール名にPPまたはPurePerlというのがはいっていれば、それは確実にコンパイル不要なモジュールです。


PurePerlとは、「Perlだけで書かれたモジュール」のことです。(PPはPurePerlの略です)
例えば・・・「Digest::SHA::PurePerl」、「XML::Comma::Parsing::PurePerl」、「Crypt::Blowfish_PP」、「Crypt::DES_PP」etc...
これらは、makeしたときに行われるのはファイルのコピー処理だけです。
PPやPurePerlと書かれているのは、通常XS版(コンパイルが必要なもの)とPurePerl版の両方が存在するモジュールの場合がほとんどです。どちらか片方しかない場合は区別する必要がないのでPurePerlなモジュールであってもPPやPurePerlと書かれていない場合もあります。

逆に、コンパイルが必要なモジュールはXSという拡張子のファイルが入っています。
また、コンパイルが必要な物であっても、他のコンピュータでコンパイルし、それを実際に使うサーバーマシンにコピーして使うという方法があります。
この場合の注意点は、コンパイルするマシンをサーバーマシンの環境と同じでないといけない点です。
(例:サーバーがWindowsならコンパイルするマシンもWindows。サーバーがPerl5.8系列ならコンパイルするマシンもPerl5.8系列。)

余談ですが、前述のように同じモジュールでXS版とPurePerl版の両方が存在した場合、負荷と速度から考えるとできる限りXS版を使うべきです。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。
まさしく、そのような情報が欲しかったのです!
名前にPPですか、まったく知りませんでした。確かにPurePerlと言われれば予測がつきそうですね。
別のマシンでコンパイルしておいてコピー、は最終手段として何度か試みたことがあります。それでも中には、他プログラムとの依存関係などあれば、動かないことがあり、結局いろいろ調べることになり…。まあその手段をとる時点で「置くだけ」ではないので仕方がないのですが。

大変有用なご回答、ありがとうございます。

お礼日時:2005/07/21 03:05

釈然としたくなくて手軽にモジュールが使いたいなら制限のないところへ移転すべきでしょう。



制限のある場合で、他言語に依存するものならコンパイルだけでなく特定のディレクトリへのインストールを期待される場合もあるのであきらめるのがよいかと。

コンパイルだけしたいとか,インストール作業は必要ないものの場合は根性入れたらコンパイルできることはあります。(シェルが使えなくとも)
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

> 制限のないところへ移転すべきでしょう。

それはまさに理想なんですが、仕事で行っていると様々な事情が絡むのです…。そしてそのモジュールを使いたい要求が発生することもあります。

おっしゃるとおり、たとえばCPNモジュールやシェルが使えなくてもmakeなど行う手立てはありますが、質問文に書いたようにGCCが使えない場合もあります。それでも展開だけで動くものもあります。
ただ、お聞きしたかったのは、それを判断するための情報なのですが、やはりなかなか無いようですね…。

お礼日時:2005/07/20 18:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!