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, то есть там, где он ищет модули и т.д.