以下命令按预期工作:
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。
这是什么原因?
该-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 -np
与perl -p
whileperl -pn
与 相同perl -n
。这在perlrun
手册中有记录(参见man perlrun
或perldoc perlrun
)。
归档时间: |
|
查看次数: |
157 次 |
最近记录: |