Perl $| = 1; Что это?

Я учусь писать приложение CGI с Perl - Кевином Мельцером. Брент Михальски

Сценарии в книге в основном начинаются с этого:

#!"c:\strawberry\perl\bin\perl.exe" -wT
# sales.cgi
$|=1;
use strict;
use lib qw(.);

Какая линия $| = 1; Как его проложить, например. $| = 1; или $| = 1;? Зачем использовать строгое; после $| = 1;

Спасибо

Ответы

Ответ 1

perlvar является вашим другом. Он документирует все эти критические специальные переменные.

$OUTPUT_AUTOFLUSH (aka $|):

Если установлено ненулевое значение, сразу же отключается поток и после каждой записи или печати на выбранном в данный момент выходном канале. Значение по умолчанию равно 0 (независимо от того, действительно ли канал буферизуется системой или нет; $| сообщает вам, только ли вы попросили Perl явно очистить после каждой записи). STDOUT, как правило, буферизуется в строке, если вывод - на терминал, а буферный буфер - в противном случае. Установка этой переменной полезна в первую очередь при выводе на канал или сокет, например, когда вы запускаете программу Perl под rsh и хотите видеть результат как это происходит. Это не влияет на буферизацию ввода. См. Getc для этого. Смотрите, как выбрать выходной канал. См. Также IO:: Handle.

     

Мнемоника: когда вы хотите, чтобы ваши трубы были горячими.

Счастливое кодирование.


По другим вопросам:

Нет причин, по которым use strict; появляется после $|, за исключением соглашения с программистами. $| и другие специальные переменные не подвержены строгим таким образом. Интервал также не важен - просто выберите соглашение и будьте последовательны. (Я предпочитаю пробелы.)

Ответ 2

$| = 1; заставляет промывку после каждой записи или печати, поэтому выход появляется, как только он генерируется, а не буферизуется.

См. документацию perlvar.

$| - это имя специальной переменной. Вы не должны вводить пробел между $ и |.

Если вы используете пробелы вокруг = или нет, это не имеет значения для Perl. Лично я думаю, что использование пробелов делает код более читаемым.

Почему use strict; появляется после $| = 1; в вашем script, я не знаю, за исключением того, что они оба такие вещи, которые вы бы поставили прямо вверху, и вы должны их вставить одного порядка или другого. Я не думаю, что это важно, прежде всего.

Ответ 3

Не имеет значения, где в script вы помещаете оператор use, потому что все они оцениваются во время компиляции.

$| - встроенная переменная для автозапуска. Я согласен, что в этом случае это неоднозначно. Однако одиночный $ не является корректным выражением в perl, поэтому в процессе устранения мы можем сказать, что он должен означать.

use lib qw(.) кажется глупым делом, поскольку "." уже по умолчанию @INC. Возможно, это из-за старой книги. Это утверждение говорит perl добавить ".". к массиву @INC, который является "средой пути" для perl, то есть там, где он ищет модули и т.д.