自动调用作为子程序引用的哈希值

2023-12-14

我有一个哈希值,其中一些值不是标量数据,而是返回标量数据的匿名子例程。我想让这对在哈希中查找值的代码部分完全透明,这样它就不必知道某些哈希值可能是返回标量数据的匿名子例程,而不仅仅是普通的旧值标量数据。

为此,有没有办法让匿名子例程在访问其键时执行,而不使用任何特殊语法?这是一个说明目标和问题的简化示例:

#!/usr/bin/perl

my %hash = (
    key1 => "value1",
    key2 => sub {
        return "value2"; # In the real code, this value can differ
    },
);

foreach my $key (sort keys %hash) {
    print $hash{$key} . "\n";
}

我想要的输出是:

perl ./test.pl
value1
value2

相反,这就是我得到的:

perl ./test.pl
value1
CODE(0x7fb30282cfe0)

正如奥列格所指出的,可以使用各种或多或少神秘的技巧来做到这一点,例如tie、重载或魔法变量。然而,这会变得不必要的复杂和毫无意义的混淆。尽管这些技巧很酷,但在实际代码中使用它们至少在 99% 的情况下都是错误的。

在实践中,最简单、最干净的解决方案可能是编写一个辅助子例程,它接受一个标量,如果它是代码引用,则执行它并返回结果:

sub evaluate {
    my $val = shift;
    return $val->() if ref($val) eq 'CODE';
    return $val;  # otherwise
}

and 像这样使用它:

