关于Perl -s开关文档与实际用法不符的技术问询
Perl
-s 参数文档描述的疑问与验证 现象与困惑
有这样一个使用-s参数的Perl单行命令示例:
perl -s -e 'if ($xyz) { print "$xyz\n" }' -- -xyz
该命令中,-xyz开关位于--之后,但依然能被-s正确解析并输出对应内容。
但查看perldoc perlrun中对-s的官方描述:
-s 启用对命令行中**程序名之后、文件名参数之前(或
--参数之前)**的开关进行基础解析。在此处找到的任何开关都会从@ARGV中移除,并在Perl程序中设置对应的变量。例如,以下程序在使用-xyz开关调用时输出"1",使用-xyz=abc调用时输出"abc"。#!/usr/bin/perl -s if ($xyz) { print "$xyz\n" }
这让我产生困惑:按照官方文档的描述,-s应该只解析--之前的开关,但实际示例中--之后的-xyz却能被正常解析。反过来,如果严格按照文档描述的写法执行命令:
perl -xyz -- -s -e 'if ($xyz) { print "$xyz\n" }'
会直接报错:
Can't open perl script "-s": No such file or directory
自定义文档修改与验证
基于实际测试的结果,我将官方文档中关于-s的描述修改为:
在程序名之后(或
--参数之后)、文件名参数之前
后续我补充了更精准的表述,并通过多个测试案例(包括独立.pl脚本和单行命令)验证了该表述的有效性。
疑问
请问我对文档的修改是否正确?是否存在perlrun语法变更但官方文档未及时更新的情况?
我的Perl版本信息:
perl --version This is perl 5, version 34, subversion 0 (v5.34.0) built for x86_64-linux-gnu-thread-multi
内容的提问来源于stack exchange,提问作者Martian2020
相关产品推荐
相关产品推荐

