背景:
都面向对象了,无论为什么,都不得不学会之。
正文:
包格式
*.pm >>> 文件名
#!/usr/bin/perl
package PG; #包名
use strict; use warnings; use Data::Dumper;
sub new #所谓的构造函数,但你可以写成其他任何名字,但内容是如此的 { my $this = {}; bless $this; return $this; }
sub memberFun(){ #成员函数
my $this = shift; #如果想在包外调用,就得这样,有点像public
print "Somethin\n";
}
1; #这句怎么强调都不过分,我觉得这是perl的一个挫败设计,为什么呢?它是如此不起眼以至于碰两下删除键就无影无踪了
|
包使用:
*.pl
#!/usr/bin/perl
use strict; use warnings; use Data::Dumper; use lib 'path'; #将包路径加入
use PG; #引入包
my $PG_obj=PG::new(); #多么像java或c++
$PG_obj->memberFun(); #调用成员函数,很像引用
|
骨架就是这样,你可以用它来写出java或c++中最基本的类设计了,但重载,继承等,先别想了。
另一个例子:
package Person; #包名, 最好与文件名相同
sub new{ my $this = {}; #本质是一个哈希引用(指针)
my $type = shift; #接收第一个参数,类名
my %parm = @_; #接收全部参数到一个哈希
$this->{'Name'} = $parm{'Name'}; #初始化各成员变量
$this->{'Age'} = $parm{'Age'}; bless $this, $type; #祝福给$type,此处是自己
return $this; #返回对象
}
sub setName{ my $this = shift; #接收第一个参数,对象本身,在包外调用
$this->{'Name'} = shift; #开始接收其他参数
} 1;
|
调用:
use Person; use strict; my $jack = new Person('Name'=>"jack wang", 'Age'=>23); print $jack->{'Name'}; print $jack->{'Age'}; $jack->setName("Blue zheng"); print $jack->{'Name'}; Person::setName($jack, "Sean Zhao"); #静态调用
|
阅读(527) | 评论(0) | 转发(0) |