Упражнение: создание в Perl простой базы данных пользователей

Если вам приходилось звонить в центр гарантийного обслуживания, вы, наверное, обратили внимание, что человек на другом конце провода вначале спрашивает ваш телефонный номер, номер гарантийного талона, номер карточки социального страхования или какой-нибудь другой номер, позволяющий компьютеру вас идентифицировать. Эти номера — не что иное, как ключи базы данных, позволяющие получить доступ к информации о вас. Не правда ли, все это похоже на ключи хэшей в Perl?


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


Для того чтобы выполнить упражнение, нам нужны исходные данные. Запустите текстовый редактор, наберите приведенный ниже текст и сохраните его в файле customers.txt. Обратите внимание, что количество пробелов между столбцами не имеет особого значения. В большинстве случаев будет достаточно одного пробела.



Наберите программу, приведенную в листинге 7.4, и сохраните ее в том же каталоге под именем Customer. He забудьте сделать файл программы выполняемым, воспользовавшись инструкциями, приведенными на 1-м занятии, “Начало работы с Perl”.


После этого попытайтесь запустить программу, набрав в командной строке

perl Customer

В листинге 7.5 содержится пример диалога с программой Customer.




Проведем анализ программы.



  • СтрокаI. В этой строке указывается путь к интерпретатору (измените его в соответствии с конфигурацией вашей системы) и ключ -w. Всегда включайте режим выдачи предупреждений!
  • Строка 3. Открывается файл customers.txt и ему назначается дескриптор РН. Естественно, проверяется успешность выполнения этой операции и при необходимости выводится сообщение об ошибке.
  • Строки 4-5. В цикле выполняется чтение строк из дескриптора РН (каждая строка по очереди присваивается переменной $_). Символ перевода строки, находящийся в переменной $_, удаляется с помощью функции chomp.
  • Строка 6. Информация, находящаяся в переменной $_, разделяется по словам с помощью шаблона /s+/, соответствующего одному или нескольким пробелам. Выражение с функцией split взято в скобки и за ним следуют две цифры в квадратных скобках. Так как нас интересуют телефонный номер и адрес электронной почты, то используются только указанные части списка, производимого функцией split, и переменным $number и $email присваиваются соответствующие значения.
  • Строки 7-8. Для доступа к записям о клиентах по адресу электронной почты и по номеру телефона используются два хэша: %Email и %Phone. В первом хэше в качестве ключей используются адреса электронной почты, а во втором — номера телефонов.
  • Строка 10. В этой строке закрывается дескриптор рн.
  • Строка 13. Организовывается цикл while, выполняющий повтор блока кода. Выражение while (1) — идиома Perl для организации бесконечного цикла. Для выхода из этого цикла служит оператор last.
  • Строки 14—15. Считывается номер телефона и удаляется символ перевода строки.
  • Строки 17—20. Если номер телефона не введен, предлагается ввести адрес электронной почты.
  • Строки 22—23. Если ничего не введено, цикл повторяется. Если пользователь вводит символ q, происходит выход из цикла.
  • Строки 25—28. Если введен допустимый телефонный номер, строка 26 кода выводит запись о клиенте. Управление передается в начало блока с помощью оператора next.
  • Строки30—33. Если введен допустимый адрес, выводится запись о клиенте. Управление передается в начало блока с помощью оператора next.

В данном примере продемонстрировано сразу несколько возможностей Perl. Хэши используются для быстрого доступа к данным посредством ключей. В Perl хэши реализованы весьма эффективно, время ответа будет приемлемым, даже если в базе данных содержатся тысячи или десятки тысяч записей. Кроме того, на примере этой программы показано, как можно организовать управление процессом выполнения программы в простом блоке без использования управляющих структур while, do, until и им подобным.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: