如何区分未传递的参数和传递错误值的参数?

2024-04-12

我试图找出在 Perl 中区分未传递参数和参数已作为 0 传递的情况的最佳方法,因为它们对我来说意味着不同的事情。

(通常我喜欢这种歧义,但在本例中我生成 SQL,因此我想用 NULL 替换未定义的参数,但将 0 保留为 0。)

所以这就是歧义:

sub mysub {
  my $arg1 = shift;
  if ($arg1){
    print "arg1 could have been 0 or it could have not been passed.";
  }
}

到目前为止,这是我最好的解决方案......但我认为它有点丑陋。我想知道您是否可以想出一种更干净的方法,或者这对您来说是否可行:

sub mysub {
  my $arg1 = (defined shift) || "NULL";
  if ($arg1 ne "NULL"){
    print "arg1 came in as a defined value.";
  }
  else {
    print "arg1 came in as an undefined value (or we were passed the string 'NULL')";
  }
}

以下是如何处理所有可能情况的示例:

sub mysub {
    my ($arg1) = @_;
    if (@_ < 1) {
        print "arg1 wasn't passed at all.\n";
    } elsif (!defined $arg1) {
        print "arg1 was passed as undef.\n";
    } elsif (!$arg1) {
        print "arg1 was passed as a defined but false value (empty string or 0)\n";
    } else {
        print "arg1 is a defined, non-false value: $arg1\n";
    }
}

(@_是函数的参数数组。将其与1这里是计算数组中元素的数量。我刻意回避shift,因为它改变了@_,这需要我们存储原始大小@_某处。)

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

如何区分未传递的参数和传递错误值的参数? 的相关文章

  • 在 Perl 中正确检测文件的行结尾?

    问题 我有在 Windows 和 nix 上生成的数据 大部分为 CSV 格式 并且大部分在 nix 上处理 Windows 使用 CRLF 作为行结束符 Unix 使用 LF 对于任何特定文件 我不知道它是否有 windows 或 nix
  • Perl CGI 脚本根据运行返回不同的结果

    我有一个 Perl CGI 脚本 它明显随机地发出不同的 HTML 所有输入都没有改变 例如 我会跑wget两次并得到两个不同的结果 CGI 由开发数据库支持 该数据库也不会改变 我有一个调试语句 通知我相同数量的元素从数据库返回到脚本中
  • 如何在 Perl 中存储伪随机生成器的状态?

    有没有办法在 Perl 中存储内置伪随机数生成器的当前状态 以便当我的程序再次运行时 它可以从停止的地方拾取序列 而不是从新序列开始 现在 我正在存储我所在的位置以及初始种子 然后丢弃我已经使用类似以下内容看到的初始段 sub consum
  • 在 TypeScript 中将数组作为参数传递

    我有两种方法 static m1 args any using args as array static m2 str string args any do something call to m1 m1 args 致电给m1 1 2 3
  • Perl 代码的多线程

    我需要知道如何为以下代码实现多线程 我需要每秒调用此脚本 但睡眠计时器会在 2 秒后处理它 总共脚本每 3 秒调用一次 但我需要每秒调用它 任何人都可以为我提供解决方案或为我指出正确的方向 usr bin perl use warnings
  • 在 Perl 中如何接受多个 TCP 连接?

    我对 Linux 的 Perl 脚本有疑问 它的主要目的是成为 3 个应用程序之间的中间人 它应该做什么 它应该能够等待 UDP 文本 不带空格 udp port 当它收到 UDP 文本时 它应该将其转发到连接的 TCP 客户端 问题是我的
  • 在 Perl eval 中捕获变量赋值

    我希望能够从 Perl eval 捕获变量赋值 也就是说 确定代码中分配给哪些变量名称并提取它们的值 例如 如果我运行 eval foo 42 bar 3 14 eval 的结果是 3 14 最后评估的值 但我还希望能够确定名称 foo 和
  • 从 Perl 守护程序运行时,为什么 FFMpeg 在五秒后停止?

    我用 Perl 编写了一个小守护程序 它调用 FFMpeg 对视频进行编码 但编码在 5 秒左右后停止 我用这段代码来启动它 my t echo ffmpeg command gt gt self gt FFMPEG OUTPUT my l
  • 通过 perl 脚本使用代理

    我想在这个 perl 脚本中使用代理 但我不知道如何让它使用代理 usr bin perl use IO Socket remote IO Socket INET gt new Proto gt tcp PeerAddr gt localh
  • 有类似 Fabric for Perl 的东西吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我很喜欢Fabric http fabfile org 对于个人项目 但我的日常工作是在面向 Perl
  • 如何在 Perl 中将纪元时间转换为正常时间?

    我正在尝试编写一个 Perl 脚本来解析日志 其中每行的第二个值是日期 该脚本接受三个参数 输入日志文件 开始时间和结束时间 开始时间和结束时间用于解析出每行上位于这两个时间之间的特定值 但为了正确运行这个 我将开始和结束时间转换为纪元时间
  • 首选的跨平台 IPC Perl 模块是什么?

    我想创建一个简单的 IO 对象 它代表一个向另一个程序打开的管道 我可以在应用程序运行时定期写入另一个程序的 STDIN 我希望它是防弹的 因为它可以捕获所有错误 并且是跨平台的 我能找到的最佳选择是 open sub io read lo
  • 使用 Perl 进行数据签名

    我参与了这个涉及发送签名数据的项目 我已经获得了一个 pem 文件和一个服务器证书 我应该将其导入到另一台服务器 我应该使用这些文件对数据进行签名 然后将签名的数据发送到另一台服务器进行验证和处理 我的问题是 如何将这两个文件导入到我的服务
  • 如何在 Perl 中序列化数组引用数组?

    Perl 有很多用于序列化数据的模块 我不知道该选择哪一个 我需要将以下数据序列化为字符串 以便将其放入数据库中 my categories Education Higher Education Colleges Schooling Col
  • 将文件读入 Perl 中的变量 [重复]

    这个问题在这里已经有答案了 可能的重复 在 Perl 中将文件转换为字符串的最佳方法是什么 https stackoverflow com questions 206661 what is the best way to slurp a f
  • 带参数的多重继承

    我已经阅读了很多有关继承的内容 但我似乎无法理解为什么这会给我一个错误 使用Python 2 7 x class A object def init self value super A self init print First s va
  • 如何将一堆 perl 模块加载到 perl 脚本中

    这就是我想做的 在我制作 开发的每个脚本中 我总是调用 Perl 库和子例程 例如 directory bin perl system source directory cshrc use Net Domain qw hostname ho
  • 使用perl求中位数、众数、标准差?

    我有一个数字数组 计算数据集的中位数 众数和标准差的最简单方法是什么 Statistics Basic Mean http p3rl org Statistics Basic Mean Statistics Basic Median htt
  • 如何在 Perl 中访问名称包含在变量中的常量?

    我有一组用 Perl 声明的常量 use constant C1 gt 111 use constant C2 gt 222 use constant C9 gt 999 my which constant C2 我如何构造一个 Perl
  • 将带有非字符串关键字的 dict 传递给 kwargs 中的函数

    我使用具有签名功能的库f args kwargs 我需要在 kwargs 参数中传递 python dict 但 dict 不包含关键字中的字符串 f 1 2 3 4 Traceback most recent call last File

