-->
   
-->

Главная

ТАРИФЫ ХОСТИНГА
АРЕНДА СЕРВЕРОВ
КЛИЕНТАМ
ТЕХ. ПОДДЕРЖКА
РЕССЕЛЕРАМ
ПРОГРАММЫ И УСЛУГИ
ИНФОРМАЦИЯ
О КОМПАНИИ

  

Perl для чайников (ч.2)

 

Опубликовано:
24.09.04

Perl для чайников (ч.2)

Итак вы всё    же решили встпть на тернистый путь Perl программиста и полностью испить эту    чашу. Ну что ж, похвально. Тогда пришло время познакомить вас с самым главным    правилом Пёрл:    "Всегда есть несколько способов сделать это!"    Может пока это для вас непонятно, но поверьте - в этом вся соль...


Ну и хватит    философствовать, пора заняться делом. В предыдущей главе мы остановились на    программе, которая считывает введенную дос команду, а затем её выполняет.    Если вы помните - я настойчиво не советовал вам вводить дос команду format,    и если вы это читаете, то наверняка вы этого не сделали. Но всегда будет опасность    того, что вашу прогу запустит кто-то другой. В этом случае нам просто необходимо    усовершенствовать нашу программу таким образом, чтобы при вводе команды format    как минимум ничего не форматировалось. Задумаемся: как это сделать? Нам нужно    посмотреть какая команда была введена, и в соответствии с этим разрешить или    запретить её. Т.е. будет поставленно условие, которое будет соблюдаться при    получении команды. Рассмотрим как это действует.

If (проверяем    условие) {    Если всё правильно - сделать одно;    }    else {    Если нет - другое;    }

В скобках после    оператора IF находится некое условие, которое в результате проверки даст нам    истину или ложь. Эти два понятия являются основными для Пёрл и поэтому вам    придётся смириться с их некоторой "странностью". Истиной в Пёрл    является НЕ пустая строка или, если речь идёт о числах, не ноль. Результатом    проверки условя и будет 1 или 0. Таким образом, если при поиске в введённой    команде слово format , мы получим истину, то выполнится первое действие, заключенное    в круглые скобки и называемое блоком операторов (например можно вывести    строку с сообщением об ошибке) иначе выполнится второй блок операторов.

Перед тем как    продемонстрировать вам апргейд нашей програмки, хочу обратить ваше внимание    на такую конструкцию:

If (условие1)    {    Первый блок операторов; }    Elsif (уловие2){    Второй блок операторов; }    Elsif (условие3) {    Третий блок; }    Else {    Четвёртый блок;}

Такая форма    записи позволит вам задавать столько условий, сколько понадобится. А теперь    - долгожданный апгрейд:

print "enter    comand: ";    chmod($com = <>);    if ($com =~ /format/i) {    print "incorrect command\a";    }    else {    print `$com`;    }    print "Press \"ENTER\" to quit";    <>;

Думаю для вас    здесь должно быть понятно всё, кроме того как мы искали в переменной $com    слово format. Данный поиск удобнее всего сделать с помоцью поиска по шаблону    , но об этом я расскажу позже, а пока... Программа, которую мы написали    конечно интересна и даже защищает вас от форматирования, но она пока ецё не    удобна - ведь вам приходится каждый раз запускать программу снова. Давайте    сделаем так, что бы прога принимала команду, выполняла её и запрашивала новую    до тех пор пока мы не введём слово EXIT. В реализации данного вопроса нам    понадобитя такая вещь как цикл:

While (условие)    {    Блок операторов;    }

Наверное вам    это покажется смешным, но цикл - это тоже основа Пёрл :) В отличаи от условия,    цикл один раз выполняет блок операторов, после чего проверяется условие. И    если оно истинно, то блок выполняется ещё раз. Иногда для наглядности применяют    такую форму записи:

do {    Блок операторов;    } while условие;

Словами    это всё можно было бы сказать так: "Выполнять до тех пор, пока условие    истинно"    Но как же быть когда нам нужно сказать примерно следующее: "Делать до    тех пор пока условие не станет истинным"? В этом случае применяется оператор    until. Он имеет свойства обратные while и записывается также:    untli(условие){    Блок операторов;}

Или

do {    операторы    } until условие;

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

print "enter    number 20 or 30: ";    chmod($com = <>);    while ($com <= 50) {    $com++;    print "$com\n";}    print "Press \"ENTER\" to quit";    <>;

