Оператор Perl: $ | ++; труба знак доллара плюс плюс - PullRequest
16 голосов
/ 10 января 2012

Я работаю над новой версией уже выпущенного кода Perl и нашел строку:

$|++;

AFAIK, $ |относится к каналам, как объяснено в этой ссылке , и я понимаю это, но я не могу понять, что здесь означает ++ (плюс плюс).

Заранее спасибо.

РЕДАКТИРОВАТЬ: нашел ответ по этой ссылке :

Короче говоря: он заставляет печатать (сбрасывать) на вашей консоли перед следующим оператором,в случае, если сценарий слишком быстрый.

Иногда, если вы поместите оператор print в цикл, который выполняется действительно очень быстро, вы не увидите вывод вашего оператора print, пока программа не завершится,иногда вы даже не видите результат вообще.решение этой проблемы состоит в том, чтобы «очищать» выходной буфер после каждого оператора печати;это может быть выполнено в perl с помощью следующей команды:

$|++;

[update], как указано в r.Шварц, я ошибся;Приведенная выше команда приводит к тому, что print очищает буфер, предшествующий следующему выводу.

Ответы [ 4 ]

18 голосов
/ 10 января 2012

$| по умолчанию 0; выполнение $|++, таким образом, увеличивает его до 1. Установка значения, отличного от нуля, включает автозапуск выбранного дескриптора файла, который по умолчанию равен STDOUT и редко изменяется.

Таким образом, эффект заключается в том, что print операторы и тому подобное выводятся немедленно. Это полезно, если вы выводите данные в сокет или тому подобное.

12 голосов
/ 10 января 2012

$| - это сокращение от $OUTPUT_AUTOFLUSH, как вы узнали.++ увеличивает эту переменную.

$| = 1 будет чистым способом сделать это (IMHO).

4 голосов
/ 19 января 2012

Это старая идиома, за несколько дней до IO :: Handle.В современном коде это должно быть записано как

use IO::Handle; STDOUT->autoflush(1);

3 голосов
/ 10 января 2012

Увеличивает автозапуск, что, скорее всего, эквивалентно включению.

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