使用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)
我的问题是,为什么要这样做?如何才能将其作为参数打印出来?
答案 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
,这是一个有福的参考,当你打印它时看起来很难看。您想要打印第二个参数。有关详细信息,请参阅perlboot和perltoot。
答案 2 :(得分:6)
当您遇到这些问题时,请检查您的参数列表,看看发生了什么:
use Data::Dumper;
sub Print {
print Dumper( \@_ ), "\n";
...;
}
你几乎不应该怀疑Perl是一个bug的来源,至少在你消除了其他所有东西之前。