Perl Class

在介绍perl面向对象概念(perl Class)之前,让我们先来理解引用(References)、匿名数组和哈希。
引用(References)
- 顾名思义,就是引用或指向其它对象。
- 分两种类型的引用:符号引用和硬引用或绝对引用(Hard Reference)
- 符号引用又称为软引用,只包含他们所指向的名字。例如$foo变量中包含”bar”字符串,那么指向$foo的符号引用就是$bar.
例子:###符号引用的例子 my $foo = "bar"; $$foo = "为动态变量\$bar赋值"; print "\$bar=$bar"; ###输出---$bar=为动态变量$bar赋值-----
- 硬引用是指向包含于一个数据结构中的实际数据。
例子:###硬引用的例子 my $foo = "bar"; my $hardRef = $foo; print $hardRef; ###输出---bar------
创建硬引用
一元运算符反斜杠\被用于创建指向命名变量或子函数,例如:
$foo = 'Bill'; $fooRef = \$foo;
变量$fooRef现在就包含一个指向变量$foo的硬引用。你可以对其它变量做同样的事情。
###数组 $array = \@ARGV; ###哈希 $hash = \%ENV; ###输出 $glob = \*STDOUT;
下面的例子是讲怎样创建子函数的硬引用:
sub foo { print "foo" }; $foosub = \&foo;
匿名数组
创建匿名数组很容易。
#使用中括号而不是括弧来定义匿名数组$array标量变量 $array = [ 'Bill', 'Ben, 'Mary' ];
该行右侧构成了一个数组,左侧包含了这个数组的引用。事实上你可以使用内嵌数组来创建更为复杂的数据结构。例如:
@arrayarray = ( 1, 2, [1, 2, 3]);
变量@arrayarray包含三个元素,而且第三个元素是匿名数组的引用。
匿名哈希
匿名哈希也是很容易创建的。与数组相比,你实际上只需用大括号替代中括号。
$hash = { 'Man' => 'Bill', 'Woman' => 'Mary, 'Dog' => 'Ben' };
解引用(Dereferencing)
解引用最直接的方法是在指定的数据加前置符号(例如对标量加$,对数组变量加@,对哈希变量加%和对子函数变量加&)
$array = \@ARGV; # 创建对数组的引用 $hash = \%ENV; # 对哈希的引用 $glob = \*STDOUT; # Create reference to typeglob $foosub = \&foo; # 对子函数的引用 push (@$array, "From humans"); $$array[0] = 'Hello' $$hash{'Hello'} = 'World'; &$foosub; print $glob "Hello World!\n";
对象基本概念
讲述perl怎样处理对象之前,先介绍类的三个基础概念:对象、类、方法。
- 对象(perl Object):在Perl中,对象是指向类的。
- 类(perl Class):在Perl中,类是用于创建和操纵对象的方法的集合。
- 方法(perl Method):方法定义于集合中是子函数,方法的第一个参数是对象引用或集合名,这个取决于这个方法影响当前对象或者是类。
Perl提供bless()函数用于返回引用并成为对象。
定义类
定义一个类非常简单,在Perl中,一个类对应于一个包。为创建类,你必须首先定义一个包。一个包是一个用户自定义变量和子函数自包含单元,同时可以被重用。
在Perl中为声明名字为Person的类:
package Person;
作用区域该包内部,或者遇到另外一个关键字”package”。
创建和使用对象
为创建类实例,我们需要一个对象构造器。这个构造器是包里的一个方法。大多数开发者使用new作为构造器,但是事实上在Perl中可以使用任何一个。
package Person; sub new { my $class = shift; my $self = { _firstName => shift, _lastName => shift, _ssn => shift, }; # Print all the values just for clarification. print "First Name is $self->{_firstName}\n"; print "Last Name is $self->{_lastName}\n"; print "SSN is $self->{_ssn}\n"; bless $self, $class; return $self; }
类中的每一个方法都会传类名为第一个参数。因此在上述例子中,类名为”Person”,因此如果输出$class的话,返回的就是”Person”。其它的参数将会是该函数的参数。
$object = new Person( "Mohammad", "Saleem", 23234345);
分类: 收拾好你的东西