随机推荐

  • 为什么 GCC 对这种隐式转换发出警告?

    GCC 警告我以下代码包含可能更改值的隐式转换 include
  • 在 C# 中为函数名创建别名

    我想在 C 中为函数名创建别名 除了函数重载还有什么办法吗 public class Test public void A 我想用B代替A 如下所示 var test new Test test B I m surprised that n
  • 我应该自行提交表格还是提交到外部文件?

    我对编程相当陌生 特别是 Coldfusion 我很好奇我是否将表单提交到其所在的页面并在那里处理结果 或者是否应该将其提交到外部文件进行处理是否有区别 然后从那里重定向 它可以发挥作用 当我第一次开始编程时 我经常会做这样的事情 myfo
  • 在 JavaScript 或 Node 中将 Blob 数据转换为原始缓冲区

    我正在使用插件jsPDF https github com MrRio jsPDF它生成 PDF 并将其保存到本地文件系统 现在在 jsPDF js 中 有一些代码可以生成 blob 格式的 pdf 数据 如下所示 var blob new
  • 带参数的 ASP.NET ODBC 查询

    请帮助我 我不知道以下代码有什么问题 OdbcConnection conn new OdbcConnection connString String query INSERT INTO customer custId custName c
  • Python 使用 euc-kr 编码以意想不到的方式对(韩语)字符进行编码(编解码器、编码模块)

    我尝试在 python 中读取一些以 euc kr 编码的韩语文本文件 但出现了一些错误 检查后encodings使用模块一段时间后 我了解到该模块以看似非常奇怪的方式对韩语字符进行编码 让我举个例子 韩国文字 这是一个很少使用的字符 但我
  • 在 main() 中为 SerialPort 添加事件处理程序

    我尝试将事件处理程序订阅到数据接收事件 似乎我无法指定事件处理函数名称 我不明白为什么myComPort DataReceived new SerialDataReceivedEventHandler comPort DataReceive
  • 规范的 HTTP POST 代码?

    我见过很多发送 http post 的实现 并且不可否认 我并不完全理解底层细节以了解需要什么 在 C NET 3 5 中发送 HTTP POST 的简洁 正确 规范代码是什么 我想要一个通用方法 例如 public string Send
  • .net MAUI c# 后台任务ContinueWith和通知事件

    编辑 已解决 见下文 编辑 这是一个新手问题 我只是深入研究 C 和异步 为什么我想要 单击按钮 按顺序运行多个任务 但在后台线程中一个接一个地运行 如果可能的话 正在运行的任务应该通知它们的进度 现在我可以单击按钮并启动任务链 但在完成事
  • pandas 正则表达式从第一次出现的字符开始向前和向后查看

    我有像下面这样的Python字符串 1234 4534 41247612 2462184 2131 GHI xlsx 1234 4534 sfhaksj DHJKhd hJD 41247612 2462184 2131 PQRST GHI
  • Sharp JS 依赖性破坏了 Elastic Beanstalk 上的 Express Server

    我觉得这毫无用处 因为我的难题已在多个不同的线程中讨论过 但没有任何效果 我有一个 ExpressJS 节点服务器部署到 AWS Elastic Beanstalk 当我几周前第一次尝试部署时 我无法让它运行 直到我最终意识到我的许多依赖项
  • DEP0600:部署失败。 XmlException - '.'(十六进制值 0x00)是无效字符

    MS VS2017 微软 Visual Studio 2017 DEP0600 部署失败 XmlException 十六进制值 0x00 是无效字符 编辑开始 解决方案可能就在附近 请保留建议一天 在 回复下面的评论 我已将原来的VS201
  • Firebase 将匿名用户帐户转换为永久帐户错误

    使用 Firebase for web 我可以成功创建匿名用户 我还可以创建一个新的电子邮件 密码用户 但是当尝试将匿名用户转换为电子邮件 密码用户时 我收到错误 auth provider already linked User can
  • C#:设置任意维度数组中的所有值

    我正在寻找一种将多维数组中的每个值设置为单个值的方法 问题是维数在编译时是未知的 它可能是一维的 也可能是 4 维的 自从foreach不允许你设定价值观 我可以实现这一目标的一种方法是什么 非常感谢 虽然这个问题表面上看起来很简单 但实际
  • sqlite - 查找可以由一组成分制成的食谱

    现在我在ios应用程序中使用sqlite 我希望能够搜索可以从成分列表中制作的食谱 即作为所提供成分的子集的食谱 例如 Recipe 1 A B C Recipe 2 A B Recipe 3 C D Recipe 4 A Recipe 5
  • 恢复 Vim 备份

    Vim 的文件备份系统刚刚保存了我众所周知的 但我有一个问题 我有 vim 保存备份到 vim backups 为了恢复它们 我进入该目录并将所需的文件 按日期排序 复制回项目文件夹中的必要目录 很简单 只有 5 个文件 然而 令我惊讶的是
  • 在 iPhone 地图中显示当前位置的标题

    我是 iPhone 开发新手 我已经创建了地图应用程序 并显示了当前位置并将图钉放置到当前位置 现在我想在单击图钉时显示当前位置的标题和副标题 请帮帮我 Thanks 要显示标题和副标题 您添加到地图的注释对象必须响应 title and
  • Swing JButton Swing 的圆角没有实际 JButton 的功能 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 1 https i stack imgur com rZJjV png 我已经浏览过代码Swing 外观的 Java 文档 http
  • CSS 中区分:通过 Tab 键获得焦点和:通过单击获得焦点

    虽然我很确定我的问题的答案是 做不到 但我想确定一下并在这里问你们 我有一个相当典型的场景 我想通过我的网站启用选项卡 即使用键盘上的选项卡键 用户刚刚点击的项目应该通过 CSS 进行视觉标记 到目前为止 一切都很好 显然 这需要焦点伪类
  • 如何区分未传递的参数和传递错误值的参数?

    我试图找出在 Perl 中区分未传递参数和参数已作为 0 传递的情况的最佳方法 因为它们对我来说意味着不同的事情 通常我喜欢这种歧义 但在本例中我生成 SQL 因此我想用 NULL 替换未定义的参数 但将 0 保留为 0 所以这就是歧义 s