如何在 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 中以函数式风格进行编码? 的相关文章

  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 使用 Reader Monad 进行依赖注入

    我最近看到了谈话极其简单的依赖注入 http www youtube com watch v ZasXwtTRkio and 无需体操的依赖注入 http vimeo com 44502327关于 Monads 的 DI 并留下了深刻的印象
  • 使用 Visual Studio Code 调试 Perl

    我今天刚开始使用 Perl 并安装了活动Perl https en wikipedia org wiki ActivePerl5 24 1 一切都很顺利 我能够创建我的测试程序testPerl pl与简单的print命令并运行它consol
  • 如何在 PHP 中反序列化 Perl Data::Dumper 输出

    我在 Perl 中有一个导出变量的结果 如下字符串 VAR1 guard gt undef work hand gt undef images gt 1 gt mini height gt 150 width gt 150 extensio
  • 如何修复 Math::BigInt 调用的 Math::Pari 中的“`as_number' 不是 Pari 函数名称”?

    在 Perl 5 8 5 上 我看到问题中列出的错误 我正在运行这些版本模块 数学 BigInt 1 89 数学 BigInt FastCalc 0 19 数学 BigInt GMP 1 24 数学 BigInt Pari 1 13 数学
  • 我为什么要学习 Lisp? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我使用 TT(perl 模板工具包)获得额外的 CR

    我使用 perl v5 10 在 Windows 7 上 TT v2 22 当我使用 TT 时 对于每个源代码行 我都会在生成的 html 中获得一个额外的内容CR 源文本 Windows 格式 Some html CR LF 输出文本 S
  • F# 静态成员类型约束

    我正在尝试定义一个函数 factorize 它使用类似于 Seq sum 的结构类型约束 需要静态成员 Zero One 和 以便它可以与 int long bigint 等一起使用 似乎无法获得正确的语法 并且无法找到有关该主题的大量资源
  • Mojolicious:我应该使用一个还是多个 websocket?

    我正在自学 Mojolicious 和 websockets 到目前为止 我已经有了一个网页 它显示数据库中的行 并具有用于添加 删除和更新行以及选择用于排序的列的按钮 目前 它在每个按钮的 javascript onclick 处理程序中
  • 某些数据结构是否比其他数据结构更适合函数式编程?

    In 现实世界哈斯克尔 http book realworldhaskell org 有一个标题为 没有数组或哈希表的生活 的部分 其中作者建议在函数式编程中首选列表和树 而在命令式程序中可能会使用数组或哈希表 这是有道理的 因为在创建新列
  • 如何在 Octave 中使用具有自定义功能的地图?

    假设我有一个集合A A 0 6 100 我有一个功能fib n function retval fib n g1 1 5 5 2 g2 1 5 5 2 retval 1 5 5 g1 n g2 n endfunction 我希望能够申请fi
  • 在 perl 中 \*STDIN 与 STDIN 相同吗?

    我是作者Python化者 https github com snoopyjc pythonizer我正在尝试将 CGI pm 的代码从标准 perl 库翻译为 Python 我在中遇到了这段代码从客户端读取 https metacpan o
  • 相当于 Java 中 C++ 的 std::bind 吗?

    有没有一种方法可以像 C 中的 std bind 一样将 Java 中的参数绑定到函数指针 Java 中类似的东西会是什么 void PrintStringInt const char s int n std cout lt lt s lt
  • getoptions 函数 perl 多值不起作用

    具有以下 getoptions 功能 iifiles 参数是可选的 如果提供的话它可以是一对多 但是当我运行此函数时收到错误消息 选项规范错误 Perl 在Solaris 10 上运行 不确定需要为iiles 提供哪些多值选项 GetOpt
  • 本地“关闭”binmode(STDOUT, ":utf8")

    我的脚本开头有以下块 usr bin perl5 w use strict binmode STDIN utf8 binmode STDOUT utf8 binmode STDERR utf8 在某些子程序中 当存在其他编码 来自远程子程序
  • 在 Perl 中如何打印到变量而不是文件?

    如何使用 Perl 打印到变量 我已经在一个程序上工作了一段时间 它记录了它的迭代的以非常详细的方式取得进展 print loghandle some message 但是 我还想有选择地将一些消息打印到不同的文件中 当然 我可以在代码中添
  • Perl 三元条件运算符内部赋值问题

    我的程序中的这段 Perl 代码给出了错误的结果 condition a 2 a 3 print a 无论价值如何 condition就是 输出总是3 为什么呢 Perl 中对此进行了解释文档 http perldoc perl org p
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel
  • 如何 grep 遍历数组,同时过滤掉匹配项?

    有没有一种快速简便的方法来 grep 遍历数组 找到满足某些测试的元素and从原始数组中删除这些 例如我想要 a 1 7 6 3 8 4 b grep filter gt 5 a now b 7 6 8 and a 1 3 4 换句话说 我
  • Web 开发中的 Perl [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

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

    我希望当用户在 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