使用Perl的OOP新手,只是有一个简单的问题.我在课堂上有这个功能:
sub Print{
my $text = shift;
print "my text is", $text;
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过这样做来打印文本:
my $object = ObjectName->new();
$object->Print("Print this text")
Run Code Online (Sandbox Code Playgroud)
它打印这个:
my text isObjectName=SCALAR(0x1289df0)
我的问题是,它为什么要这样做,我怎样才能简单地打印我作为参数传递的文本?
asj*_*sjo 10
将您的方法更改为:
sub Print{
my ($self, $text) = @_;
print "my text is", $text;
}
Run Code Online (Sandbox Code Playgroud)
当你在Perl中的一个对象上调用一个方法时(例如,当你去$ object-> Print(...)时),传递给该方法的第一个参数就是对象本身.
这个:
$object->Print("Print this text");
Run Code Online (Sandbox Code Playgroud)
(大部分)与此相当:
ObjectName::Print($object, "Print this text");
Run Code Online (Sandbox Code Playgroud)
任何方法的第一个参数是$self,这是一个有福的参考,当你打印它时看起来很难看.您想要打印第二个参数.有关详细信息,请参阅perlboot和perltoot.
当您遇到这些问题时,请检查您的参数列表以查看发生了什么:
use Data::Dumper;
sub Print {
print Dumper( \@_ ), "\n";
...;
}
Run Code Online (Sandbox Code Playgroud)
你应该几乎从不怀疑Perl是一个bug的来源,至少在你消除了其他所有东西之前.