Perl 函数定义中的 $;$ 是什么意思? [复制]

2023-12-13

我得到以下代码:

sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) }

谁能告诉我什么$;$ means?


子声明后面括号中的内容称为原型。它们的解释在perlsub。一般来说,你can使用它们来限制编译时参数检查。

特别是($;$)用于强制参数。

分号 (;) 将强制参数与可选参数分隔开。在 @ 或 % 之前是多余的,它会吞噬其他所有内容

所以在这里,必须使用 sub 来调用至少一个论点, but 可能有第二个.

如果你用三个参数调用它,它会抛出一个错误。

use constant _DR => 1;
sub rad2rad       {@_}
sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) }

print deg2rad(2, 3, 4);

__END__

Too many arguments for main::deg2rad at scratch.pl line 409, near "4)"
Execution of scratch.pl aborted due to compilation errors.

请注意,原型不适用于方法调用,例如$foo->frobnicate().

一般来说,在现代 Perl 中,原型被认为是不好的做法并且只有当您确切知道自己在做什么时才应该使用。

简明扼要的方法西德金 used 在他们下面的评论中总结得很好:

它们被认为是不好的做法的最重要原因是 不确切知道自己在做什么的人正在尝试使用 他们因为一些他们不是的东西。

See 这个问题及其有关该主题的详细解释和讨论的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 函数定义中的 $;$ 是什么意思? [复制] 的相关文章

随机推荐

  • 注入 Jersey Resource 类

    我确实尝试过以下链接如何将协作者连接到 Jersey 资源 and 访问 Jersey Resource 类中的外部对象但我仍然无法找到一个工作示例来演示如何注入资源类 我没有使用 Spring 或 Web 容器 我的资源是 package
  • 无法加载文件或程序集“Windows,Version=255.255.255.255,Culture=neutral,PublicKeyToken=null,ContentType=WindowsRuntime”

    安装 vs2012 并更新我的 vs2010 WPF 项目后 我在 WPF 设计器中收到以下错误 无法加载文件或程序集 Windows Version 255 255 255 255 Culture neutral PublicKeyTok
  • Javascript:如何延迟返回 img.complete 的值

    我编写了一个脚本来测试 IMG 标签中的 SVG 支持 function SVGinIMG var SVGdata data image svg xml base64 PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5v
  • VIPT Cache:TLB 和 Cache 之间的连接?

    我只是想澄清这个概念 并且可以找到足够详细的答案 这些答案可以帮助我们了解硬件中的所有内容实际上是如何工作的 请提供任何相关详细信息 对于 VIPT 缓存 内存请求会并行发送到 TLB 和缓存 从 TLB 中我们可以获得转换后的物理地址 从
  • 隐藏单独的自定义功能区按钮

    我有一个自定义 Excel 功能区和一个 Excel 加载项 其中包含一个在打开工作簿时实例化一次的类 根据该类的某些属性 我需要隐藏自定义功能区中的某些按钮 全部位于同一选项卡中 我的定制丝带是
  • 为跨平台开源 UI 无关的 C# 类库选择哪种 Visual Studio 2017 项目类型?为什么?

    我有一个 C 类库的想法 我想开发并发布为开源 我想让它在尽可能多的可用 Net 平台上轻松可用 必要时重新编译 例如完整的 Net Mono Net Core Xamarin 只有经典的 Net 兼容性才是真正必须的 然而 该库不会依赖于
  • 围绕单个语句的事务有什么作用?

    我了解事务如何有助于协调一对更新 我不明白的是在事务中包装单个语句 这是我所见过的 90 事实上 在现实生活中的代码中 根据我的经验 更常见的是发现一系列逻辑相关的事务 每个事务都包装在自己的事务中 但整体并未包装在事务中 在 MS SQL
  • 我的 ViewModel 中的 IEnumerable 未随 EditorForModel 显示

    视图模型 Validator typeof ProdutoCategoriaValidator public class ProdutoCategoriaViewModel HiddenInput DisplayValue false pu
  • 为什么PHP的explode错误?

    这是 PHP 代码 var dump value string 103 0e0cU 0Z dddd is moar awesome A6A32C2074B787893DF506F6F466F5919516C44F3 var dump exp
  • Raspberry Pi 无法在 JavaFX 应用程序中隐藏鼠标光标

    目前 我为 Raspberry Pi 3 开发 JavaFX 应用程序 为了在我的 PC 上进行开发 我使用 Ubuntu 16 04 1 OpenJDK 1 8 0 111 和 OpenJFX 8 0 60 对于 Raspberri Pi
  • Oracle 存储过程 OUT 参数

    我有一个存储过程 其 IN OUT 参数声明如下 create or replace PROCEDURE RIFATT SEGN0 INS pIdRifattSegn0 in OUT NUMBER pNumDossier IN VARCHA
  • 如何定义 Swagger 2.0 JSON 来填充 Swagger UI 中的默认主体参数对象?

    我们当前的部署模式要求我手动编写 swagger json 输出 该输出将由我公司使用的基于 Swagger 的 UI 使用 我希望我正在编写的 json 能够提供 默认 值来填充所有输入字段 包括 body 输入参数 的 Swagger
  • 无法通过angularjs在phonegap中显示联系人照片

    我能够从简单的 html 和 javascript 获取并显示联系人照片 但是当我使用 angularjs 模型显示联系人照片时 出现错误 以下是我的源代码 列出我尝试显示联系人的位置 ul class list li class item
  • 如何使用表单从数组动态创建复选框?

    我想使用代码根据传递给函数的数组或对象动态创建复选框 你能修改这个函数来获取数组吗 我有一个脚本 可以根据用户名查找可能的电脑名称并列出匹配项 如果有这个表格 让我能够选择列表中的结果之一作为正确的 PC 以移入正确的容器并安装软件 那就太
  • MySQL 删除重复行

    我有一个评论表 其结构如下 id name email comment 我有很多重复的评论 具有相同的姓名和电子邮件 我需要删除它们 任何人都可以建议我如何使用单个查询来实现此目的 Thanks DELETE FROM comments c
  • 用于在正在运行的 JVM 中打开调试的 Java API [重复]

    这个问题在这里已经有答案了 是否有一种编程方式可以在正在运行的 JVM 实例中打开调试 我正在寻找一个 API 它可以使运行中的 JVM 成为调试服务器 该 API 的作用相当于 Xdebug Xrunjdwp transport dt s
  • 暂停测试执行,直到应用程序空闲

    是否可以实现一些 util 方法来暂停测试 当前线程 执行 直到应用程序空闲 空闲的意思是 1 一段时间内没有GUI事件添加到事件队列中2 在同一时间段内没有工作线程运行任何任务 您能否提供实现 代码片段来跟踪以前的空闲情况 您可以更换Ev
  • 尝试合并 2 个数据帧但出现 ValueError

    这些是我保存在两个变量中的两个数据框 gt print df head gt club name tr jan tr dec year 0 ADO Den Haag 1368 1422 2010 1 ADO Den Haag 1455 14
  • 已删除的数据存储条目重新出现

    我想重新打开已删除的数据存储条目重新出现作为注册用户 老问题可以删除吗 这次我会尽量说得更具体 我遇到以下问题 最初 我将 N 个同类实体放入数据存储中 如下所示 datastore entity MyModel model propert
  • Perl 函数定义中的 $;$ 是什么意思? [复制]

    这个问题在这里已经有答案了 我得到以下代码 sub deg2rad my d DR 0 1 d rad2rad d 谁能告诉我什么 means 子声明后面括号中的内容称为原型 它们的解释在perlsub 一般来说 你can使用它们来限制编译