我可以在shebang线上使用带/ bin/env的perl开关吗?

Fra*_*ank 17 scripting perl command-line system

我想继续perl -w使用env.这在命令行上运行正常:

$ /bin/env perl -we 'print "Hello, world!\n"'
Hello, world!
Run Code Online (Sandbox Code Playgroud)

但它不适用于脚本中的shebang行:

#!/bin/env perl -w
print "Hello, world!\n";
Run Code Online (Sandbox Code Playgroud)

这是错误:

/bin/env: perl -w: No such file or directory
Run Code Online (Sandbox Code Playgroud)

显然env不明白-w我要传递的旗帜perl.怎么了?

Dou*_*der 25

hash-bang不是普通的shell命令行,解析和空白处理是不同的 - 这就是你所遇到的.看到:

基本上,许多/大多数unix将第一个空格之后的所有剩余文本放入一个参数中.

所以:

#!/bin/env perl -w
Run Code Online (Sandbox Code Playgroud)

相当于:

/bin/env "perl -w"
Run Code Online (Sandbox Code Playgroud)

所以你需要以其他方式处理perl解释器的任何选项.即

use warnings;
Run Code Online (Sandbox Code Playgroud)

(作为@ Telemachus)


Tel*_*hus 16

而不是-w使用警告pragma(对于现代版本的Perl):

#!/bin/env perl
use warnings;
use strict;
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为提出"-w"与"使用警告"不同可能是有用的.-w将适用于您使用的所有包,"使用警告"仅适用于词法.您通常不想使用或依赖"-w"