Почему мой метод выдает «isObjectName = SCALAR (0x1289df0)»? - PullRequest
2 голосов
/ 29 ноября 2009

Новичок в ООП с Perl, и у него был быстрый вопрос. У меня есть эта функция в классе:

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 ]

10 голосов
/ 29 ноября 2009

Измените свой метод на:

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

Когда вы вызываете метод для объекта в Perl (т.е. когда вы идете $ object-> Print (...), в данном случае), первый аргумент, передаваемый методу, это сам объект.

9 голосов
/ 29 ноября 2009

Это:

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

(в основном) эквивалентно этому:

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

Первый аргумент любого метода - $self, который является благословенной ссылкой и выглядит ужасно, когда вы печатаете его таким образом. Вы хотите напечатать второй аргумент. См. perlboot и perltoot для получения дополнительной информации.

6 голосов
/ 29 ноября 2009

Если у вас есть такие проблемы, проверьте список аргументов, чтобы увидеть, что происходит:

use Data::Dumper;

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

Вы почти никогда не должны подозревать, что Perl является источником ошибки, по крайней мере, пока вы не устраните почти все остальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...