是否可以在Perl中的哈希构造函数中定义匿名子例程?
我正在尝试做这样的事情:
my %array = { one => sub { print "first $_[0]" },
two => sub { print "next $_[0]" },
three => sub { print "last $_[0]" }};
$array{$foo}->('thing');
Run Code Online (Sandbox Code Playgroud)
但它没有用.代码似乎运行和编译,但数组中的值是空白的.如果我这样做:
my %array;
$array{'one'} = sub { print "first $_[0]" };
$array{'two'} = sub { print "next $_[0]" };
$array{'three'} = sub { print "last $_[0]" };
$array{$foo}->('thing');
Run Code Online (Sandbox Code Playgroud)
然后它似乎工作正常.所以我有一个解决方法,但它只是困扰我,我想知道是否有人知道它是否可能,如果是,那么语法是什么.
Ada*_*ire 11
看起来你正在错误地分配哈希.使用{}构造一个匿名哈希引用,您可以将其指定给标量.但是你要分配一个命名的hash(%array).
你需要分配一个标量:
my $array = { one => sub { print "first $_[0]" },
two => sub { print "next $_[0]" },
three => sub { print "last $_[0]" }};
$array->{$foo}->('thing');
Run Code Online (Sandbox Code Playgroud)
或者不使用anon构造函数语法:
my %array = ( one => sub { print "first $_[0]" },
two => sub { print "next $_[0]" },
three => sub { print "last $_[0]" });
$array{$foo}->('thing');
Run Code Online (Sandbox Code Playgroud)
那是因为在第一种情况下,你创建一个hashref而不是一个hash,你想要的是:
my $array;
$array = { one => ... }; # not %array = { .. };
...
$array->{one}->('thing');
Run Code Online (Sandbox Code Playgroud)