Хотя вам наверняка    уже всё поняино, :) всё же объясню эту программу. В первой строке мы выводим    приглашение ввести число от 20 до 30. Во второй - мы его считываем в переменную    $com. С третьей по пятую строку мы задаем цикл условием, которое ставим так:    "Верно, пока $com меньше 50", а в блоке операторов сначала прибавляем    единицу к нашему числу, а затем печатаем его. Когда цикл завершится мы увидим    на экране череду цифр от введенного до 50 (если было введено больше, то ничего    интересного не произойдёт) и просьба нажать enter для завершения программы.

А теперь, то    ради чего всё это объяснялось - очередной апгрейд:

print    "enter comand:";    chomp($com    = <stdin>);    $pri = $com;    $com =~ tr/A-Z/a-z/;    while ($com ne "exit"){    if ($com =~ /format/){    $bad = "$pri \- BAD COMAND! \n" x 999;    print "$bad\n";    print "enter comand:";    chomp($com = <stdin>);    $pri = $com;    $com =~ tr/A-Z/a-z/;    } else{ print `$com`;    print "enter comand:";    chomp($com = <stdin>);    $pri = $com;    $com =~ tr/A-Z/a-z/; } }    print "Press ENTER to quit";    <>;

В этой версии    нашей программы мы не толоко решили стоящую перед нами задачу, но и добави    кое что новое. Если бы мы ввели слово exit большими буквами (или хотя бы одна    буква была большой) , то желаемого эффекта мы не получили бы. Четвертая строка    переводит наше слово в нижний регистр (делает все буквы маленькими) уже упомянутым    методом поиска по шаблону, о котором будет рассказано в следующей главе. Кроме    того вас может заинтересовать: зачем мы копируем введенное слово из $pri в    $com? Это сделано для того, что бы ичспользовать первоначальный вариант ввода    позже. Например вы ввели FoRMaT, после четвёртой строки это будет просто format,    но в седьмой строке мы формируем новую переменную, в которой используется    первоначальный вариант, предусмотрительно нами сохраненный. Далее, в восьмой    строке, и это еще одно новшество, мы выводим полученную переменную 999 раз    (чтоб повадно не было! :). Остальное не должно вызвать у вас затруднений,    однако если таковые возникли - повторите пройденный материал.

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

На последок    даю вам домашнее задание ( Взято из книги Рэндала Шварца "Изучаем Perl"    ) :

Напишите    программу, которая читает список чисел (каждое из которых записано в отдельной    строке), пока не будет прочитано число 999, после чего программа выводит сумму    всех этих чисел. (Ни в коем случае не прибавляйте 999!) Например, если вы    вводите 1, 2, 3 и 999, программа должна ответить цифрой 6 (1+2+3).

Решение для    проверки и для ленивых здесь

 

Дмитрий Червинский
http://perlbook.nm.ru/


Версия для печати

Назад

Проверить домен

ru  com net

Новости компании

02.04.10
Технические работы на сервере!

В пятницу 3-го апреля 2009 г. возможен кратковременный перерыв в работе сервера с 17 до 18 часов в связи с проводимыми техническими работами. ...


08.09.08
ВНИМАНИЕ!!! Пользователям сервера PRO-HOSTING!

В связи с технической необходимостью, мы вынуждены перевезти оборудование из датацентра СТЕК в новый, более современный и удобный датацентр на Остаповском проезде. Переезд оборудования будет осуществл...


15.04.08
Новая рекламная акция нашей компании.

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


01.02.08
Специальная акция "Автоматизируй свой сайт"

Скидка 30% на покупку системы управления сайтом SSPRO. Установка системы управления производится бесплатно. Подробнее о системе управления сайтом смотрите на странице: Система управления сайтом ...


20.12.07
С новым 2008-м годом

Поздравляем всех клиентов и посетителей сайта с новым 2008 годом, желаем успехов в новом году, здоровья и счастья. Коллектив ООО " ССПРО ХОСТИНГ"  ...


06.02.07
Профилактические работы на сервере

Уведомляем Вас о том, что 06/02/2007 на сервере ONLINEHOST.RU администраторами датацентра "STACK" запланировано отключение электропитания, связанное с профилактическими работами на монтажной стойке. Н...



Ваш проект:


Коммерческий
Коммерческий
Коммерческий


2002-2009 (с) ООО "ССПРО Хостинг"
+7 495 77-88-33-9  Карта сайта,
Разработка сайта Cве-Арт | Cms Sspro