如何在 Perl 中以函数式风格进行编码?

2024-05-10

你如何:

  1. have a sub返回一个sub

    or

  2. 将文本作为代码执行

in Perl?

另外,如何拥有匿名函数存储状态?


子返回子作为coderef:

# example 1: return a sub that is defined inline.
sub foo
{
    return sub {
        my $this = shift;
        my @other_params = @_;

        do_stuff();
        return $some_value;
    };
}

# example 2: return a sub that is defined elsewhere.
sub bar
{
    return \&foo;
}

可以使用以下命令执行任意文本eval功能:参见文档perldoc -f 评估 http://perldoc.perl.org/functions/eval.html:

eval q{print "hello world!\n"};

请注意,这是非常危险如果您正在评估从用户输入中提取的任何内容,那么通常这是一种不好的做法,因为您通常可以像上面的前面的示例一样在 coderef 中定义代码。

您可以使用以下方式存储状态状态变量 http://perldoc.perl.org/perlsub.html#Persistent-Private-Variables(perl5.10 中的新功能),或者使用作用域高于 sub 本身的变量,作为closure http://perldoc.perl.org/perlfaq7.html#What%27s-a-closure%3F:

use feature 'state';
sub baz
{
    state $x;
    return ++$x;
}

# create a new scope so that $y is not visible to other functions in this package
{
    my $y;
    sub quux
    {
        return ++$y;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Perl 中以函数式风格进行编码? 的相关文章

  • 如何在 BEGIN 块之外正确声明哈希?

    考虑这个简单的程序 您能解释一下为什么在取消注释前两行后输出会有所不同吗 我的哈希发生了什么use strict 如何修复程序以供使用use strict echo e key1 nkey2 nkey3 perl lne use stric
  • Moose:属性值更改时缓存的计算结果会过期吗?

    在我们的类中 我们有一个模式 我们创建一个属性来表示 计算值 出于显而易见的原因 我们想要缓存计算值 然后当基础值之一发生变化时使缓存失效 所以我们目前有这个 package FooBar use Moose has foo gt acce
  • 如何在调试器模式下运行 perl 测试?

    我尝试在调试器下运行测试 perl d which prove t file t 但这没有任何效果 因为每个测试都是作为单独的作业运行的 我已经发现 exec选项 但是当我提供它时 我失去了任何选项 proverc文件和命令行 prove
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • 如何轻松地将 Ajax、perl 和 JSON 结合使用?

    我正在尝试使用 Ajax 制作一个网页 Example 我创建了一个 Perl CGU 文件来触发一个简单的帖子 文件 test cgi name 托马斯 回复短信 你的名字是托马斯 我创建了一个可以使用该帖子的 html 文件 但随后页面
  • 向用户提示多个问题(是/否和文件名输入)

    我想问用户多个问题 我有两种类型的问题 是 否或文件名输入 我不知道如何将这一切放入一个好的if结构 我不确定是否也应该使用 else 语句 有人可以帮我们解决这个问题吗 这是我到目前为止所拥有的 print Do you want to
  • Haskell 入门

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 几天来 我一直试图理解 Haskell 中的函数式编程范例 我通过阅读教程和观看截屏视频
  • 如何对 Data::Dumper 的输出进行排序?

    我想转储对象和散列的值 但它总是乱序打印键 如何按 递归 排序顺序转储键 use Data Dumper print Dumper obj Set Data Dumper Sortkeys 1获取 Perl 的默认排序顺序 如果要自定义顺序
  • 在 Perl 中使用数据引用的正确方法

    我有一组想要处理的数据 为了简化我的代码 最好通过指向原始数据的引用数组来访问我的数据的某些子集 比解释更好的是 我写下了这个例子 它还没有工作 最后 我想更新原始数据 而不必更新所有子集 用 Perl 可以做这样的事情吗 usr bin
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • Perl 正则表达式图灵完备吗?

    我见过 Ruby 和 Perl 程序员做了一些事情复杂的代码挑战 https codegolf stackexchange com questions 3596 regex validating regex完全用正则表达式 这前瞻和后瞻 h
  • 使用 Cygwin 安装 CPAN GD 模块失败

    我已经尝试解决为什么 CPAN GD 模块无法使用 Cygwin 安装 2 天了 任何帮助深表感谢 谢谢 cpan install GD Going to read home xxxxxxxxxx cpan Metadata Databas
  • @tailrec为什么这个方法不编译为“包含不在尾部位置的递归调用”?

    tailrec private def loop V key String V key match case gt loop key 此方法无法编译并抱怨它 包含不在尾部位置的递归调用 有人可以向我解释一下发生了什么事吗 这个错误消息对我来
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 客户端浏览器关闭时服务器端 Perl CGI 脚本中断

    我已经尝试解决一个小问题很长一段时间了 但似乎我无法解决 我编写了一个 HTML 页面 它在提交表单时调用 perl CGI 脚本 该 CGI 在服务器端执行一定数量的任务 我让脚本将这些任务的步骤打印到 HTML 页面上的 iframe
  • 为什么我的 Apache2::Log 输出用 \n 替换换行符?

    我在 apache2 mod perl 下设置了多个虚拟主机 我用的是ErrorLog指令为每个虚拟主机获取单独的错误日志 仅当我使用 Apache2 Log 时 这才按预期工作 警告 只会记录到常规错误日志中 这样就可以了 最后 但还存在
  • 你为什么决定“反对”使用 Erlang?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 你是否真的 尝试过 意味着在其中编程 而不仅仅是阅读有关它的文章 Erlang并决定在项目中不

随机推荐

  • 不要在最近的应用程序中显示我的应用程序

    我希望当用户在 hdevice 中运行或关闭我的应用程序时 不要在最近的应用程序中显示我的应用程序 我的目的是 用户禁止运行我的应用程序 我很抱歉说得不好 尝试这个 为您的每一个activity android excludeFromRec
  • SwiftUI TabbedView 仅显示第一个选项卡的内容

    我正在尝试建立一个TabbedView使用以下简单代码 TabbedView Text Hello world tabItemLabel Text Hello Text Foo bar tabItemLabel Text Foo 运行时 两
  • 删除最初使用“未知分词器”创建的表?

    我有一个 sqlite3 数据库 错误消息显示 无法删除此数据库中的单个表unknown tokenizer mm 我直接用命令试了一下DROP TABLE tablename 里面最新的SQLiteSpy http www yunqa d
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • perf 找不到外部模块符号

    跑步时perf它找到了我的程序的内核符号和符号 但没有找到外部模块符号 我已经编写了一个内核模块 我使用它加载insmod我怎么知道perf也找到它的符号 我正在运行 2 6 37 6 内核 无法升级 我的perf尚不支持矮人选项 但我认为
  • 让 Emacs ansiterm 和 Zsh 更好地发挥作用

    我一直在尝试在 emacs 会话中使用 Zsh 而无需 emacs 重新映射所有 Zsh 键 我发现 ansi term 对此非常有效 但是我仍然遇到一些问题 我输出了很多垃圾字符 我可以用以下方法修复它 Setup proper term
  • 如何在 Python 中获取显示器分辨率?

    获得显示器分辨率的最简单方法是什么 最好是在元组中 我创建了一个PyPI模块 https pypi org project screeninfo 为此原因 pip install screeninfo 代码 from screeninfo
  • Javascript 中的 k 均值聚类实现? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要 k means 聚类算法的 Javascript 实现 我只有一维数据 很少超过 100 个项目
  • 检查Web服务是否存在

    有人可以告诉我确定给定 URL 是否存在 Web 服务 ASP NET 的最佳方法吗 我假设一种方法类似于使用 System Net Webclient 发出请求 但我如何确定它是否是有效的 Web 服务以及我应该发出哪种类型的请求 编辑
  • Visual Studio 2008 (C#) 与 SQL Compact Edition 数据库错误:26

    与网络相关或特定于实例的 建立时发生错误 连接到 SQL Server 服务器 未找到或无法访问 验证实例名称是否为 正确并且 SQL Server 是 配置为允许远程 连接 提供商 SQL 网络 接口 错误 26 错误定位 指定服务器 实
  • 从 Symfony2 中的服务重定向

    我有一项查找页面数据的服务 但如果找不到该数据 则应重定向到主页 对于我的一生 我不知道如何在 Sf2 中做到这一点 有很多不同的方法可以使用服务和路由器 但似乎都不起作用 namespace Acme SomeBundle Service
  • Rfc2898DeriveBytes 与密码的 Sha2 哈希生成

    我最近知道使用 SHA256 为加盐密码生成密码哈希 在阅读了一些有关加盐密码和安全性的内容后 我看到rfc2898derivebytes and passwordderivebytes NET 中的类 使用有什么好处吗rfc2898der
  • Rails_admin 中的范围作为过滤器

    我在我的应用程序中使用rails admin 我的模型上有一些范围 以下是一个示例 class User lt ActiveRecord Base scope unconfirmed where confirmed at IS NULL e
  • 如何确保 ViewModel 属性在再次更改其值之前已绑定在视图上?

    有以下情况 ViewModel有一个变化非常快的对象 通过不同的线程 View通过以下方式获悉NotifyPropertyChanged界面 但似乎它的工作速度很慢 并且在视图绑定新值并绘制它之前 它会更改更多次 因此它会丢失一些值 我也尝
  • 通过 MQTT 将 LoRa 测量结果发送到 Fiware IOT 代理

    我有 LoRa 传感器 它使用 Cayenne LPP 格式有效负载发送测量值 我的网关 LOrank8v1 捕获这些数据包并将其转换为 UDP 网关中有一个服务 lora gateway bridge 它将数据包从 UDP 转换为 TCP
  • IP 标志的不分段位在哪里使用?

    我很想知道 IP 标志的 不分段 DF 位在哪里使用 因为碎片对于更高层来说是不可见的 并且他们也不关心 我也在寻找一个例子 预先非常感谢 碎片并不总是对所有上层都可见 一些早期 甚至可能是当前 微控制器 TCP IP 堆栈没有实现碎片处理
  • 如何用月份的全名替换数字月份

    使用 tidyverse 包将月份的列更改为完整的实际月份名称 请记住 尽管这些数据只有四个月 但我的真实数据集包含一年中的所有实际月份 我是 tidyverse 的新手 mydata lt tibble camp c Platinum 2
  • 让 distutils 在正确的位置查找 numpy 头文件

    在我的安装中 numpy 的arrayobject h位于 site packages numpy core include numpy arrayobject h 我编写了一个使用 numpy 的简单 Cython 脚本 cimport
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 如何在 Perl 中以函数式风格进行编码?

    你如何 have a sub返回一个sub or 将文本作为代码执行 in Perl 另外 如何拥有匿名函数存储状态 子返回子作为coderef example 1 return a sub that is defined inline s