perl - 调用 perl 匿名子例程,其引用保存在散列中
问题描述
我如何调用 perl 匿名子例程,其引用保存在哈希中?
这是代码
#!/usr/bin/perl -W
use strict;
use warnings 'FATAL';
use diagnostics;
use utf8;
sub fn {
my $href = $_[0];
my %h = %{ $href };
print %h;
my $cref = $h{'p'};
&$cref();
}
fn p => sub { print "inside anon function\n" };
1;
谢谢你的时间。
解决方案
您的 sub 期望传递一个哈希引用,但您没有传递一个哈希引用。您传递一个字符串 ( p
) 和一个代码参考。那是因为
fn p => sub { print "inside anon function\n" };
是相同的
fn "p", sub { print "inside anon function\n" };
使固定:
sub fn {
my %h = @_;
my $cref = $h{p};
$cref->();
}
fn p => sub { print "inside anon function\n" };
这会在 sub 内部构建散列。如果您想在外部构建散列并传递对它的引用,它将如下所示:
sub fn {
my $href = $_[0];
my $cref = $href->{p};
$cref->();
}
fn { p => sub { print "inside anon function\n" } };
my %h = %{ $href };
我避免制作无用的哈希 ( )副本。
&$cref()
(但不是&$cref
)也很好。我只是更喜欢箭头符号。
推荐阅读
- amazon-web-services - 是什么导致 AWS 中国托管站点中的 ERR_SSL_PROTOCOL_ERROR?
- flutter - 如何控制来自提供者的对话?
- javascript - 我无法让光谱颜色选择器工作。我错过了什么?
- php - CURL PHP 爬虫返回访问被拒绝错误
- python - 如何在 matplotlib 图表中创建 3d 框并计算每个框中的点总数?
- node.js - 在生产模式下即时更新延迟加载的模块
- javascript - 暂停后时钟不断重新启动
- javascript - 传递参数 NativeScript-Vue
- c - 指向多维数组的指针
- python - 必须使用对象 pk 或 slug 调用 Django 通用详细视图,但我的 URL 已经有 PK