perl $ | = 1;Что это? - PullRequest
       20

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

22 голосов
/ 10 июня 2011

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

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

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

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

Спасибо

Ответы [ 3 ]

25 голосов
/ 10 июня 2011

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

$ OUTPUT_AUTOFLUSH (он же $ |):

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

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

Удачное кодирование.


Длядругие вопросы:

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

19 голосов
/ 10 июня 2011

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

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

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

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

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

7 голосов
/ 10 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...