0

我在 Windows XP 上运行 ActiveState Perl 5.10.1。

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

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

use strict;
use warnings;

print "foo\n";

如果我删除 shebang 行,我会得到 'foo' 显示为输出,正如预期的那样。

如果我只使用文件关联foo.plperl foo.plc:\perl\bin\perl.exe foo.pl

我不明白为什么脚本在没有 shebang 行的情况下工作,但是当 shebang 行存在时我没有得到任何输出。我的理解是,对于 Windows 中的 Perl,shebang 行并不是绝对必要的,但如果您想使用诸如-w...

如果我明确地使句柄 STDOUT 没有区别,即print STDOUT "foo\n";

这让我非常抓狂;任何提示将不胜感激。

4

1 回答 1

5

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

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

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

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

对 Perl 来说,这就是一行。没错,你的整个程序是一条很长的shebang线。

从 MacOS 行尾(一台 10 年前过时的机器)切换到 Windows 行尾,您的问题应该会消失。

于 2013-06-07T07:30:16.370 回答