Карта Perl с использованием метода объекта

У меня есть файл модуля Perl MyClass.pm с очень простым определением класса.

use strict;
use warnings;

package MyClass;

sub new {
    my $this = shift;
    my $self = {};
    bless $self, $this;
    return $self;
}

sub displayChar{
    my $self = shift;
    my $char = shift;
    print $char . "\n";
}

1;

Также у меня есть myClass.pl файл, который создает экземпляр MyClass.

#!/usr/bin/perl
use strict;
use warnings;

use MyClass; 
my $myClass = MyClass->new();

$myClass->displayChar('a'); # This line works right

my @charArray = ('a', 'b', 'c');
map($myClass->displayChar, @charArray);

Когда я звоню displayChar метод работает правильно, но когда я пытаюсь использовать функцию map с этим методом, он выдает мне эту ошибку три раза (я думаю, один раз на элемент массива):

Use of uninitialized value $char in concatenation (.) or string at MyClass.pm line 16.

Я неправильно использую функцию карты? Или, может быть, невозможно использовать метод объекта в качестве первого параметра?

1 ответ

Решение

Вы должны передать значение вашему displayChar метод:

map($myClass->displayChar($_), @charArray);

Карта локально устанавливает переменную $_ для каждого значения вашего массива.

Другие вопросы по тегам