Анимация
JavaScript


Главная  Библионтека 

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

Если вы работаете в одном из текстовых редакторов или интегрированной среде разработки и пытаетесь запустить на выполнение программу на Perl прямо из среды разработки, то текущий каталог, установленный операционной системой для ващей программы, может не соответствовать ожидаемому. Таким каталогом может являться каталог, в котором находится программа на Perl, рабочий каталог текстового редактора или любой другой каталог (в зависимости от установленных параметров среды разработки). Чтобы определить в программе на Perl рабочий каталог, воспользуйтесь функцией cwd.

Если при открытии файла пе указан полный путь к нему, как, например, в операторе ореп{ГН, "file") 11 die, будет предпринята попытка открыть указанный файл в текущем каталоге. Для изменения текущего каталога в программах на Perl используется функция chdir, как показано в следующем примере:

chdir вовый катапог

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

Вызов функции cbdir без параметров устанавливает в качестве текущего рабочий каталог пользователя. В системах UNIX это тот каталог, в который попадает пользователь после регистрации в системе. В Windows 9х, NT или MS-DOS рабочий каталог пользователя задается с помощью переменной окружения НОНЕ. Если такая переменная не установлена, вызов функции chdir без параметров не выполняет никаких действий.

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

use Cwd;

padnt "Текучий кагашг - ", cwd, "\n";

ciriir /top or warn "Оибка доступа к каташгу /tmp: $!";

padnt "СЙгаскышхэдиусяв ", cwd, "Nn-;

Оператор use Cwd необходимо указывать в программе только один раз. После этого

функцию cwd можно использовать столько раз, сколько нужно.


Оператор use Олс1 указывает интерпретатору Peri, что в этом месте программы должен быть загружен модуль Q/vd. Модули расширяют возможности Perl за счет добавления новых функций, таких как ол/d. Если в предыдущем примере с использованием модулей интерпретатор выдаст ошибку типа Cant locate Q/wd.pn in в INC или если вы так и не поняли, для чего вообще нужны модули, сильно не расстраивайтесь. Более подробно модули будут описаны на 14-м занятии, "Использование модулей".

Создание и удаление каталогов

ДЛЯ создания нового каталога Per! используется функции dir, синтаксис которой выглядит так:

mkdir новый каталог, права доступа,



Если указанный каталог успешно создан, функции dir возвращает истинное значение. В противном случае она возвращает ложное значение, а текст сообщения об ошибке помещается в переменную $!. Параметр досгута . имеет значение только в системах UNIX, однако его следует указывать всегда, независимо от того, работаете вы в UNIX или нет. В приведенных ниже примерах используется некое магическое число 0755, значение которого будет объяснено ниже, вразделе "Небольшой экскурс в UNIX". Для систем DOS и Windows просто используйте число 0755 и ни о чем не думайте! Сейчас мы не будем пускаться в долгие рассуждения, а сразу рассмотрим пример:

print "Укажите имя создаваемого каталога: •; ту $newdir=<STDIN>;

сЬощ) Snewdir;

fflkdir($newdir, 0755) j die Ошибка при создании каталога Snewdir: $!";

Для удаления каталога используется функция синтаксис которой выглядит так:

rmdir каталог;

Если указанный каталог успешно удален, функция rmdir возвращает истинное значение. В противном случае она возвращает ложное значение, а текст сообщения об

ошибке помещается в переменную $!, как показано в следующем примере:

print "Укажите имя удаляемого каталога: "; щ/ $baddir=<srDIN>;

ciionp Sbaddir;

rmdir(Sbaddir) die Ошибка при удалении каталога Sbaddir: $1";

С помощью функции rmdir можно удалить только пустые каталоги. Это означает, что перед удалением каталога в нем следует сначала удалить все файлы и вложенные каталоги.

Удаление файлов

ДЛЯ удаления файлов Perl используется функция unlink, синтаксис которой выглядит так:

unlink

Функция unlink пытается удалить все файлы, указанные в списке, и возвращает в вызывающую программу количество удаленных файлов. Если список файлов не указан, будет удален файл, указанный в переменной $ . Рассмотрим следующие примеры:

unlink <*.bat>;

$erased=unlink old.exe, a.out, personal.txt; unlink ibadfiles;

unlink; # Удаляется файл, имя которого указано в переменной $

Чтобы проверить, действительно ли были удалены все файлы из списка, нужно сравнить количество файлов в списке с тем, которое вернет функция unlink, например:

пу gfiles=<*.txt>;

шу $eras==urQirk §fils;

f (5ншим кэжнвсгто файлов в сгжхе с тэл, f жлцхе &>по удалаю if {$etas6d 1= §files) {

print "и файл! не были уральп ", joinC, <*.t), "\n";

>



в этом примере число удаленных файлов сохраняется в переменной Serased. После выполнение киии unlink значение переменной $erased сравнивается с количеством элементов массива Они должны быть одинаковыми. Если это не так, выводятся сообщение об ошибке и список тех файлов, которые не удалось удалить.

Файлы, удаленные с помощью функции unlink, восстановить уже нельзя, поскольку Perl не помещает их в корзину. Поэтому при работе с этой функцией будьте особенно аккуратны!

Переименование и перемещение файлов

Переименовать файл или каталог в Perl очень просто. Для этого используется функция rename, синтаксис которой приведен ниже:

rename ст&раевкя, вовое вмя;

Эта функция берет файл, имя которого указано в первом параметре, и переименовывает его в файл, имя которого указано во втором параметре. Если операция завер-щается успещно, функция rename возвращает истинное значение. Если в качестве первого параметра указан каталог, ему будет назначено имя, заданное во втором параметре. Если работа функции rename завершается аварийно, она возвращает ложное значение, а текст сообщения об ошибке в переменную как показано в следующем примере:

if (! renane "nyfile.", "arcfile.t" ) {

warn "Qu iiM DEpetiaHMH aJ nyfil.txt: $1";

С помощью функции rename можно также переместить файл в другой каталог. Для этого в качестве второго параметра укажите новый путь к файлу, например:

t Вьшолняегся пфемещение файла

rename "myfile.txt", "/tmp/myfile.txt";

Если окажется, что файл, заданный во втором параметре функции rename, существует, содержимое старого файла теряется.


С помощью функции rename нельзя переместить файлы из одного каталога в другой, если они принадлежат различным файловым системам.

Небольшой экскурс в UNIX

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

Начнем с того, что Perl имеет глубокие корни в UNIX. Более того, прототипом некоторых команд и операторов послужили аналогичные команды и вызовы операционной системы UNIX. С большинством таких функций вам никогда не придется сталкиваться. В то же время часть из них, как, например, функция unlink, используется достаточно часто. И несмотря на то что данная функция была также позаимствована из UNIX, большинство пользователей никак не связывает ее с миром UNIX. Причина заключает-



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