Комментарии в Perl5 вылетят из программы? - PullRequest
0 голосов
/ 29 декабря 2011

Я учу себя Perl с помощью некоторых интернет-уроков, и по большей части все идет хорошо, и все идет гладко. Тем не менее, я не могу делать никаких комментариев, иначе программа не будет работать должным образом. Например, следующий код:

#eee
print "Estimation of Pi";

будет работать, но ничего не печатать, пока только это

print "Estimation of Pi";

работает и печатает то, для чего он предназначен.

Что я делаю не так? Я совсем этого не понимаю.

Также, на заметку, для чего нужен #! / Usr / bin / perl? Кажется, что мои программы работают без него (и, как комментарий, программы не работают с ним)

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Я подозреваю, что ваш файл не содержит того, что вы думаете, он делает.Возможно, у вас есть CR вместо LF или CRLF.

>perl -e"binmode STDOUT; print qq{#eee\rprint qq{foo\\n}}" | perl

>perl -e"binmode STDOUT; print qq{#eee\nprint qq{foo\\n}}" | perl
foo

>perl -e"binmode STDOUT; print qq{#eee\r\nprint qq{foo\\n}}" | perl
foo

Проверьте ваш файл с помощью шестнадцатеричного редактора или, что еще хуже, с помощью следующей команды:

perl -0777nE"BEGIN { binmode STDIN } say join ' ', unpack '(A2)*', unpack 'H*', $_" < file

#! isконцепция Unix.Windows не использует его, но Perl будет искать параметр командной строки в этой строке.Например, следующее предупредит:

#!perl -w
print undef;
1 голос
/ 29 декабря 2011

Возможно, вы выполняете сценарий как сценарий оболочки, а не как скрипт Perl, и в вашем $PATH есть команда print. Это предполагает, что вы находитесь в Unix-подобной среде. (Как выясняется, это не так; вы работаете в Windows. Но этот ответ может оказаться полезным для других.)

Что произойдет, если вы смените print на echo? Поскольку echo не является допустимой командой Perl, если она все еще работает, мое предположение, вероятно, верно.

Самая первая строка вашего скрипта должна быть

#!/usr/bin/perl

Этот «шебанг» сообщает системе, как выполнить скрипт, когда вы запускаете его по имени. Или вы можете запустить его с perl явно:

perl ./script_name
1 голос
/ 29 декабря 2011

Звучит довольно странно.Как вы выполняете эту программу?Если вы запускаете эту программу в системе, которая ожидает новые строки в стиле Windows, но создает ее с помощью текстового редактора, который генерирует новые строки в стиле Unix, что может привести к вашей проблеме.Попробуйте убедиться, что ваш текстовый редактор настроен на использование перевода строки в стиле Windows, если вы находитесь в Windows.

#!/usr/bin/perl не является комментарием.Это называется строкой shebang, и в системах Unix, если вы выполняете текстовый файл (то есть вы chmod +x filename.pl, а затем выполняете его с ./filename.pl вместо perl filename.pl), система ищет это в самой первой строкеи если он находит его, передает весь файл утилите, расположенной в этом файле, в данном случае /usr/bin/perl.Это полезно только в Unix-системах и только в том случае, если вы хотите, чтобы скрипт выполнялся.

В качестве другого совета - perl использует выходной буфер для всего, что передается print.Это означает, что если вы print что-то не заканчиваете символом новой строки (\n), оно удерживается в буфере до тех пор, пока вы не очистите буфер (обычно это не требуется в perl), не напечатаете что-либо, содержащее символ новой строки, иливыйти из программы.Вы можете переопределить эту функцию, добавив $| = 1; в свою программу, но лучше всего заканчивать свои сообщения новыми строками, в противном случае ваш экран просто загромождается.

...