2013-06-07 3 views
0

Я запускаю ActiveState Perl 5.10.1 в Windows XP.Perl 'hello world' не работает, когда присутствует строка shebang (Windows)

Следующая программа выполняет, но не производит никакого вывода в командной строке:

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

use strict; 
use warnings; 

print "foo\n"; 

Если удалить притон линию, я получаю «Foo», показанный как выход, как и ожидалось.

я получаю тот же результат, если я исполню используя ассоциации файлов только (foo.pl), ссылки на Perl через PATH (perl foo.pl) или даже непосредственно со ссылкой на PERL исполняемый (c:\perl\bin\perl.exe foo.pl).

Я не понимаю, почему сценарий работает без линии shebang, но я не получаю выход, когда присутствует строка shebang. Я понимаю, что строка Shebang не является абсолютно необходимой для Perl в Windows, но считается хорошей практикой, если вы хотите использовать такие переключатели, как -w ...

Не имеет значения, если я явно сделаю дескриптор STDOUT, т.е. print STDOUT "foo\n";

Это сводит меня с ума; любые советы будут оценены.

+0

70 (предположительно байты) – GainfulShrimp

+0

ok, правильные окончания строк для Windows. – ikegami

+0

Я сомневаюсь, что это будет иметь значение, но можете ли вы добавить недостающую новую строку в конце и повторить попытку? – ikegami

ответ

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, и ваша проблема должна исчезнуть.

+0

Большое вам спасибо. Я только что обнаружил, что вы опубликовали это, что программа работала, если я использовал Edit> EOL Conversion> Windows (в Notepad ++). Я не знаю, как я случайно переключился на «режим Mac». :) – GainfulShrimp

+0

Macs в эти дни (то есть OS/X) используют окончание строки unix (0A). Я был очень удивлен, увидев 0D! – ikegami