我在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";
这让我绝对疯狂;任何提示将不胜感激。
答案 0 :(得分:5)
我给你的程序不正确。应该是
perl -0777nE"BEGIN { binmode STDIN }; say unpack 'H*', $_" <foo.pl
但它仍然揭示了这个问题。您的行由回车符(0D)而不是CRLF(0D0A)终止!
2321633a2f7065726c2f62696e2f7065726c2e6578650d
0d
757365207374726963743b0d
757365207761726e696e67733b0d
0d
7072696e742022666f6f5c6e223b0d
0d
To Perl,这就是一行。没错,你的整个计划是一个很长的shebang线。
从MacOS线路终端(10年前已经过时的机器)切换到Windows线路终端,您的问题应该消失。