Forum Webscript.Ru
Программирование => Perl => Тема начата: Axion от 14 Декабря 2002, 00:43:17
-
Вот кусок кода:
open (FILE,">$base_autors");
@LINES=;
$SIZE=@LINES;
for ($i=0;$i<=$SIZE;$i++) {
$_=$LINES[$i];
if (/\\-\\|\\-$god\\-\\|\\-$tom\\-\\|\\-$nom\\-\\|\\-$sta\\-\\|\\-(.*)\\-\\|\\-(.*)\\-\\|\\-/) {
$del="ok";
} else {
print FILE $_;
}
}
close FILE;
Он по идее должен делать:
открывает файл, удаляет строку, содержащую:
-|-$god-|-$tom-|-$nom-|-$sta-|-(.*)-|-(.*)-|-
остальные строки должны остаться без изменений
Он делает:
Удаляет из файла ВСЁ
Почему так?
-
Почему так?
Ты очищаешь файл первой же строкой. Читай про open, sysopen.
А еще используй поиск по форуму - недавно вроде обсуждали.
-
Н ведь я же делаю:
print FILE $_;
...непонимаю
-
Если тебе лень почитать доки (я же пальцем уже ткнул!), учись отлаживать свои скрипты - проверь для начала, что находится в @LINES после второй строки - там не будет того, что ты ожидаешь.
-
Axion
Н ведь я же делаю:
print FILE $_;
а еще ты делаешь
open (FILE,">$base_autors");
поэтому YA тебе тонко намекает, что открыв файл в режиме записи туды, ты первым "принтом" стираешь все содержимое тама. Ибо как сказано в мануале, открывши файл только для записи и записамши туда хоть что нибудь, да уничтожишь все содержимое файла.
-
ГЫ! Точно! и ещё одно! Правельнее писать не open (FILE,">$base_autors"); А open (FILE,">",$base_autors"); так скрпт не перепутает имя файла с Аргементом, что вполне вероятно под Unix системами ....
Так написанно в Кемел Буке (Лари Уол)!:)
-
---===STINGER===---
Ты бы хоть когда советы даешь проверял что пишешь.
-
---===STINGER===---, еще не забывай, что многие до сих пор сидят на версии 5.0 - там такое работать вообще не будет.