<pre name="code" class="python">[root@wx03 wx]# cat x1.pm package x1; use Data::Dumper; sub new { my $self ={}; ##引用 my $invocant = shift; my $class = ref($invocant) || $invocant; print "$class is $class "; bless($self, $class); # 给予对象性质 告诉 方法属于哪个对象,$class==x1, bless 引用 特定的包 , ### bless 引用 特定的包 来实现面向对象 print "11111111111111 "; print $self; print " "; use Data::Dumper; my $var= Dumper($self); print "$var is $var "; print "111111111111111 "; return $self; }; sub sum_var { my ($self, ##第一个参数为对象: $var1, # Name or IP number of host to ping $var2, # Seconds after which ping times out ) = @_; my $var3= $var1 + $var2; return $var3; } 1; 对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系。 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的, bless 就是绑定一个数据结构的引用到一个包的名字上。 一个"对象"是指一个“有办法知道它是属于哪个类”的简单引用 bless 函数接收一个或者两个参数,第一个参数是一个引用,而第二个是要把引用赐福(bless)成的包。 如果忽略第2个参数,则使用当前包 所有对象都是引用,但不是所有引用都是对象。 一个引用不会作为对象运转,除非引用它的东西又特殊标记告诉Perl它属于哪个包。 把一个引用和一个包名字标记起来(因此也和包中的类标记起来了,因为一个类就是一个包) 的动作被称作赐福(blessing) 你可以把赐福(bless)看作把一个引用转换成一个对象,尽管更准确地说是它把该引用转换成一个对象引用 Perl类的方法只不过是一个Perl子程序而已,也即通常所说的成员函数。Perl的方法定义不提供任何特殊语法, 但规定方法的第一个参数为对象或其被引用的包。 Perl提供了bless()函数,用于返回一个引用,并成为一个对象。 -------------------------------------------------------------------------------------------------- [root@wx03 wx]# cat x1.pl unshift (@INC,"/root/wx"); require x1; $ed = x1->new(); print $ed->sum_var(1,5); print " "; [root@wx03 wx]# perl x1.pl $class is x1 11111111111111 x1=HASH(0x23e82f0) $var is $VAR1 = bless( {}, 'x1' ); 111111111111111 6