@EXPORT 和@EXPORT_OK区别

[root@node01 lib]# cat Pk01.pm 
package Pk01;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(munge frobnicate);  # symbols to export on request
sub munge{
    my $a=shift;
    my $b=shift;
    return $a+$b;
};
sub frobnicate{
    my $a=shift;
    my $b=shift;
    return $a*$b;
};

1;
[root@node01 lib]# cat a1.pl 
use Pk01 qw(munge frobnicate);
print munge(22,33);
print "
";
print frobnicate(22,33);
print "
";
[root@node01 lib]# perl a1.pl 
55
726


此时都正常输出:




[root@node01 lib]# cat a1.pl 
use Pk01;
print munge(22,33);
print "
";
print frobnicate(22,33);
print "
";
[root@node01 lib]# perl a1.pl 
Undefined subroutine &main::munge called at a1.pl line 2.


这个导致Perl来加载你的模块 但是不导入任何符号表  



[root@node01 lib]# cat Pk01.pm 
package Pk01;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(munge frobnicate);  # symbols to export on request
sub munge{
    my $a=shift;
    my $b=shift;
    return $a+$b;
};
sub frobnicate{
    my $a=shift;
    my $b=shift;
    return $a*$b;
};

1;
[root@node01 lib]# cat a1.pl 
use Pk01;
print munge(22,33);
print "
";
print frobnicate(22,33);
print "
";
[root@node01 lib]# perl a1.pl 
55
726

@EXPORT 这个导入所有的符号从YourModule's @EXPORT 到你的名字空间

原文地址:https://www.cnblogs.com/hzcya1995/p/13349454.html