当shebang line存在时,Perl'hello world'不起作用(Windows)

时间:2013-06-07 07:02:26

标签: windows perl shebang activestate

我在Windows XP上运行ActiveState Perl 5.10.1。

执行以下程序,但在命令行中不生成输出:

#!c:/perl/bin/perl.exe

use strict;
use warnings;

print "foo\n";

如果我删除了shebang行,我会按预期显示'foo'作为输出。

如果我只使用文件关联(foo.pl)执行,通过PATH引用perl(perl foo.pl)或甚至直接引用perl可执行文件(c:\perl\bin\perl.exe foo.pl),我得到相同的结果。

我不明白为什么脚本在没有shebang线的情况下工作,但是当shebang线存在时我没有输出。我的理解是,对于Windows中的Perl来说,shebang行并不是绝对必要的,但是如果你想使用像-w这样的开关,这被认为是很好的做法...

如果我明确地设置句柄STDOUT,即print STDOUT "foo\n";

,则没有区别

这让我绝对疯狂;任何提示将不胜感激。

1 个答案:

答案 0 :(得分:5)

我给你的程序不正确。应该是

perl -0777nE"BEGIN { binmode STDIN }; say unpack 'H*', $_" <foo.pl

但它仍然揭示了这个问题。您的行由回车符(0D)而不是CRLF(0D0A)终止!

2321633a2f7065726c2f62696e2f7065726c2e6578650d
0d
757365207374726963743b0d
7573652‌​07761726e696e67733b0d
0d
7072696e742022666f6f5c6e223b0d
0d

To Perl,这就是一行。没错,你的整个计划是一个很长的shebang线。

从MacOS线路终端(10年前已经过时的机器)切换到Windows线路终端,您的问题应该消失。