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

时间:2009-02-20 16:15:53

标签: perl command-line scripting system

我想使用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的{​​{1}}标志。怎么了?

5 个答案:

答案 0 :(得分:25)

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

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

所以:

#!/bin/env perl -w

相当于:

/bin/env "perl -w"

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

use warnings;

(如@ Telemachus

答案 1 :(得分:15)

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

#!/bin/env perl
use warnings;
use strict;

答案 2 :(得分:5)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:-1)

您忘记了/usr目录。