Карта 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);
Карта локально устанавливает переменную $_ для каждого значения вашего массива.