0

Windows XP で ActiveState Perl 5.10.1 を実行しています。

次のプログラムは実行されますが、コマンド ラインに何も出力されません。

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

use strict;
use warnings;

print "foo\n";

シバン行を削除すると、期待どおり、出力として「foo」が表示されます。

ファイルの関連付けのみを使用して実行したりfoo.pl( )、PATH 経由で perl を参照したり ( perl foo.pl)、perl 実行可能ファイルを直接参照したりしても( )、同じ結果が得られますc:\perl\bin\perl.exe foo.pl

シバン行がなくてもスクリプトが機能する理由はわかりませんが、シバン行があると出力が得られません。私の理解では、シバン行は Windows の Perl に厳密には必要ではありませんが、-w...

明示的にハンドル STDOUT を作成しても違いはありません。print STDOUT "foo\n";

これは私を完全に夢中にさせています。ヒントをいただければ幸いです。

4

1 に答える 1

5

私があなたに与えたプログラムは間違っていました。だったはず

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

しかし、それでも問題が明らかになりました。行は、CRLF (0D0A) ではなくキャリッジ リターン (0D) で終了します。

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

Perl にとって、それはすべて 1 行です。そうです、プログラム全体が非常に長いシバン行です。

MacOS の行末 (10 年前に廃止されたマシン) から Windows の行末に切り替えると、問題は解決するはずです。

于 2013-06-07T07:30:16.370 に答える