Анимация
JavaScript
|
Главная Библионтека Изменение длины страницы Если определен формат начала страницы, длина страницы приобретает особое значение. По умолчанию длина страницы равна 60 строкам, т.е. если результаты работы функции write не умещаются до конца 60-й строки, то перед дальнейшим выводом текста автоматически вызывается формат начала страницы. Иногда 60 строк - не то, что нужно. Этот параметр можно изменить, установив переменную $=. Данная переменная содержит текущую длину страницы для выбранного в текущий момент дескриптора файла. Опять-таки, для замены дескриптора stdout (выбранного в текущий момент дескриптора файла по умолчанию) на другой нужно использовать операцию select. Вот как следует изменить дескриптор файла logfile так, чтобы страница содержала 30 строк: ?old = select LOGFILE; # выбрать LOGFILE и сохранить старый дескриптор S= = 30; select Sold; Изменение длины страницы вступает в силу только при следующем вызове формата начала страницы. Если вы установили новую длину перед выводом текста в дескриптор файла в каком-то формате, то все будет работать как надо, потому что формат начала страницы вызывается при первом же вызове функции write. Изменение положения на странице Если вы выводите свои текст в дескриптор файла с помощью функщги print, то значение счетчика строк будет неправильным, потому что Perl проводит подсчет строк только для функции write, Если вы хотите дать Perl знать, что выводите несколько дополнительных строк, можно настроить внутренний счетчик строк Perl, изменив значение переменной $-. Эта переменная содержит число строк, оставшихся на текущей странице для выбранного в текутций момент дескриптора файла. Каждая функция write уменьшает число оставшихся строк на число фактически выведенных строк. Когда значение этого счетчика достигает нуля, вызывается формат начала страницы и из переменной $= (задающей длину страницы) копируется значение $-. Например, чтобы сообщить Perl, что вы послали в STDOUT дополнительную строку, нужно сделать следующее: write; # вызвать формат STDOUT для STDOUT print "An extra line... oops\n"; # это идет в STDOUT S- --; # декрементировать S-, чтобы показать, что в STDOUT пошла строка не из write write; # сработает, учтя дополнительную строку В начале программы $- устанавливается в нуль для каждого дескриптора файла. Это позволяет гарантировать, что формат начала страницы будет первым элементом, вызываемым для каждого дескриптора файла при выполнении первой операции write. Упражнения Ответы см. в приложении А. 1. Напишите программу, которая открывает файл /etc/passwd по имени и выводит на экран имя пользователя, идентификатор (номер) пользователя и его реальное имя в форматированных столбцах. Используйте функции format и write. 2. Добавьте в предыдущую программу формат начала страницы. (Если ваш файл паролей относительно короткий, то, возможно, придется установить длину страницы где-то в 10 строк, чтобы можно было использовать несколько экземпляров начала страницы.) 3. Добавьте в начало страницы номер страницы, чтобы при их выводе указывалось page 1, page 2 ит.д. в этой главе: • Перемещет1а по дереву наталогов • Развертывание • Дескргтторы каталогов • Открытие и закрытие дескриптора каталога • Чтение дескриптора каталога • Упражнения Доступ к каталогам Перемещение по дереву каталогов Вы уже, вероятно, знакомы с понятием "текущий каталог" и с тем, как использовать команду cd shell. В системном программировании для изменения текущего каталога процесса вы производили бы системный вызов chdir. В Perl тоже используется это имя. Функция chdir в Perl принимает один аргумент - выражение; при его вычислении определяется имя каталога, который становится текущим. Как и в больщинстве других системных вызовов, при успешном изменении текущего каталога на затребованный chdir возвращает значение "истина", а при неудачном исходе - "ложь". Вот пример: chdir("/etc") die "cannot cd to /etc (S!) Круглые скобки не обязательны, поэтому можно обойтись и такой записью: print "where do you want to go? "; chomp($where = <STDIN>); if (chdir Swhere) { # получилось } else ( # не получилось Вы не сможете определить, где вы находитесь, не запустив команду pwd". О запуске команд мы расскажем в главе 14. Или не использовав функцию getcwd () из модуля Cwd. 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 |