div.main {margin-left: 20pt; margin-right: 20pt}Пёрл для чайников. Глава 3
Занятная всё таки
штука - perl... Вот и вас это захватило, и вы продолжаете путь, полный
самоистязания и бессонных ночей... Это всё конечно лирика, но и без этого
нельзя...
В этой части я расскажу вам о
ещё одной основе перл - поиск по шаблону. Данная тема является
основополагающей и пожалуй единственной по которой многие программисты во всем
мире используют в своей работе именно перл.
Начну немного издалека... Как
вы знаете (или должны узнать) в интернете основой передаваемой инфомации
является текст. С помоцью текста формируются html страницы, для осуществления
интерактивности вы вводите текстовую информацию в соответствующие поля...
Задумайтесь над следующим: сколько раз за всё время пользованием интернет вы
заполняли различные формы? Выбирали из открывающихся списков интересующие вас
темы? Иногда обработку таких данных можно осуществить с помощью JavaScript, но
этот способ не всегда является применимым если речь идёт например о гостевой
страничке или проверки регистрационных данных, в общем о том, что нельзя сделать
на одной странице, без привлечения посторонних ресурсов. Здесь нам на помощь
приходит перл, со своими богатыми возможностями по обработке текста (это и
является его основной отличительной чертой и одновременно
преимуществом).
Итак представим себе некоторую
абстратную задачу - принять от пользователя информацию и как-то на неё
среагировать. Например мы просим пользователя ввести название своего любимого
языка программирования (perl естественно:) и в соответствии с этим вывести ему
фразу наподобии: "Молодец! Уважаю!". М-да... опять лирика... Тем не менее
давайте рассмотрим как происходит обработка информации в этом
случае.
Основной вариант. Программа
принимает значение "perl". Отлично. Обнаружить сходство мы сможем используя
следующие приемы:
$enter =
"perl"; if ($enter
eq "perl") { #стандартное сравнение print
"Молодец!"; } else { print "Позор!"; }
Или вместо второй строки можно
написать:
if ($enter =~
/perl/)...
Казалось бы - какая разница?
Однако если в первом случае мы используем стандартное сравнение, то во втором
примере - поиск по шаблону. В данном случай шаблоном является
/perl/
С помощью практически
неограниченных возможностей поиска по шаблону (или как это ещё называется:
использование регулярных выражений) мы можем значительно расширить возможности
поиска.
Допустим, пользователь проникся
особым уважением к языку перл и ввел его с большой буквы. Первый вариант нам бы
тогда не подошел, нам пришлось бы создавать новое условие для поиска Perl с
большой буквы:
if ($enter eq ""perl){ if
($enter eq "Perl"){...} } else...
Но в шаблоне нам достаточно
добавить модификатор i и шаблон будет вылавливать слово perl невзирая на то
какими буквами оно записано:
/perl/i
Пользователь может даже ввести
"pErL" и программа всё равно найдет слово. К примеру скажу вам, что подобный
трюк например на С++ занял бы не менее десятка строк.
Далее представим себе случай,
когда поьзователь мало знакомый с перл ввел pearl (жемчужина) вместо
perl:
/pea?rl/i
В данном примере кострукция
'a?' говорит о том что нам подходит случай с буквой 'a' или без неё. А теперь
представьте как эти два условия осуществить с помощью стандартного сравнения?
Страшно?
Как отдельный пример, не
относящийся к нашей программе, рассмотрим замену найденных по шаблону данных.
Допустим нам надо заменить в неком файле все слова 'cold' на 'heat' при этом
естественно слова такие как 'colder' или 'ashcold' нам земенять ненадо. Замена с
помощью регулярных выражений осуществляется в перл следующим методом:
s/old/new/;
То есть мы ищем в тексте 'old'
и заменяем его на 'new'. Для нашего примера это будет выглядеть следующим
образом:
s/bcoldb/heat/gi;
Поясняю. В той части, где мы
описываем фразу для поиска мы применяем ключ /b, который означает границу
(начало или конец) слова. В конце у нас добавлены модификаторы g и i. С
модификатором i вы уже знакомы, а g означает, что поиск надо проводить
многократно. Т.е. если бы мы не поставили g, то был бы произведен поиск и замена
только первого найденного cold, а остальные уже остались бы без
изменения.
Вот вы и познакомились с
основами регулярных выражений. Относительного дальнейшего их изучения я могу
привести усредненную цитату из всяких книг по перл: "Полное описание регулярных
выражений заняло бы очент много места и поэтому для полного их описания пришлось
бы выпускать отдельную книгу". Правы ребята... Главное не заучить несколько
формул, а понять саму суть вопроса и тогда самостоятельное состовление шаблонов
не представит для вас особого труда.
В следующей главе мы вновь
вернёмся к нашей программе и будем продолжать её улучшение, в том числе и за
счет подпрограмм.
NS
Вопросы, пожелания и удары в челюсть по адресу: djns@mail.ru 07.04.2001
|