Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Изучаем Perl - Шварц Р.

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 17 18 19 20 21 22 < 23 > 24 25 26 27 28 29 .. 124 >> Следующая

итоговый текст будет разбит на столбцы.
Гм-м. Мы забыли дать столбцам названия. Впрочем, это достаточно легко
сделать. Нужно просто ввести формат начала страницы;
format STDOUT_TOP =
Page 0<<
$%
Filename Name Word
Этот формат называется stdout_top; он будет использоваться при первом
вызове формата stdout, а затем через каждые 60 строк, выведенных в
stdout. Заголовки столбцов позиционируются точно по столбцам формата
stdout, поэтому все выглядит аккуратно.
В первой строке заголовка стоит неизменяемый текст (Раде) и трехзначный
определитель поля. Следующая строка - строка значений полей, в данном
случае она содержит выражение. Это выражение является переменной $%*, в
которой содержится число выведенных страниц.
Третья строка формата пуста. А поскольку она не содержит никаких полей,
то следующая за ней строка тоже пустая; она копируется прямо на вывод,
вследствие чего между идущими ниже номером страницы и заголовками
столбцов появляется пустая строка.
Последние две строки формата также не содержат никаких полей, поэтому они
копируются на вывод в том виде, в каком записаны. Таким образом, этот
формат обеспечивает создание четырех строк, одна из которых меняется от
страницы к странице.
* Благодаря модулю English можно использовать для этих предопределенных
скалярных переменных более мнемонические псевдонимы легко запоминающиеся
названия.
1. Введение
51
Чтобы это определение заработало, попробуйте присоединить его к
предыдущей программе. Perl отыщет формат начала страницы автоматически.
В Perl имеются также поля, которые центрируются и выравниваются по
правому краю области вывода. Этот язык, кроме того, поддерживает
одновременное выравнивание и по правому, и по левому краям. Подробно об
этом мы поговорим, когда дойдем до форматов, в главе 11.
Как сделать старые списки слов более заметными
Просматривая файлы *.secret в текущем каталоге, мы, возможно, обнаружим
слишком старые файлы. До сих пор мы просто пропускали их. Давайте сделаем
очередной шаг и переименуем такие файлы в *. secret. old, чтобы в перечне
содержимого каталога сразу было видно - по имени - какие файлы необходимо
обновить.
Вот как выглядит подпрограмма init_words () , модифицированная для
выполнения такой операции:
sub init_words {
while ( defined($filename = glob("*.secret")) ) {
open (WORDSLIST, $filename) I|
die "can't open wordlist: $!"; if (-M WORDSLIST >= 7.0) {
while ($name = <WORDSLIST>) ( chomp ($name);
$word = <WORDSLIST>; chomp ($word);
$words {$name} = $word;
}
} else { # переименовать файл, чтобы он стал более заметным rename
($filename, " $f ilename . old11) I |
die "can't rename $filename to $filename.old: $!";
}
close (WORDSLIST) j | die "couldn't close wordlist: $!";
}
}
Обратите внимание на новую часть оператора else в блоке проверки
"возраста" файлов. Если файл не обновлялся семь дней и более, функция
rename переименовывает его. Эта функция принимает два параметра и
переименовывает файл, заданный первым параметром, присваивая ему имя,
указанное во втором параметре.
В Perl имеется полный набор операций, необходимых для манипулирования
файлами; все, что можно сделать с файлом в С-программе, можно сделать с
ним и в Perl.
52
Ияучае.ч Perl
Ведение базы данных о времени правильного ввода секретных слов
Давайте проследим за тем, когда каждый пользователь последний раз
правильно вводил свой вариант секретного слова. Очевидно, единственная
структура данных, которая годится для этого - хеш. Например, оператор
$last_good{$name} = time/
присваивает значение текущего времени, выраженное во внутреннем формате
(некоторое большое целое, свыше 800 миллионов, число, которое
увеличивается на единицу каждую секунду) элементу хеша %last_good,
имеющему указанное имя в качестве ключа. В последующем это даст базу
данных о времени последнего правильного ввода секретного слова каждым из
пользователей, который вызывал эту программу.
При этом, однако, в промежутках между вызовами программы хеш не
существует. Каждый раз, когда программа вызывается, формируется новый
хеш, т.е. по большому счету мы всякий раз создаем одноэлементный хеш, а
по завершении выполнения программы немедленно про него забываем.
Функция dbmopen* отображает хеш в файл (фактически в пару файлов),
известный как DBM-файл. Она используется следующим образом:
dbmopen (%last_good,"lastdb", 0666) I |
die "can't dbmopen lastdb: $!",
$last_good{$name} = time;
dbmclose (%last_good) ![ die "can't dbrnclose lastdb: $!";
Первый оператор выполняет отображение, используя имена файлов lastdb.dir
и lastdb.рад (это общепринятые имена для файлов lastdb, образующих DBM-
файл). Если эти файлы необходимо создать (а это бывает при первой попытке
их использования), то для них устанавливаются права доступа 0666**. Такой
режим доступа означает, что все пользователи могут читать и осуществлять
запись в эти файлы. Если вы работаете в UNIX-системе, то описание битов
прав доступа к файлу вы найдете на man-странице chmod(2). В других
Предыдущая << 1 .. 17 18 19 20 21 22 < 23 > 24 25 26 27 28 29 .. 124 >> Следующая