常见错误之七: 在面向对象的编程中,错误地调用类内部函数。 以代码作为例子: err.pl文件: #! /usr/bin/perl -I./ -w use module; my $var=module->new(); print “call1:n”; $var->call(); print “call2:n”; $var->call2(); print “ncall3:n”; $var->call3(); 下面是module.pm: package module; sub new { my $self={}; bless $self; return $self; } sub call { my ($self)=@_; $self->_call(“something as an Argument”); } sub call2 { my ($self)=@_; _call($self,”something as an Argument”); } sub call3 { my ($self)=@_; _call(“something as an Argument”); } sub _call { my ($self,$arg) = @_; if($arg) { print “yes ,We got an argument!n”; } print “self:”.$self.”n”; } 1; 现在我们运行err.pl: renlu@localhost$ chmod +x err.pl renlu@localhost$ ./err.pl 输出的结果是: call1: yes ,We got an argument! self:module=HASH(0x1f85e88) call2: yes ,We got an argument! self:module=HASH(0x1f85e88) call3: self:something as an Argument 第一第二个执行结果一样,第三个不一样?这也很容易让程序出错。我今天下午调了一下午 最后发现是这个原因。特地记录一下。