使用对象方法的 Perl 映射

Perl map using object method

我有一个 Perl 模块文件 MyClass.pm,其中包含非常基本的 class 定义。

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.

我是不是用错了地图功能?或者可能无法将对象方法用作第一个参数?

您需要向 displayChar 方法传递一个值:

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

map 在本地将 $_ 变量设置为数组的每个值。