1. Для большей уверенности попробуйте оформить Ваши строки типа:
"temp/$time.txt"
"$oldid|$oldkol\\n"
...
как
"temp/${time}.txt"
"${oldid}|${oldkol}\\n"
...
2. А вот такие записи я вообще не понимаю
push @newalluser,"$_\\n";
push @newalluser,"$time|$file\\n";
зачем хранить в массиве для каждой записи перевод строки, вставляйте его при выводе.
3. Эта запись ошибочна
if ($kol > "0") ....
решите, что Вы хотите сравнивать строки или числа
4. Тут
else { unlink ("temp/$oldfile.txt"); }
я бы подстраховался
else { unlink("temp/$oldfile.txt") if -e "temp/$oldfile.txt"; }
5. Я вижу открытие
open (OLDALLUSER...
но не вижу закрытия
PS Это конечно не ответ на Ваш вопрос, но возможно поможет в избежании других проблем.