perl 解释器的状态码是啥意思?

Posted

技术标签:

【中文标题】perl 解释器的状态码是啥意思?【英文标题】:What does the status code of the perl interpreter mean?perl 解释器的状态码是什么意思? 【发布时间】:2010-03-12 12:18:57 【问题描述】:

我正在尝试使用 Java 的 Runtime.exec() 执行 Perl 解释器的副本。但是,它返回错误代码9。运行该文件几次后,perl 解释器神秘地开始返回代码 253,而我的命令根本没有任何变化。

代码253/代码9是什么意思?谷歌搜索perl解释器的退出代码一无所获。在哪里可以找到 Perl 解释器的退出代码列表?

【问题讨论】:

perl 二进制文件给出了一个返回值,但它是二进制文件还是应用程序?也就是说,我可以编写一个带有exit(253) 的perl 程序,这将是进程的返回值。 255 附近的退出值通常是由于 shell 或其他包装器。 253 您的 shell 是否告诉您“找不到 perl”或“资源不足,无法分叉”之类的信息? 所以代码 253 是由于程序找不到文件路径。感谢所有的帮助。 【参考方案1】:

见perldoc perlrun:

如果程序在语法上是正确的,它就会被执行。如果程序运行结束而没有遇到exit()die() 运算符,则提供隐式exit(0) 以指示成功完成。

因此,您正在运行的程序必须以某种方式通过die、exit 或等效项指定这些退出值。

【讨论】:

【参考方案2】:

如果脚本没有运行,perl 解释器实际上确实返回它自己的退出代码。大多数语法错误导致退出代码 9:

未知功能/不允许的裸字:

perl -e 'use strict; print scalar(localtime); schei;'

$? = 9

除以零:

perl -e 'use strict; print scalar(localtime); my $s = 1/0;'

$? = 9

语法错误:

perl -e 'use strict; print scalar(localtime); my $ff; $ff(5;'

$? = 9

使用模具:

perl -e 'use strict; print scalar(localtime); die "twaeng!"'

$? = 9

一个未知的模块是我发现 perl 以不同方式退出的唯一一种情况:

perl -e 'use strict; use doof; print scalar(localtime);'

$? = 2

顺便说一句,我自己仍在寻找 perl 解释器退出代码的完整列表。除了 perl 解释器的来源之外,任何人都知道在哪里看?

【讨论】:

die 的 perldoc 包含有关退出代码的一些信息,但建议您不要依赖退出代码,除非它是非零的 我认为这是最全面的答案。谢谢你,@elwood【参考方案3】:

在正常情况下,perl 将返回它运行的程序返回的任何内容。因此,如果不知道它正在运行的程序,就无法概括返回值的含义。

【讨论】:

【参考方案4】:

Perl 本身没有任何已定义的退出代码;除非 perl 解释器以非常可怕的方式崩溃,否则退出代码由 perl 正在运行的程序确定,而不是由 perl 本身确定。

【讨论】:

我读到我必须将返回值右移 8 位才能获得脚本的返回值?它们不是并排输出它们的返回值,每个占用一个字节吗?【参考方案5】:

由于一些运行后错误代码发生了变化;如果您将 Java 应用程序作为持续运行的 web 应用程序运行,请检查它是否可能是某种内存泄漏。

您可以通过使用 perl 解释器的 -Tw 选项运行 perl 脚本来测试您的 perl 脚本是否存在各种问题,有关启用的污染模式和警告,请参阅 perlrun 了解有关这些的更多信息。

【讨论】:

你能解释一下为什么污点有助于解决这个问题吗?

以上是关于perl 解释器的状态码是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP状态码404是啥意思?

服务器返回的http状态码是啥[重复]

PIN 码的“达到最大尝试次数”的最佳 HTTP 状态码是啥?

REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?

Domain=kCFErrorDomainCFNetwork Code=303 这个错误码是啥意思?

400 BAD request HTTP错误码是啥意思?