Perl中神奇的@EXPORT

@EXPORT数组

Perl经过继承,能够使子类能够像使用本地方法同样使用其基类的方法。函数

一个类若是想把本身的方法(变量)暴露给别人使用(好比一些公共基础类的的通用方法或变量),还可将直接将方法(变量)添加到内置数组@EXPORT中便可。示例以下:spa

[xywang@mnsdev13:~/]$ cat Fred.pm
package Fred;
use Exporter 'import'; @EXPORT = qw(flintstone $var);

sub flintstone{

return 99;
};
our $var="SADA1311";
1;

[xywang@mnsdev13:~/]$ cat test.pl 
#!/usr/local/bin/perl5
use Fred  ;
print $var;
print "\n";

print flintstone;

[xywang@mnsdev13:~/]$ ./test.pl
SADA1311
99

  注意除了将方法和变量加入到@EXPORT中之外,还须要在最开始的时候use Exporter来支持:blog

use Exporter 'import';

  或者继承

use base qw(Exporter); 

@EXPORT_OKio

Perl中还有个@EXPORT_OK.class

@EXPORT和 @EXPORT_OK基本相同,惟一的区别是若是在@EXPROT中指定的函数或者变量,在其余的地方能够经过use 这个package直接使用该package中export的方法和函数,可是若是在@EXPORT_OK中指定了,在use时,单独use 这个package不行,必须把package中的要使用的EXPORT_OK中的方法名也列出来,如:test

[xywang@mnsdev13:~/test/OO/test2]$ cat Fred_export_ok.pm
package Fred_export_ok;
use Exporter 'import';
@EXPORT_OK = qw(flintstone $var);

sub flintstone{

return 99;
};
our $var="SADA1311";
1;

[xywang@mnsdev13:~/test/OO/test2]$ cat  test.pl
#!/usr/local/bin/perl5
use Fred_export_ok;
print $var;
print "\n";

print flintstone;

[xywang@mnsdev13:~/test/OO/test2]$ ./test.pl


[xywang@mnsdev13:~/test/OO/test2]$ 

  发现如上test脚本没有任何输出。 可是若是修改test.pl以下:import

[xywang@mnsdev13:~/test/OO/test2]$ cat test.pl
#!/usr/local/bin/perl5
use Fred_export_ok qw(flintstone $var);
print $var;
print "\n";

print flintstone;

[xywang@mnsdev13:~/test/OO/test2]$ ./test.pl
SADA1311
99

参考资料:https://stackoverflow.com/questions/17912400/export-vs-export-ok-in-perl基础

相关文章
相关标签/搜索