我正在寻找某人权威地确认或更正我认为我对Perl脚本的shebang行上的-CSDA
选项的了解。
有关-CSDA
的文档,请参阅perldoc perlrun。简言之
- S:
STDIN
,STDOUT
和STDERR
假设为UTF-8- D:UTF-8是输入和输出流的默认PerlIO层
- 答:@ARGV元素应该是以UTF-8
编码的字符串
要使-CSDA
生效,必须在命令行中指定perl -CSDA script.pl
。
在5.10之前,shebang行上的-CSDA
将无声地失败,因为标准流已经被打开,并且@ARGV
已经在遇到它时被填充,除非{{1}已经在命令行中指定了。
在5.10之后,仅出现在shebang行的-CSDA
会导致-CSDA
因为该问题而嘎嘎作响。
过去使用perl
之前用于-CSDA
的脚本应该从shebang行删除perl
,因为它从未使用这些选项调用命令行(以及选项,如果仅在shebang行中指定,则不执行任何操作)。
我希望得到一些关于我上述哪些假设错误的可靠反馈。
答案 0 :(得分:3)
不确定我是多么权威,但我知道这是如何运作的。
答案 1 :(得分:3)
如果您的脚本是
#!/usr/bin/perl -CSDA
然后使用
启动脚本./script foo
操作系统将按如下方式启动Perl:
/usr/bin/perl -CSDA ./script foo
如果错误地启动脚本,行为的改变才会起作用,例如使用
/usr/bin/perl ./script foo
修复不是删除-CSDA
,修复是正确调用脚本。