
perlモジュールをインストールしたいとき、CPANモジュールを使えば手軽に可能ですが、サーバーによってはGCC(コンパイラ)が使えない場合があります。シェル自体が使えないこともあります。
そんなときは、とりあえずダメモトで手動での展開・配置を試みます。
たとえばDate::Simpleなどはこれで問題ないですが、当然、バージョンの整合性や環境に依存するものなどもあり、動かなければ、モジュールの中身やmakeファイルなど調べたり、…などなどすることがあります。
しかし、そもそもモジュールは中身なんて知る必要がないのが利点でもあって、それこそ手軽に機能を使いたいからこそなのに、…などと作業しながら釈然としない気持ちになります。
そこでお聞きしたいのですが、コンパイルしなくても動くかどうかを知る方法、あるいはその情報、どこかに公開されているモジュール別の一覧など、そういうものをご存知ではないでしょうか。
この思いは私だけではない気がするのですが…、皆さんどうなのでしょう。
No.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版を使うべきです。
ご回答いただきありがとうございます。
まさしく、そのような情報が欲しかったのです!
名前にPPですか、まったく知りませんでした。確かにPurePerlと言われれば予測がつきそうですね。
別のマシンでコンパイルしておいてコピー、は最終手段として何度か試みたことがあります。それでも中には、他プログラムとの依存関係などあれば、動かないことがあり、結局いろいろ調べることになり…。まあその手段をとる時点で「置くだけ」ではないので仕方がないのですが。
大変有用なご回答、ありがとうございます。
No.1
- 回答日時:
釈然としたくなくて手軽にモジュールが使いたいなら制限のないところへ移転すべきでしょう。
制限のある場合で、他言語に依存するものならコンパイルだけでなく特定のディレクトリへのインストールを期待される場合もあるのであきらめるのがよいかと。
コンパイルだけしたいとか,インストール作業は必要ないものの場合は根性入れたらコンパイルできることはあります。(シェルが使えなくとも)
ご回答いただきありがとうございます。
> 制限のないところへ移転すべきでしょう。
それはまさに理想なんですが、仕事で行っていると様々な事情が絡むのです…。そしてそのモジュールを使いたい要求が発生することもあります。
おっしゃるとおり、たとえばCPNモジュールやシェルが使えなくてもmakeなど行う手立てはありますが、質問文に書いたようにGCCが使えない場合もあります。それでも展開だけで動くものもあります。
ただ、お聞きしたかったのは、それを判断するための情報なのですが、やはりなかなか無いようですね…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
モジュールとクラスの違いって...
-
グラフのX,Y座標を取得したい
-
モジュールからフォームのボタ...
-
ユーザー定義関数に#NAME?が返...
-
acwzlibとは?
-
現在アクティブなフォーム名を...
-
VBA This Workbookモジュール...
-
'Range'メソッドは失敗しました
-
モジュールの最大数はいくつな...
-
vba userFormのSubを標準モジュ...
-
標準モジュールを削除したい。(...
-
テンポラリ?ユニークなファイ...
-
VBでグローバル変数を宣言するには
-
Form間の値の渡し方
-
VBのフォームモジュールと標準...
-
気のせいでしょうか?
-
システムエラーの内容
-
Excelシート内セル記述の違いに...
-
エクセルVBA クラスモジュール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 定義されたプロージ...
-
VBでグローバル変数を宣言するには
-
vba userFormのSubを標準モジュ...
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
モジュールからフォームのボタ...
-
大量の標準モジュールを解放す...
-
acwzlibとは?
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
VBA モジュールで共通に使う変...
おすすめ情報