如何强制Perl使用-e eval开关时停止特殊处理后续命令行参数
Perl -e执行时透传特殊参数的解决方案
- 可通过在
-e的代码内容和待传递给脚本的参数之间插入--分隔符实现需求,这是通用的命令行选项终止约定,Perl原生全版本支持。
使用示例
# 原问题场景:--help被Perl拦截输出自身帮助 perl -e 'print(123, @ARGV);' --help # 加--分隔符后可正常透传所有参数 perl -e 'print(123, @ARGV);' -- --help # 输出:123--help
嵌入式perl_parse调用适配
如果通过perl_parse函数从嵌入式解释器调用,只需在构造传入的argv参数数组时按如下顺序排列即可:
- 首元素固定为Perl解释器名,一般为
"perl" - 第二个元素为
"-e" - 第三个元素为你要执行的脚本完整字符串
- 第四个元素固定为
"--" - 后续元素依次传入需要交给脚本处理的所有参数(包括
--help等原本会被Perl拦截的特殊选项)
实现原理
Perl的命令行解析逻辑会将--作为自身选项解析的终止标记,碰到该标记后就不再尝试识别后续内容为Perl内置选项,所有后续参数会原样存入@ARGV数组传递给用户脚本,完全不会触发Perl自带的--help、--version等内置响应逻辑,也不会影响你脚本中原有的参数处理逻辑。
内容的提问来源于stack exchange,提问作者Vadim Kantorov
相关产品推荐
相关产品推荐

