2013-03-20 2 views
2

Это меня достало.Perl петля не распечатывается символ

Это работает:

print "Processing Feed\n"; 
while (my @p = $mainex->fetchrow_array) { 
    my $iis = "$pcount"; 
    print "$iis\n"; 
    # ... Do Other Stuff Here 
    $pcount++; 
} 

Что дает:

Processing Feed 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
... 

Это не работает (удалена \ п от линии 4):

print "Processing Feed\n"; 
while (my @p = $mainex->fetchrow_array) { 
    my $iis = "$pcount"; 
    print "$iis"; 
    # ... Do Other Stuff Here 
    $pcount++; 
} 

Который просто дает:

Processing Feed 

Я пытался построить счетчик, который будет выводить счетчик записи он был до используя что-то вроде:

while(Something){ 
    print "\b\b\b\b\b\b\b\b\b\b\b"; 
    print "$count"; 
    $count++; 
    # Do stuff here 
} 

Любые идеи, почему нет, если там нет \ п во втором примере ничего не печатает на экран? Я делал это много раз раньше и не могу понять, почему он не работает.

+0

Вам не нужно принудительно вводить '$ count' строку в' print '$ count ";' as ['print'] (http://p3rl.org/print" perldoc -f print ") заставляет его действовать как строка. Так что просто напишите 'print $ count;'. Что касается 'print '$ iis \ n"; 'vs' print $ iis, "\ n"; 'в этом случае это действительно не имеет значения. –

ответ

6

Новая строка в конце печати запускает поток стандартного вывода, который печатает на экране. Если вы добавите $|++ в начало своего скрипта perl, он включит автозапуск для stdout, и вы увидите свои номера.

+0

Awesome Thanks !! – someuser

+0

Единственное, чего я не понимаю, это то, почему это работает тогда: – someuser

+0

$ i = 0; while ($ i! = 1000) { print "."; } – someuser

4

Буферизованный ввод-вывод.

Данные выводятся на экран при появлении новой строки или при заполнении буфера (это может быть 512 байт или 4096 байт или какое-то довольно значительное количество).

Смежные вопросы