На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » И2Р Программы » Программирование » PHP

Perl для чайников (Учебник, ч. 2/3)

Итак вы всё    же решили встпть на тернистый путь 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    = );    $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 = );    $pri = $com;    $com =~ tr/A-Z/a-z/;    } else{ print `$com`;    print "enter comand:";    chomp($com = );    $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/

Другие разделы
C, C++
Java
PHP
VBasic, VBS
Delphi и Pascal
Новое в разделе
Базы данных
Общие вопросы
Теория программирования и алгоритмы
JavaScript и DHTML
Perl
Python
Active Server Pages
Программирование под Windows
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100