Perl:命名参数验证最佳实践

2024-03-10

我在类方法调用中使用命名参数,想知道是否有最佳实践来确保不传递未知参数。这就是我正在做的

sub classmethod {
    my $self = shift;
    my %args = (
        "param1" => "default1",
        "param2" => "default2",
        @_
    )

    if (my @invalid = grep { !/^(param1|param2)$/ } keys %args) {
        croak "received unknown arg(s) ".join(",", @invalid)." from ".caller();
    }
}

这是一种正确的前进方式,还是会导致性能问题?

最好的, 马库斯


你可以使用参数::验证 http://search.cpan.org/~drolsky/Params-Validate-1.08/lib/Params/Validate.pm。另一种选择是参数::检查 http://search.cpan.org/~bingos/Params-Check-0.38/lib/Params/Check.pm

如果参数是固定的,那么最好在开发过程中验证它们,并可以选择在运行时关闭验证。

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

Perl:命名参数验证最佳实践 的相关文章

随机推荐

  • 中断的尾链

    什么是 ARM Cortex M3 中 NVIC 支持的中断尾链 尾链是异常的背对背处理 无需 中断之间的状态保存和恢复的开销 这 处理器跳过八个寄存器的弹出操作和八个寄存器的压入操作 当退出一个 ISR 并进入另一个 ISR 时 因为这没
  • 在Django中,如何从数据库中随机选择100条记录? [复制]

    这个问题在这里已经有答案了 myqueryset Content objects filter random 100 Content objects all order by 100 See the order by 文档 http doc
  • 插件API设计

    所以我有一个很大程度上基于使用 QPlugin 系统的 QT API 的应用程序 使用起来相当简单 您定义一个从接口继承的类 加载插件时您将获得该类的实例 最终它会归结为dlopen dlsym or LoadLibrary GetProc
  • OSError:无法加载库'C:\ Program Files \ R \ R-4.0.2 \ bin \ x64 \ R.dll':错误0x7e

    我正在尝试将 rpy2 库导入 Jupyter Notebook 但无法克服此错误 已添加路径 C Program Files R R 4 0 2 bin x64 这是我的计算机上安装的唯一 R 版本 我已经完全卸载并重新安装了 R Rst
  • 更改python中的字符串格式分隔符

    我想模板化一些配置文件 但它们与 python 不兼容 this is a template format template string 格式化 例如 大括号是配置的一部分 nginx 配置 您可以将分隔符更改为其他内容吗 eg this
  • AVPlayer 暂停后无法恢复+一些等待

    在 pause 之后 如果我调用 play 它会继续 但是如果我在 pause 之后等待 30 60 秒并尝试 play 它有时会无法播放 AVPlayerStatus Failed 返回 false AVPlayerStatus Read
  • JavaFX:当用户选中复选框时,CheckBoxTableCell 获取 ActionEvent

    我想在用户选中或取消选中 tableView 中的复选框时触发方法或操作 当用户使用 checkBox 时 coursData addListener 不会被触发 这是我编译的代码 窗口中出现带有复选框的 tableView package
  • 使用 WinCrypt 和 CryptImportKey 硬编码 AES-256 密钥

    我需要让 Win32 应用程序加载硬编码的 AES 256 密钥 最好使用 WinCrypt h 方法 我的密钥位于 unsigned char 32 中 但我找不到传递给 CryptImportKey 的密钥 blob 的正确格式 一切似
  • 在 Android 上查找音调

    如何从我的语音记录中找到最小 最大 平均 标准偏差音调 我使用 AudioRecord 来录制我的声音 frequency 8000 channelConfiguration AudioFormat CHANNEL CONFIGURATIO
  • RealityKit – 以编程方式设置 Reality Composer 实体的文本

    在我的 iOS 应用程序中 我想使用新的 Reality Composer 来介绍 AR 的一部分 在我的项目中 我使用以下代码加载场景 let arView ARView init frame frame Configure the AR
  • 从 Java 将变量插入 SQL 查询

    如何将变量插入 SQL 查询 这就是我到目前为止所拥有的 public String getBugList int amount Connection con DatabaseConnection getConnection try Pre
  • CSV 到 JSON Ruby 脚本?

    有谁知道如何编写将 csv 文件转换为 json 文件的 Ruby 脚本 CSV 将采用以下格式 Canon Digital IXUS 70 Epic Epic 100 3x Yes lockable Yes lockable Yes Ca
  • Apple LLVM 9.0 错误组 - 无法读取配置文件。找不到这样的文件或目录

    我已经创建了分发证书和分发配置文件 在尝试构建应用程序时 它抛出以下错误 无法读取个人资料 Users nan Projects Projectname node modules react native React Optimizatio
  • ffmpeg:是否可以替换可变帧率视频中的帧?

    用于视频处理的机器学习算法通常适用于帧 图像 而不是视频 在我的工作中 我使用 ffmpeg 将特定场景转储为一系列 png 文件 以某种方式处理它们 去噪 去模糊 着色 注释 修复等 将结果输出到相同数量的 png 文件中 然后用新帧更新
  • pymssql Windows 身份验证

    pymssql模块用于支持windows身份验证 现在看来并非如此 尽管在某些地方它仍然表明它应该有效 我一直无法找到这个问题的明确答案 也找不到解决方案 最相关的链接 https groups google com forum topic
  • EF:有关跨数据库关系的数据库设计问题

    Summary 我目前正在制作一个 非常简单 多租户 Web 应用程序的原型 其中用户 存储在数据库中 1 可以注册到不同的租户 存储在数据库中per租户 相同的数据库模式 我认为这种架构适用于许多多租户解决方案 遗憾的是 我发现实体框架不
  • 使用 requestSpotInstances 的 TagSpecifications 使用 aws-sdk 的 UnexpectedParameter

    我正在尝试向我的 AWS Spot 请求添加标签 但它已经归还给我了 UnexpectedParameter Unexpected key TagSpecifications found in params LaunchSpecificat
  • Delphi 泛型类可以从其类参数派生吗?

    我一直在尝试定义一个通用的 可继承的 TSingleton 类 这是我正在进行的工作 TSingleton
  • 在 C# 中解析 JSON 数据

    我有一个 JSON 数据如下 id 367501354973 from name Bret Taylor id 220439 由 IDictionary String Object 的对象 结果 返回 在我的 C 代码中 我不确定你是如何解
  • Perl:命名参数验证最佳实践

    我在类方法调用中使用命名参数 想知道是否有最佳实践来确保不传递未知参数 这就是我正在做的 sub classmethod my self shift my args param1 gt default1 param2 gt default2