CheRt
Цитата:
Лишние тормоза.
Почему бы после нахождения не выйти из первого цикла?
Учитывая, что тем в форуме может быть много, и как правило, исходная строка где-то наверху (ибо ответы в основном идут в топики с первых страниц форума) выгрыш в скорости будет существенным.
Код: if ($header[$i]=~m/$num/i) {
$tmp=$i;
last;
}
Цитата:
Реализация всплывающих сообщений(тема с последним ответом становится первой в списке) для форума на файловой системе; данный учаток находится в функции сохранения ответа. В $_[0] передается номер темы(id файла):
Код:
subj_up($sid);
sub subj_up {
$subj_num=$_[0];
#Открываем файл-список тем и кидаем содержимое в массив
open(MN, "$head_file") or die "Cant open header file!";
@header=<MN>;
close(MN);
#Перебираем полученный массив и если находим в нем соотв. тему,
#кидаем ее номер в переменную $tmp
$num="subj=$subj_num";
for ($i=0; $i<@header; $i++) {
if ($header[$i]=~m/$num/i) {
$tmp=$i;
}
}
#Делаем блокировку по семафору(ф-ции lock и unlock думаю нет смысла приводить)
#Открываем файл-список на запись, печатаем туда элемент массива с номером $tmp
#По циклу кидаем все остальные элементы, не забыв пропустить $header[$tmp]
#Закрываем файл и отлочиваем семафор - усе в порядке
&lock;
open(MN, ">$head_file");
print MN $header[$tmp];
for ($i=0; $i<@header; $i++) {
if ($i!=$tmp) {
print MN $header[$i];
}
}
close(MN);
&unlock;
}
Лишние тормоза.
Почему бы после нахождения не выйти из первого цикла?
Учитывая, что тем в форуме может быть много, и как правило, исходная строка где-то наверху (ибо ответы в основном идут в топики с первых страниц форума) выгрыш в скорости будет существенным.
Код: if ($header[$i]=~m/$num/i) {
$tmp=$i;
last;
}