在Perl中生成函数引用数组

在Perl中生成函数引用数组,perl,Perl,我有很多以给定前缀开头的函数。我想创建这些函数的数组,然后逐个执行它们 考虑: use v5.12; my @names = qw(a b); my @ss = map { "s".$_ } @names; sub sa { say "a"; } sub sb { say "b"; } 这里的函数前缀是s。如何逐个调用这些函数,例如,使用for循环。。?(我尝试在map命令中插入\&,但没有成功。) 请注意,所有函数都将采用相同的参数,这就是为什么我认为这样做可能很有用…

我有很多以给定前缀开头的函数。我想创建这些函数的数组,然后逐个执行它们

考虑:

use v5.12;

my @names = qw(a b);
my @ss = map { "s".$_ } @names;

sub sa {
    say "a";
}

sub sb {
    say "b";
}
这里的函数前缀是
s
。如何逐个调用这些函数,例如,使用
for
循环。。?(我尝试在
map
命令中插入
\&
,但没有成功。)

请注意,所有函数都将采用相同的参数,这就是为什么我认为这样做可能很有用…

一种可能的方法:

use 5.012;

my @names = qw(a b);
my @ss    = map { \&{"s$_"} } @names;

sub sa {
    say "a";
}

sub sb {
    say "b";
}

&$_() for @ss;
。简而言之,对函数的引用是存储的。请注意,在严格模式下,在
@ss
中存储子例程名称并调用这些名称(使用
&
sygil)会失败:

“严格引用”时不能将字符串(“sa”)用作子例程引用

也许只有我一个人,但我更愿意在散列中定义这些函数:

my %hof = (
  a => sub { say 'a'; },
  b => sub { say 'b'; },
  c => sub { say 'c: ' . $_[0]; },
);

$hof{$_}('something') for sort keys %hof;
输出

a
b
c: something
一种可能的办法:

use 5.012;

my @names = qw(a b);
my @ss    = map { \&{"s$_"} } @names;

sub sa {
    say "a";
}

sub sb {
    say "b";
}

&$_() for @ss;
。简而言之,对函数的引用是存储的。请注意,在严格模式下,在
@ss
中存储子例程名称并调用这些名称(使用
&
sygil)会失败:

“严格引用”时不能将字符串(“sa”)用作子例程引用

也许只有我一个人,但我更愿意在散列中定义这些函数:

my %hof = (
  a => sub { say 'a'; },
  b => sub { say 'b'; },
  c => sub { say 'c: ' . $_[0]; },
);

$hof{$_}('something') for sort keys %hof;
输出

a
b
c: something