17

我想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。怎么了?

4

4 回答 4

25

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

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

所以:

#!/bin/env perl -w

相当于:

/bin/env "perl -w"

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

use warnings;

(如@Telemachus

于 2009-02-20T16:37:27.583 回答
16

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

#!/bin/env perl
use warnings;
use strict;
于 2009-02-20T16:17:38.227 回答
5

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

于 2009-02-27T02:01:00.567 回答
2

值得注意的是,Mac OS X 将 shebang 之后的字符解释为参数,因此在 OS X 上,以下将起作用:

#!/usr/bin/env perl -wT
enter code here

但是,由于使用 #!/usr/bin/env 的目的之一是促进跨平台兼容性,因此即使您主要使用 Mac,也最好不要使用该语法。

于 2011-09-28T03:10:27.383 回答