我想继续perl -w
使用env
.这在命令行上运行正常:
$ /bin/env perl -we 'print "Hello, world!\n"' Hello, world!
但它不适用于脚本中的shebang行:
#!/bin/env perl -w print "Hello, world!\n";
这是错误:
/bin/env: perl -w: No such file or directory
显然env
不明白-w
我要传递的旗帜perl
.怎么了?
hash-bang不是普通的shell命令行,解析和空白处理是不同的 - 这就是你所遇到的.看到:
http://www.in-ulm.de/~mascheck/various/shebang/
http://homepages.cwi.nl/~aeb/std/hashexclam-1.html#ss1.3
http://en.wikipedia.org/wiki/Shebang_(Unix)
基本上,许多/大多数unix将第一个空格之后的所有剩余文本放入一个参数中.
所以:
#!/bin/env perl -w
相当于:
/bin/env "perl -w"
所以你需要以其他方式处理perl解释器的任何选项.即
use warnings;
(作为@ Telemachus)
而不是-w
使用警告pragma(对于现代版本的Perl):
#!/bin/env perl use warnings; use strict;
我认为提出"-w"与"使用警告"不同可能是有用的.-w将适用于您使用的所有包,"使用警告"仅适用于词法.您通常不想使用或依赖"-w"