为什么我的方法打印“isObjectName = SCALAR(0x1289df0)”?

时间:2009-11-29 08:32:31

标签: perl oop

使用Perl的OOP新手,只是有一个简单的问题。我在课堂上有这个功能:

sub Print{
    my $text = shift;
    print "my text is", $text;
}

我尝试打印文本,这样做:

my $object = ObjectName->new();
$object->Print("Print this text")

打印出来:

my text isObjectName=SCALAR(0x1289df0)

我的问题是,为什么要这样做?如何才能将其作为参数打印出来?

3 个答案:

答案 0 :(得分:10)

将您的方法更改为:

sub Print{
    my ($self, $text) = @_;
    print "my text is", $text;
}

当你在Perl中的一个对象上调用一个方法时(例如,当你去$ object-> Print(...)时,在这种情况下),传递给该方法的第一个参数就是对象本身。

答案 1 :(得分:9)

此:

$object->Print("Print this text");

(大部分)与此相当:

ObjectName::Print($object, "Print this text");

任何方法的第一个参数是$self,这是一个有福的参考,当你打印它时看起来很难看。您想要打印第二个参数。有关详细信息,请参阅perlbootperltoot

答案 2 :(得分:6)

当您遇到这些问题时,请检查您的参数列表,看看发生了什么:

use Data::Dumper;

sub Print {
     print Dumper( \@_ ), "\n";
     ...;
}

你几乎不应该怀疑Perl是一个bug的来源,至少在你消除了其他所有东西之前。