Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么我的方法会打印;isObjectName=标量(0x1289df0)“;?_Perl_Oop - Fatal编程技术网

Perl 为什么我的方法会打印;isObjectName=标量(0x1289df0)“;?

Perl 为什么我的方法会打印;isObjectName=标量(0x1289df0)“;?,perl,oop,Perl,Oop,对Perl的OOP还不熟悉,只是有一个简单的问题。我在一个类中有这个函数: sub Print{ my $text = shift; print "my text is", $text; } 我尝试通过以下方式打印文本: my $object = ObjectName->new(); $object->Print("Print this text") 它打印这个: 我的文本isObjectName=标量(0x1289df0) 我的问题是,为什么它会这样做?我如何让

对Perl的OOP还不熟悉,只是有一个简单的问题。我在一个类中有这个函数:

sub Print{
    my $text = shift;
    print "my text is", $text;
}
我尝试通过以下方式打印文本:

my $object = ObjectName->new();
$object->Print("Print this text")
它打印这个:

我的文本isObjectName=标量(0x1289df0)

我的问题是,为什么它会这样做?我如何让它简单地打印我作为参数传递的文本

$object->Print("Print this text");
(大部分)相当于:

ObjectName::Print($object, "Print this text");
任何方法的第一个参数都是
$self
,这是一个很好的参考,当您这样打印它时,它看起来很难看。您想打印第二个参数。有关更多信息,请参阅和。

将方法更改为:

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

在Perl中对对象调用方法时(即,在本例中,当您转到$object->Print(…)时),传递给该方法的第一个参数是对象本身。

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

use Data::Dumper;

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

您几乎不应该怀疑Perl是bug的来源,至少在您消除了几乎所有其他错误之前。

我正在阅读perlboot,刚刚检查了perltoot,似乎找不到解决方案。我会重读这两篇文章,看看我是否能找出我做错了什么。这一节(“继承构造函数”)专门讨论你想要的内容。谢谢Chris,我一直在胡闹“ref”,试图让它起作用。我现在就去看看那个部分!另一个答案包含了大量的信息,但我会马上选择你的答案:)OOP新手?看看麋鹿:酷,现在就看看,肯特!感谢您提供的调试信息,我以后一定会记住这一点!