• ベストアンサー

自作モジュールを認識しない

Perl 5.8 自作モジュールのあるフォルダをFOLDER、モジュールの名前をMODULEとして以下のコードを実行してもモジュールが見つからない旨のメッセージが表示されます。 モジュールの拡張子は.pmを使用しています。 また、モジュールを標準の拡張モジュールのおき場所に置いた場合は適切に動作しました。 #! /usr/local/bin/perl push (@INC ,FOLDER); use MODULE;

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

BEGIN { push (@INC ,FOLDER); #あるいは、 #unshift (@INC ,FOLDER); } してやればいいです。 どっちかというと use lib FOLDER; してやる方が簡単です。

shirousa01
質問者

お礼

回答ありがとうございます。 use lib FOLDER; の方法を使用することにしました。 なるほど、BEGINを使用するということは、useはコンパイル時に実行されるのですね。 単純な勘違いでした。

その他の回答 (1)

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.2

これでもいいかと思います。 package MODULE; use Exporter; @ISA = (Exporter); @EXPORT = qw(subroutine); sub subroutine{ ... } return 1; これを、MODULE.pm として、メインのスクリプトで use MODULE; &subroutine();

参考URL:
http://www.rfs.jp/sb/perl/04/01.html
shirousa01
質問者

お礼

回答ありがとうございます。 お教えいただいた方法は、幾分助長なため、今回は簡単に使用できる#1の方の方法で実装する事にしました。

関連するQ&A

  • メインルーチンの変数をモジュールに渡す

    Perlの勉強をし始めの者なんで、恥ずかしい質問ですけど・・・ モジュールの使い方です。 以下のプログラムではTest_module.pmで定義した変数$testをメインルーチンでprintしています。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  print $Test_module::test; ***** Test_module.pm *****  package Test_module;  our $test=10;  1; これはちゃんと動いています。 ところが逆にメインルーチンで定義した変数$testをTest_module.pmに渡そうとすると、うまくいきません。 以下のプログラムをどう直せばいいのでしょうか。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  &Test_module::print_test(); ***** Test_module.pm *****  package Test_module;  sub print_test {  print $Main::test;  }  1;

    • ベストアンサー
    • Perl
  • Perlでモジュールを作りましたが、

    use A::AA; 自作のA::AAのPerlモジュールをインストールしましたが、いざ使うときに Can't locate A/AA.pm in @INC (@INC contains: ... とエラーが発生しました。 A/AA.pmの存在の確認はとれましたが、何か関連付けさせる仕組みが必要なのでしょうか? C:\usr\site\lib\aに aa.pmが入っています。

    • ベストアンサー
    • Perl
  • perlのモジュールについて

    Linuxを使って間もない者です.xamppをLinuxにインストールしたのですが、モジュールの格納場所が違っているせいかうまくCGIスクリプトがうまく実行できません. Linux上でのperlモジュールの格納場所を教えていただけないでしょうか? 以下エラー内容 Can't locate JSON/PP.pm in @INC (@INC contains: /usr/lib/perl5/5.8.6/i386-linux-thread-multi /usr/lib/perl5/5.8.6 /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi 省略・・ /usr/lib/perl5/vendor_perl/5.8.6 //usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2 /usr/local/lib/site_perl .) at (eval 4) line 3.

  • useする自作のモジュールについて。

    perlで自作のモジュールをuseしたいのですが、その際参照するディレクトリをモジュールごとに指定するためにはどうしたらいいのでしょうか? 例えばあるスクリプト中でA.pmとB.pmをuseして、A.pmは一つ上の階層、B.pmは二つ上の階層のディレクトリを参照するという形です。 この際libで呼ぶのではなくアパッチでA.pmの場合はここを参照、B.pmの場合はこことしたいのですがどなたかご教授下さい。 環境 apache2.2系 Linux(ubuntu)

  • Perlのモジュールが極端に少ない

    OS(CentOS 6.2 / 64bit)にデフォルトでインストールされているPerl(version 5.10.1)を使って勉強しているのですが、参考書に記載されているメジャーなモジュールがインストールされてなく、困っています。 自分でインストールする必要があるのかと思い、モジュールのインストール方法を調べたところ、CPANというモジュールを使えば簡単にモジュールがインストールできると知ったのですが、このCPANモジュールも入っていない模様。 ではまずはCPANモジュールから手動でインストールしようかと思ったところ、CPANモジュールインストール時のMakefile.PLを実行すると、ExtUtilsというモジュールが無いと怒られてしまい実行できませんでした。 このような場合、通常よく使われるようなモジュールをまとめてインストールするような方法は無いのでしょうか。 ※ちなみに、@INCでは以下のディレクトリが登録されていました。 ・/usr/local/lib64/perl5 ・/usr/local/share/perl5 ・/usr/lib64/perl5/vender_perl ・/usr/share/perl5/vender_perl ・/usr/lib64/perl5 ・/usr/share/perl5

    • ベストアンサー
    • Perl
  • パッケージとモジュールについて

    こんにちは。Perlを学習し始めた初心者です。 Perl 5.87を使っており、標準モジュールを使う方法を書籍で読みました。 例えば、フォームに入力、送信されたデータを処理するために use CGI; と最初に記述して使うことができますが、 別のエラー処理の構文を見ると $CGI::POST_MAX と1行目に記述してあります。 パッケージとモジュールの概念が、よく分かっていないので戸惑って います。 C:\perl\lib にある、CGI.pmというモジュールを使用していると思う のですが、use CGI;と記述するときと $CGI::と記述するとき、何が異なるのでしょうか? 後者はCGI.pmの中にある、POST_MAX変数を使うということでしょうか? パッケージという言葉を見ても、よく分からずネットで随分調べましたが、余計に分からなくなってしまいました。 お忙しいところ申し訳ありませんが、よろしくお願い致します。

    • ベストアンサー
    • Perl
  • Perlのモジュール呼び出しについて

    Perlのモジュール呼び出しについて質問があります。 windows2000/apache/perlの組合わせにより LOCALでWebサーバを構築しています。 かなり初心者質問で申し訳ありませんが、以下の内容で困っています。 Web上で use XXX と書いたperlを呼び出すと Can't locate XXX.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at (プログラムの場所) となって動作しません。 XXX.pmはC:/Perl/libにあることは確認しました。 ただしDOS上で同じplファイルを起動させると 問題なく動作しました。 何処に問題があると考えられますか? みなさまのお知恵をお貸し下さい。 よろしくお願いします。

  • make 時に標準以外のディレクトリにインストールされたモジュールを見つけるには

    perl を /usr/local にインストールし、AppConfig を以下のようにインストールしました。 % perl Makefile.PL PREFIX=/opt/perl % make % make test # make install この結果、AppConfig に依存関係がある Template-Toolkit をインストールしようとした際に AppConfig を見つけられずに以下のようなエラーが出てしまいます。 % perl Makefile.PL PREFIX=/opt/perl % make % make test # make install Can't locate AppConfig.pm in @INC (@INC contains: blib/lib blib/arch /usr/local/lib/perl5/5.8.8/i386-linux /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/i386-linux /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl .) at bin/ttree line 32. BEGIN failed--compilation aborted at bin/ttree line 32. コマンドラインから perl を起動する場合ですと、-I オプションを使えばよいのでしょうが (-I/opt/bugzilla/lib/perl5/site_perl/5.8.8)、Makefile.PL から Makefile を作成する際に、これと同様のことを行う方法はないでしょうか? ダメな場合、Makefile のどこを修正すれば INC にパスを追加できるのでしょうか?

    • ベストアンサー
    • Perl
  • cpanからモジュールをインストール後

    お世話になります。 ネットで調べcpanからモジュールをインストールしました。 # su - # perl -MCPAN -e shell 最初の起動時に質問が出てきてリターンと少しの設定後、 cpan>install XML::RSS # find `perl -e 'print "@INC"'` -name 'RSS.pm' -print ./.cpan/build/XML-RSS-1.05/lib/RSS.pm ./.cpan/build/XML-RSS-1.05/blib/lib/XML/RSS.pm の形でインストールされているのを確認しました。 で、その後、perlのCGIの方で実行すると、 Can't locate XML/RSS.pm in @INC (@INC contains: ./mylib /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 rss.cgi line 10. BEGIN failed--compilation aborted at rss.cgi line 10. になってしまうんですが、次はどうすればよいのでしょうか

    • ベストアンサー
    • Perl
  • モジュールはどこで入手するのでしょうか?

    先日perlを始めたものです。 use SOAP::Lite でSOAPに関するモジュールを使用したいのですが、 SOAP/Lite.pm が無いと言われます。 たとえばこのモジュールはどこで手に入るのでしょうか? 手に入ったモジュールはperlのパスにそのまま置けば良いのでしょうか? 以上、よろしくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう