命令行选项的顺序在 Perl 中重要吗?

Utk*_*tku 2 options perl

以下命令按预期工作:

perl -lne 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

这个也有效:

perl -nle 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

但是,这个错误:

perl -nel 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

错误信息是:

如果 /install(TARGETS (.*) RUNTIME DESTINATION bin)/: 没有这样的文件或目录,则无法打开打印 $1。

这是什么原因?

Kus*_*nda 6

-e选项接受一个参数,一个将被评估为 Perl 代码的字符串。当您使用perl -lne '...'并且perl -nle '...'这按预期工作时,选项的顺序并不重要(在这种情况下)。

但是,当您使用 时perl -nel '...',您会说“将字符串评估l为 Perl 代码,并将其'...'用作该代码要读取的文件名”,这毫无意义(这就是为什么您看起来很奇怪“没有这样的文件或目录”错误)。

所以,不,选项的顺序并不重要(这里),但是如果你移动-e选项,你必须移动选项参数,Perl 代码,这样 Perl 代码总是直接在它之后选项。

所以,如果你想把-e选项放在第一位,例如,使用

perl -e '...' -ln
Run Code Online (Sandbox Code Playgroud)

perl如果在同一命令行上混合使用-p-n等选项,则选项的顺序很重要。一个-p选项将被后面的-n选项覆盖,反之亦然,因此perl -npperl -pwhileperl -pn与 相同perl -n。这在perlrun手册中有记录(参见man perlrunperldoc perlrun)。