foreach my $key (sort keys %hash) {
    print evaluate($hash{$key}) . "\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动调用作为子程序引用的哈希值 的相关文章

  • 找不到 DBI.pm

    我正在尝试启动这个脚本 usr bin perl use DBI my dbh DBI gt connect dbi Oracle host lonlin2 sid TIMFX1AD port 1524 xbsesdbo xbsesdbo1
  • 将 Python 中的 SHA 哈希计算转换为 C#

    有人可以帮我将以下两行 python 代码转换为 C 代码吗 hash hmac new secret data digestmod hashlib sha1 key hash hexdigest 8 如果您有兴趣 其余的看起来像这样 us
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 多 AVL 树旋转

    假设我有一个无序集合 s 3 6 5 1 2 4 并且我需要构造一个 AVL 树 就这么多了 我了解基本的旋转 我在这里达到这一点 5 2 6 1 3 但当我尝试插入 4 时 一切都崩溃了 我得到的最终答案是 左边的 4 But the a
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 树的递归和非递归过程

    我们知道树是递归数据结构 我们在编写树的过程中使用递归 例如BST的删除方法等 递归的好处是 我们的程序变得非常小 例如中序遍历的代码只有4或5行 而不是非递归程序 虽然会很长 但从理解的角度来看 不像递归程序那么复杂 这就是为什么我讨厌递
  • 我怎样才能挂钩 Perl 的 use/require 以便抛出异常?

    如果文件已经加载 是否可以挂载到use require所以我可以抛出异常 在我即将到来的nextgen blacklist http github com EvanCarroll nextgen blob blacklist lib nex
  • Perl 的反引号、system 和 exec 有什么区别?

    有人可以帮帮我吗 在 Perl 中 以下之间有什么区别 exec command and system command and print command 还有其他方法可以运行 shell 命令吗 exec 执行命令并一去不复返 这就像一个
  • 你能挽救我的负面回顾示例来传达数字吗?

    在 高级正则表达式 一章中掌握 Perl http oreilly com catalog 9780596527242 我有一个损坏的示例 我无法找到一个很好的修复方法 这个例子可能为了自己的利益而试图变得太聪明 但也许有人可以帮我解决它
  • 如何对 Data::Dumper 的输出进行排序?

    我想转储对象和散列的值 但它总是乱序打印键 如何按 递归 排序顺序转储键 use Data Dumper print Dumper obj Set Data Dumper Sortkeys 1获取 Perl 的默认排序顺序 如果要自定义顺序
  • 如何将会话管理添加到简单的 Perl CGI 网页?

    我有一个简单的网页 到目前为止不需要任何登录 它是用 Perl CGI 编程的 我想知道添加会话支持以便获得登录信息的步骤 我不需要非常复杂的方法 因为网页非常简单 另外 我想要一些关于支持 Perl 会话所需的技术 库的建议 我在很多很多
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 有没有办法匹配任意 Unicode 字母字符?

    我有一些文档经过 OCR 从 PDF 转换为 HTML 因此 他们最终会出现很多随机的 unicode 标点符号 而转换器会搞砸 即省略号等 他们还正确地有一堆非英语但仍然是字母字符 如 和俄语字符等 有没有办法制作一个匹配任何 unico
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你
  • 在 Windows 7 中使用 ActivePerl @ARGV 为空

    我有以下 Perl 脚本 我正在尝试使用 ActivePerl 在 Windows 7 中运行它 c Perl64 bin perl exe w use strict my mp3splt exe c Program Files x86 m
  • 检查一个数字是 int 还是 float

    在perl中 我想检查给定变量是否包含浮点数 为了检查我正在使用的 my Var 0 02 Floating point number if int Var Var floating point number 但上面的代码对于 0 0 不起
  • 公式的后序遍历

    在数据结构中 我将按顺序转换和预排序公式转换为树 不过 我不太擅长后期订购 对于给定的公式x y z a b c 我想出了 divide x c y z a b 在大多数情况下 这似乎很合适 除了左子树中的 是牌组中的小丑 在后序遍历中 最
  • 哈希上的多次迭代:这不会减少熵吗?

    我看到在很多地方 包括堆栈 都推荐了这种技术 而且我无法摆脱这种技术会减少熵 毕竟 您正在再次对已经被散列过并且有碰撞机会的东西进行散列 碰撞机会大于碰撞机会会不会导致更多的碰撞机会 经过研究 似乎我错了 但为什么呢 既然您标记了 md5
  • Perl 和 Selenium::远程::驱动程序

    再次编辑 我在弗吉尼亚州北部某处的 AWS 上有一台服务器 这是我的监控服务器 我从另一个状态 ssh 进入这个 Ubuntu 服务器来进行系统管理 我想在这台服务器上进行 Web 自动化测试 它将测试互联网上的 Web 应用程序 点击 U
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现

随机推荐

  • 将集合 S 公平划分为 k 个分区

    存在一个集合 S 其中包含 N 个整数 每个整数的值为 1fair还需要定义 例如 目标可能是最小化分区值与集合 S 平均值的标准偏差 即 sum S k 例如S 10 15 12 13 30 5 k 3 一个好的分区是 30 10 15
  • 如何通过Selenium和Webdriver提高执行速度

    测试脚本执行过程中速度非常慢 不知道原因 这是我的脚本 driver Navigate GoToUrl url driver Manage Timeouts ImplicitWait TimeSpan FromSeconds 20 driv
  • QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka 转换器

    我需要处理YUVAndroid 上 H W 解码输出的数据 实际上 我使用的是Nexus4 解码输出格式是QOMX COLOR FormatYUV420PackedSemiPlanar64x32Tile2m8ka type 但是我需要YUV
  • 防止 MS-SQL 表中的循环引用

    我有一个包含 ID 和 ParentAccountID 的帐户表 以下是重现这些步骤的脚本 如果 ParentAccountID 为 NULL 则该帐户被视为顶级帐户 每个帐户最终应以顶级帐户结束 即 ParentAccountID 为 N
  • Google Apps脚本中的持久变量[重复]

    这个问题在这里已经有答案了 以下始终显示 0 var gNumber 0 function myTest Browser msgBox gNumber gNumber 当然 我可以使用 ScriptProperties 或 UserProp
  • 《小阴谋家》中的 Y 组合器讨论

    所以 我花了很多时间阅读并重新阅读第9章的结尾小阴谋家 其中应用 Y 组合器是为length功能 我认为我的困惑可以归结为一个对比两个版本长度的语句 在组合器被分解之前 A lambda mk length mk length mk len
  • 反序列化具有多种数据类型的 JSON 文件作为一个键

    我想分析 Telegram Chats 因此我以 JSON 格式导出了一个聊天记录 并希望将其反序列化到我的分析软件中 id 397910 type message date 2018 02 21T10 27 59 edited 1970
  • Google Maps API v3 多个标记信息窗口

    我使用下面的代码来显示带有多个标记和信息窗口的地图 现在我遇到了所有标记上显示最后一个信息窗口的非常常见的问题 我尝试过各种解决方案 包括 http you arenot me 2010 06 29 google maps api v3 0
  • 在 Eclipse 中运行时加载资源时出现问题

    我正在开发一个 swing 项目 使用 maven2 从命令行 和 eclipse 没有 Maven 集成 所以 我通过生成 eclipse 项目Maven Eclipse 插件 mvn eclipse eclipse 将其导入到 ecli
  • 如何使用 HMAccessoryPayLoad 添加 HomeKit 配件?

    您好 目前我正在研究 HomeKit 我想使用 HomeKit 实现一项功能 我的要求是不使用二维码我想添加配件 因为每个配件都有自己的 URL 例如X HM XXXXXXXXX与 QR 码相关联 即HMAccessoryPayLoad 我
  • 调整 hexbin 图例中断

    在这个六边形图的示例中 右侧的图例有 10 个级别 类 中断 有谁知道如何更改级别数 假设我想将其更改为 5 或其他值 library hexbin x rnorm 1000 mean 50 sd 1 y rnorm 1000 mean 3
  • django 1.8 的多个数据库(mongodb[mongoengine] 和 sql )

    我正在将 mongoengine 与 Django 结合使用 我的项目需要连接到一个 MongoDB 实例 而另一个则使用 sql setting py 的数据库部分应该是什么样子 DATABASES default ENGINE djan
  • 在 Python 中将一部分 geojson 对象合并到另一个对象中

    EDIT 我正在尝试在 Python 中操作 JSON 文件 在我的数据中 一些多边形有多个相关信息 坐标 LineString and 面积百分比 and area Text and Area in Point 我想将它们组合成一个 JS
  • 带有 NavigationController 和 TabController 的故事板

    看起来这个应该很容易弄清楚 但是今天下午我没有任何运气 我将我的问题的快速 简化的故事板模型拼凑在一起 基本上 我希望下面的表视图控制器也位于选项卡栏控制器中 除了已经存在的导航控制器之外 选项卡将在两个表视图控制器之间切换 现在 带有按钮
  • 如何实现没有操作栏的导航抽屉,但通过主屏幕上的按钮打开导航屏幕?

    导航抽屉应用程序的 left drawer 片段上有登录屏幕 请参阅链接 如何在android导航抽屉下显示活动 登录屏幕 我想使用按钮从主屏幕打开此登录屏幕 并且也不希望导航抽屉上有操作栏 有人可以帮我解决这个问题吗 提前致谢 其实很简单
  • 关于创建自己的维基的建议?

    我和我的朋友正在考虑创建我们自己的维基 鉴于它们最近变得如此普遍 我们听说这并不难 我们希望使网站尽可能简单 我们在网页设计方面有一些经验 但在系统管理方面却没有很多经验 未来我们应该牢记哪些事情 例如 哪些维基农场可能有用 或者我们应该牢
  • 当我尝试从 java 运行批处理文件时,我收到“dig 未被识别为内部或外部命令”

    import java io public class Main public static void main String args throws IOException StringIndexOutOfBoundsException
  • 提交任务到Spark

    我按照本教程在 ubuntu 14 04 上安装了 Sparkhttp blog prabeeshk com blog 2014 10 31 install apache spark on ubuntu 14 dot 04 我能够运行 Sp
  • 在 webview 开始加载之前操作它获取的 url

    我想将当前位置作为请求变量添加到 web 视图中加载的 URL 这样我就可以在页面上使用此信息 而无需重新加载或额外请求 我有一个带有 shouldOverrideUrlLoading 的 WebviewClient 但是当使用 loadU
  • 自动调用作为子程序引用的哈希值

    我有一个哈希值 其中一些值不是标量数据 而是返回标量数据的匿名子例程 我想让这对在哈希中查找值的代码部分完全透明 这样它就不必知道某些哈希值可能是返回标量数据的匿名子例程 而不仅仅是普通的旧值标量数据 为此 有没有办法让匿名子例程在访问其键