Почему на шеле нормально sleep работает, а на перле непонятно как?
Может я чего не понимаю?Вот это работает правильно:
--------------------------------------------------------
#!/bin/shm=10
s=0
while [ $m -ge 0 ]
do
let s=$s-1
if [ $s -lt 0 ]; then let s=59; let m=$m-1; fi
if [ $s -lt 10 ]; then s1="0$s"; else s1=$s; fi
if [ $m -lt 10 ]; then m1="0$m"; else m1=$m; fi
echo -en "$m1:$s1\b\b\b\b\b"
sleep 1
done
echo
--------------------------------------------------------А вот это же на перле, ждет незнамо чего:
--------------------------------------------------------
#!/usr/bin/perl$m=10; $s=0;
do {
printf "d:d%s", $m, $s, "\b"x5;
sleep 1;
$s--;
if ($s<0) { $m--; $s=59; }
} while (not $m<0);
printf "\n";
--------------------------------------------------------
Без слипа работает...Похожая проблема у меня с процессами.
Вот, например:
--------------------------------------------------------
#!/usr/bin/perlopen (PING, "tcpdump |");
while (<PING>) {
if (/(\d\d:\d\d:\d\d).\S*\s(\S*) > (\S*):/) {
print "$1 - $2 > $3\n";
}
}
--------------------------------------------------------
Выдает строки както порциями, и, если трафик небольшой, может выдать за раз данные за несколько секунд...
Выводит всё, но не вовремя...
Как сделать так, чтобы не было этих задержек с выводом...Может где в настройках проблема?
У меня ASPLinux 7.3 и RH 7.2
второй строкой в перловом скрипте вставь $|++;виной всему - буферизация вывода
Да, действительно поставил $|++;
и всё заработало! Спасибо!А в случае с tcpdump помогло не сразу.
Аказывается у tcpdump тоже буфиризация вывода,
и надо было запускать его с ключем -l.
Т.е.: open (PING, "tcpdump -l |");