2

.pm ファイルの使用方法を学ぼうとしています。2 つのファイルを作成しました。

  • MyScript.pl

      use strict;
      BEGIN {
        unshift(@INC,"./firstdir");
        }
      my @list = qw (J u s t ~ A n o t h e r ~ P e r l ~ H a c k e r !);
    
     use seconddir::MyModule qw(func1) ;
    
     print func1(@list),"\n";     #line 21
     print MyModule::func2(@list),"\n";
    
  • MyModule.pm

     package MyModule; 
    
     use strict;
     use Exporter;
     use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
    
     $VERSION     = 1.00;
     @ISA         = qw(Exporter); 
     @EXPORT      = ();   
     @EXPORT_OK   = qw(func1 func2); 
     %EXPORT_TAGS = ( DEFAULT => [qw(&func1)],
             Both    => [qw(&func1 &func2)]);
    
     sub func1  { return reverse @_  }
     sub func2  { return map{ uc }@_ }
    
      1;
    

ディレクトリの構造は次のとおりです。

 ---------------         ------------     ---------------
 | firstdir ---|------> |seconddir--|-> | MyModule.pm |
 | MyScript.pl |         ------------    ---------------
  ---------------

注: コマンドを実行すると、firstdir と seconddir はディレクトリでありPerl MyScript.pl、次のエラーが表示されます。

Undefined subroutine &main::func1 called at MyScript.pl line 21

何が間違っているのかを理解するのを手伝ってもらえますか?

4

3 に答える 3

2

パッケージ名が間違っています。次のようにする必要があります。

package seconddir::MyModule

次に、次のように呼び出す必要がありますfunc2

print seconddir::MyModule::func2(@list),"\n";

または、 のようにエクスポートしfunc1ます。

于 2013-10-01T10:54:35.090 に答える
1

func1メインスクリプトの@EXPORTように直接呼び出したい場合は、モジュール MyModule.pmの配列にある必要があり ます。func1

于 2013-10-01T10:48:34.210 に答える
0
@EXPORT = qw(func1 func2);

@EXPORTスクリプトからシンボルにアクセスするには、配列にシンボルの名前を追加する必要があります。

于 2013-10-01T11:01:03.360 に答える