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";
    
  • 我的模块.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 回答