尝试使用@INC并按需调用函数

时间:2013-10-01 10:46:37

标签: perl

我正在尝试学习如何使用.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
你可以帮我弄清楚出了什么问题吗?

3 个答案:

答案 0 :(得分:2)

您的包裹名称错误,应该是:

package seconddir::MyModule

然后你应该用:{/ p>打电话给func2

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

或导出它,与func1一样。

答案 1 :(得分:1)

如果您想在主脚本中直接将其称为func1,则

@EXPORT应位于MyModule.pm模块的func1数组中。

答案 2 :(得分:0)

@EXPORT = qw(func1 func2);

您需要在@EXPORT数组中添加符号的名称,以便从您的脚本中访问它们。