Perl中神奇的@EXPORT


@EXPORT

Perl通過繼承,可以使子類可以像使用本地方法一樣使用其基類的方法。

一個類如果想把自己的方法(變量)暴露給別人使用(比如一些公共基礎類的的通用方法或變量),還可將直接將方法(變量)添加到內置數組@EXPORT中即可。示例如下:

[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來支持:

use Exporter 'import';

  或者

use base qw(Exporter); 

@EXPORT_OK

Perl中還有個@EXPORT_OK.

@EXPORT和 @EXPORT_OK基本相同,唯一的區別是如果在@EXPROT中指定的函數或者變量,在其他的地方可以通過use 這個package直接使用該package中export的方法和函數,但是如果在@EXPORT_OK中指定了,在use時,單獨use 這個package不行,必須把package中的要使用的EXPORT_OK中的方法名也列出來,如:

[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如下:

[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM