Анимация
JavaScript
|
Главная Библионтека Формат имен дескрипторов тот же, что и имен других переменных Perl. Подробнее об этом шла речь на 2-м занятии, "Строительные блоки Perl: числа и строки". Единственное отличие - в именах дескринторов файлов не должно быть символов, идентифицирующих тин неременной ($, @ или какого-нибудь другого). Поэтому рекомендуется в именах дескрипторов использовать только символы верхнего регистра, чтобы они случайно не совпали с современными или будущими зарезервированными служебными словами Perl, такими как foreach, else, if и т.д. Для имени дескриптора можно использовать строковой скаляр или функцию, возвращающую строку. Такие дескрипторы файлов называются косвенными. Сведения об их использовании обычно не приводятся в учебных пособиях для начинающих За дополнительной информацией о косвенных дескрипторах файлов обращайтесь к документации: страница perlfunc, раздел open. Каждый раз, когда необходимо получить доступ к файлу на диске, необходимо создать новый дескриптор и открыть его. Для открытия дескрипторов, как вы уже наверное догадались, используется функция open: ope гагор файла, путь) Первый аргумент функции open - дескриптор файла, второй аргумент - путь. Путь указывает, какой файл необходимо открыть, поэтому, если не указан полный путь, например с:/windows/system/, функция open попытается открыть файл в текущем каталоге. При успешном выполнении функция open возвращает ненулевое значение (Истина), при неудачном - возвращается Mdef (Ложь), например: if (open(HYFILE, "mydatafile")) { i В-гопиштситруспепвон апьш } else { pdnt "01р£та1р>1ап5Ы1и>14айга mydataf ile! \n"; } Здесь при удачном завершении функция open возвращает истинное значение, открывается дескриптор файла и выполняется блок if. В противном случае файл не открывается, выполняется блок кода else, сообщающий об ошибке. Во многих программах Perl подобный синтаксис "открыть или сообщить об ошибке" может быть реализован с помощью функции die. Функция die останавливает выполнение программы и выводит сообщение об ошибке: Died at евария line xxx Здесь имя сценария - название программы ххх - номер строки, в которой встретилась функция die. Функции die и open часто используются вместе следующим образом: ореп(МУтт, "novel.txt") die; Программа или открывает файл, или прекращает свое выполнение. Если open завершилась неудачно, возвратив ложное значение, вступает в действие логический оператор ИЛИ ( ). В результате будет вычисляться аргумент, находящийся в правой части оператора (в данном случае - функция die). При удачном выполнении функции open правая часть логического выражения не вычисляется. Иногда используют другой вид логического ИЛИ - or. По окончании работы с дескриптором его следует закрыть. Это хороший стиль программирования. Операция закрытия сообщает операционной системе, что указанный дескриптор следует освободить для повторного использования, а находящиеся в памяти данные, связанные с файлом, - записать в файл (если они не были сохранены ранее). Следует отметить, что операционная система позволяет открыть ограниченное количество дескрипторов файлов. После достижения этого предела для открытия нового дескриптора придется закрыть один из уже открытых. Для закрытия дескриптора используется функция close: close{MYTEXT); Если попытаться открыть файл, указав в качестве параметров функции open один из уже открытых дескрипторов, то вначале этот дескриптор закрывается, а затем повторно открывается. Пути До сих пор мы открывали файлы, указывая только их имена, например novel.txt. При открытии файлов без указания имени каталога Perl считает, что файл находится в текущем каталоге. Чтобы открыть файл в другом каталоге, необходимо указать путь. Путь указывает операционной системе, где находится файл. Путь нужно указывать в виде, принятом в используемой операционной системе. Ниже приведено несколько примеров путей для различных операционных систем: open(MYFILE lERCE.NOVEL]") die; » ЛМБ openCMYHLE, "Drive:folderiname)!! die; I Macintosli open(MYFILE, "/usr/pierce/novel") die; I UNK В системах Windows и MS-DOS в качестве разделителей в путях можно использовать символы обратной косой черты, например \Windows\users\pierse\novel,txt. Только при этом нужно помнить, что в строках, заключенных в двойные кавычки, символ обратной косой черты означает, что следующий за ним символ является специальным. Например: Этот пример не сработает, потому что \п в строках в двойных кавычках обозначает символ перевода строки, а не букву л, а все остальные обратные косые черты будут просто игнорироваться Perl. Вот корректный способ открыть файл: open (MYFILE, "\\WindaAB\\users\\pierse\\novel.txt ") j die; Чтобы эта же строка выглядела красивее, используйте символ косой черты (/) как разделитель путей в Windows и MS-DOS (в Windows и MS-DOS это допускается): open (MYFILE, "/Windows/users/pierse/novel.txt ") II die; * ЗЕВнигепыю Пути могут быть как абсолютными (/liome/foo в UNIX или с:/windows/win.ini в Windows), так и относительными (../junkfileB UNDC или . ./bobdir/bobsfile.txt в Windows). Функция open в Windows способна воспринимать пути, следующие соглашению об универсальных именах UNC (Universal Naming Convention). Формат путей в UNC выглядит так: \\иия иашивы\ вкя ресурса 84 Част t. Ос1 Perl понимает пути, заданные в формате UNC с использованием как прямых, так и обратных косых черточек, открывает файлы на удаленных системах, если сетевые средства операционной системы позволяют это сделать, например: open (ROOE common/foofile") die; В Macintosh путь состоит из имени тома, за которые едуют имена папки и файла, разделенные символами двоеточия, как показано в табл. 5.1. в Macintosh Описание MacPerl System:Utils;config MyStuff:friends ShoppingLlst Системный диск, папка файл config Папка f в текущей папке, файл friends Текущий диск, текущая папка, файл ShoppingList Береженого Бог бережет Создание программ для компьютера часто сопровождается неоправданным оптимизмом у программистов. Они думают: "Вот теперь она работает как надо!" или "Все ошибки наконец-то исправлены". Вообще чувство гордости за проделанную работу - отличная вещь; все достижения принадлежат людям, которые пытаются сделать невозможное возможным. Но иногда самоуважение переходит все границы и превращается в самоуверенность или высокомерие. В одной из древнегреческих трагедий высокомерие всегда жестоко наказывалось богами. Описанный феномен стал проявляться по мере распространения компьютеров. Фредерик П. Брукс (Frederic Р. Brooks) в своей классической работе The Mythical Man-Month (Addison Wesley, 1975, с. 14) писал: "Все программисты - неисправимые оптимисты. Возможно, современное волшебство (программирование) особенно привлекает тех, кто верит, что все сказки имеют хороший конец, но... Все наши идеи ложны, нам свойственно ошибаться, поэтому наш оптимизм неоправдан". До настоящего времени все приведенные примеры и упражнения имели дело с внутренними данными программы (множители чисел, массивы данных и т.д.) или с простыми строками, введенными пользователем с клавиатуры. При работе с файлами программы часто имеют дело с неподконтрольными им данными. Особенно это актуально, если данные не расположены на вашем компьютере, а пересылаются по сети. Поэтому следует иметь в виду, что может произойти сбой, на который программа должна отреагировать должным образом. Написание подобных программ называется безопасным программированием. "Безопасная" программа имеет бесспорные преимущества перед обычной, особенно если это касается устойчивости работы. Если программа взаимодействует с внешним миром, например открывает дескриптор файла, прежде чем продолжить выполнение, всегда нужно удостовериться, что предыдущая операция выполнена успешно. Лично я отлаживал сотни программ, в которых программист использует вызовы операционной системы, без проверки результата их работы, что очень часто приводит к сбою. Даже если ваша программа тестовая и пишете вы ее на скорую руку, всегда полезно убедиться, что все произошло так, как и ожидалось. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [ 22 ] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |