第十一章 模块:
传统模块为调用者的输入和使用定义了子过程和 变量。面向对象的模块的
运转类似类声明并且是通过方法调用来访问的
如果你的模块的名字是 Red::Blue::Green,Perl 就会把它看作Red/Blue/Green.pm。
11.2 创建模块
我们前面说过,一个模块可以有两个方法把它的接口提供给你的程序使用:符号输出或者允许方法调用
面向对象的模块应该不输出任何东西,因为方法最重要的改变就是Perl以该对象的类型为基础自动帮你找到方法的自身
/********* 第一种使用@EXPORT 来导出符号
Vsftp:/root/perl/7# cat Bestiary.pm
package Bestiary;
require Exporter;
our @ISA =qw(Exporter);
our @EXPORT =qw($weight camel); # 按要求输出的符号
our $VERSION = 1.00; # 版本号
### 在这里包含你的变量和函数
sub camel { print "One-hump dromedary" }
$weight = 1024;
1;
Vsftp:/root/perl/7# cat a10.pl
unshift(@INC,"/root/perl/7");
use Bestiary ;
print "\$weight is $weight\n";
my $var=camel ();
print "\$var is $var\n";
Vsftp:/root/perl/7# perl a10.pl
$weight is 1024
One-hump dromedary$var is 1
/*******************第2种使用@EXPORT_OK
Vsftp:/root/perl/7# cat Bestiary.pm
package Bestiary;
require Exporter;
our @ISA =qw(Exporter);
our @EXPORT_OK =qw($weight camel); # 按要求输出的符号
our $VERSION = 1.00; # 版本号
### 在这里包含你的变量和函数
sub camel { print "One-hump dromedary" }
$weight = 1024;
1;
Vsftp:/root/perl/7# cat a10.pl
unshift(@INC,"/root/perl/7");
use Bestiary ;
print "\$weight is $weight\n";
my $var=camel ();
print "\$var is $var\n";
Vsftp:/root/perl/7# perl a10.pl
$weight is
Undefined subroutine &main::camel called at a10.pl line 5.
此时无法调用,需要use Bestiary qw($weight camel) ;
Vsftp:/root/perl/7# cat a10.pl
unshift(@INC,"/root/perl/7");
use Bestiary qw($weight camel) ;
print "\$weight is $weight\n";
my $var=camel ();
print "\$var is $var\n";
Vsftp:/root/perl/7# perl a10.pl
$weight is 1024
One-hump dromedary$var is 1
11.2.1 模块私有和输出器
require Exporter;
our @ISA = ("Exporter");
这两行命令该模块从Exporter 类中继承下来,我们在下一章讲继承,
但是在这里你要知道的,所有东西就是我们的Bestiary 模块现在可以用
类似下面的行把符号表输出到其他包里:
从输出模块的角度出发,@EXPORT 数组包含缺省要输出的变量和函数的名字: 当你的程序说
use Bestary 的时候得到的东西,在@EXPORT_OK里的变量和函数 只有当程序在use 语句里面
特别要求它们的时候才输出。
Vsftp:/root/perl/7# cat Bestiary.pm
package Bestiary;
require Exporter;
our @ISA =qw(Exporter);
our @EXPORT_OK =qw($weight camel); # 按要求输出的符号
our $VERSION = 1.00; # 版本号
### 在这里包含你的变量和函数
sub camel { print "One-hump dromedary" }
$weight = 1024;
1;
Vsftp:/root/perl/7# cat a10.pl
unshift(@INC,"/root/perl/7");
#use Bestiary qw($weight camel) ;
BEGIN {
require Bestiary;
import Bestiary qw($weight camel) ;
}
print "\$weight is $weight\n";
my $var=camel ();
print "\$var is $var\n";
Vsftp:/root/perl/7# perl a1
a10.pl a1.pl
Vsftp:/root/perl/7# perl a10.pl
$weight is 1024
One-hump dromedary$var is 1