在perl中返回函数的关联数组

use*_*754 3 perl hash associative-array

是否可以创建返回函数的关联数组?类似的东西

%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });
Run Code Online (Sandbox Code Playgroud)

谢谢

Сух*_*й27 6

这是可能的,但您可能希望my ($x) = @_;代替$x = @_;删除函数名称,因为您正在处理匿名函数.

然后你可以调用函数 $a{first}->([arg])

my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });
Run Code Online (Sandbox Code Playgroud)

  • 你需要删除函数名,只使用`=> sub {..}` (2认同)

Dav*_*man 5

如此接近......你错过的一个细节是你在那里定义一个匿名子,所以你不应该给它起一个名字:

$ perl -E '%a = (first => sub { $x = @_; sprintf("(first %s)", $x); }); say $a{first}->(3);'
(first 1)
Run Code Online (Sandbox Code Playgroud)

(注意,有$x = @_,你设置$x的是项目数@_,而不是数组中的第一项,这就是输出为"first 1"而不是"first 3"的原因.)