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 - там такое работать вообще не будет.