Поиск

Запись в файл

Для записи данных в файл сначала нужно открыть сам файл для записи. Синтаксис открытия файла для записи почти такой же, как и для чтения:

Синтаксис первой строки уже знаком нам, за исключением символа > перед путем. Этот символ говорит Perl, что в файл, путь которого указан следом, должны быть записаны новые данные. При этом уже имеющиеся данные в файле стираются и указанный дескриптор открывается для записи. Во втором примере символы » говорят Perl, что файл открывается для записи, но если файл уже существует, новые данные дописываются после имеющихся. Вот примеры:

До сих пор ваши программы на Perl вряд ли могли причинить какой-либо вред. Теперь, когда вы узнали, как записывать данные в файлы, следует очень осторожно использовать эту возможность, чтобы случайно не повредить ценную информацию. В системах с незащищенными системными файлами (Windows 9x и Мае) можно легко повредить операционную систему, случайно уничтожив один из ее файлов. Поэтому тщательно контролируйте, какие файлы вы открываете для записи. Восстановить прежнюю информацию в файле, открытом с помощью префикса >, практически невозможно. Восстановление файлов, случайно открытых с помощью префикса », может оказаться довольно сложным процессом, так что будьте начеку.

После окончания работы с файлом, открытым для записи, вопросом первостепенной важности становится закрытие этого файла и освобождение его дескриптора. Операционная система не переносит данные на диск тут же, как только совершается операция записи, данные вначале записываются в буфер, который периодически сохраняется на диске. Функция close сообщает операционной системе, что запись в файл завершена и данные должны быть помещены в место своего постоянного хранения на диске, например:

После того как файл открыт для записи, поместить в него данные очень просто. Это делается с помощью хорошо вам знакомой функции print. Пока функция print использовалась нами лишь для отображения данных на экране. В принципе эта функция может быть использована для записи данных в любой файл. Синтаксис оператора print, предназначенного для вывода данных в файл, очень прост:

print дескриптор СПИСОК

Здесь параметр дескриптор — это дескриптор файла, открытого для записи, а СПИСОК— список элементов, которые нужно вывести в файл.

Примите во внимание, что синтаксис оператора print не допускает наличия запятой между именем дескриптора и списком. Однако внутри списка запятая используется для разделения элементов списка, как и прежде. Отсутствие запятой между дескриптором и списком говорит Perl,' что лексема, следующая за print, — дескриптор файла, а не первый элемент списка. Если вы забудете об этом и поставите запятую, Peri выдаст вам сообщение: No comma allowed after filehandle (если включен режим вывода предупреждений).

Теперь рассмотрим следующий код:

В этом примере файл logfile открывается для добавления информации. Оператор print выводит сообщение в дескриптор КХЖ Значение, возвращаемое функцией print, проверяется, и, если запись не может быть сделана, выводится предупреждение. Затем дескриптор файла закрывается.

Одновременно можно открыть сразу несколько файлов для чтения или записи, как показано в следующем примере:

В этом примере выполняется простое копирование файлов. Кстати, можно несколько сократить код, объединив в одном операторе операции чтения и записи:

Так как функция print в качестве параметра ожидает передачи списка, оператор <SOURCE> находится в контексте списка. Угловой оператор в контексте списка считывает весь файл, а оператор print выводит его в дескриптор DEST.