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 解释器的状态码是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
PIN 码的“达到最大尝试次数”的最佳 HTTP 状态码是啥?
REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?