Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Можно попробовать разобраться 21.02.05 08:09 Число просмотров: 1958
Автор: Heller <Heller> Статус: Elderman
|
$num = grep($top, ".top"); - что делает эта строка? Имхо, именно в ней ошибка.
Синтаксис grep'а:
grep BLOCK LIST
grep EXPR,LIST
Возращает он в качестве результата "подсписок" списка LIST, состоящий из элементов LIST, для которых EXPR является истиной (либо истину возвращает последняя функция блока). Назначение grep в твоём случае я не понял.
Вроде бы, как я понял, ты пытался отрезать таким образом расширение. Даже если бы функция типа той, которую ты привёл, существовала, в программе крылась бы серьёзная ошибка.
Допустим, в директории появился ещё один файл с совершенно другим именем. Что произойдёт, если имя файла не будет иметь расширения ".top" - я не знаю, поскольку "noxi0uzz grep" нам пока не известен ;). Видимо, ничего хорошего. А вот если файл будет иметь расширение .top, но не числовое значение, то тогда могут получиться нехорошие последствия.
$num>$tp и $num-- нормально пройдут, синтаксис это позволяет, но тогда есть большая вероятность того, что в $num в итоге обнаружатся символы, который недопустимы как имя файла (-- работает так:("ccc"--)=="ccb", если не ошибаюсь).
Вырезать число из имени файла следовало бы следующим образом:
$top=~s/\.top//;
При этом всё равно все указанные выше ошибки остаются в силе. Что бы вырезалось действительно число, делать это надо бы так:
$top=~/^(\d+)\.top$/;
"Номер файла" при этом окажется в переменной $1 (читай perlfaq6). Эта же строка является условием, т. е. возвращает true/false - её можно использовать для универсальной проверки того, что имя файла имеет действительно нужный формат.
Вот. Вроде исчерпывающе :-)
|
|
|