Проба пера Perl…

Продолжение статьи Кое-что про Perl…

Язык программирования Perl используется широко. Чаще его применяют для решения задач веб-программирования и системного администрирования в Linux.

Его синтаксис тесно переплетается с регулярными выражениями. Однако сразу погружаться в такой на первый взгляд непонятный мир мы не будем. Начнём с того, что попробуем на зубок простые программы — без ООП и веб-интерфейсов.

Чтобы познакомится с языком программирования Perl, напишем программу, которая будет подсчитывать стоимость ваших рублёвых сбережений в долларовом эквиваленте и на всякий случай в евро. Какие здесь могут быть подзадачи?

  1. попросить у вас, ввести суму в рублях (число)
  2. запросить через интернет у центробанка стоимость рубля в долларах и евро, мы поступим проще, спросим у того кто запустил программу (два числа)
  3. подсчитать, сколько у вас долларов или евро (другие два числа)
  4. предоставить вам результат.

Ввод и вывод данных сделаем через командную строку, то-есть в консоли. Если у вас Linux то никаких дополнительных телодвижений делать не нужно, Perl в системе уже должен быть установлен. Вам останется только написать программу и выполнить её в консоли.

Если на вашем компе обитает Windows, вам потребуется установить пакет Denwer http://www.denwer.ru/dis/Base/latest?from=site
И дополнение, в виде интерпретатора Perl
http://www.denwer.ru/packages/perl.html
Для скачивания этих пакетов программ, у вас попросят ввести имя и фамилию, и адрес электронной почты, куда будут отправлены ссылки на скачивание. Сначала установите сам пакет Denwer, если возникнут сложности, обратите внимание, на сайте есть видео в разделе «Видео для начинающих: работа с локальным сервером», оно называется «Денвер: установка». Смотреть видео лучше именно со страницы сайта, развернув на полный экран.

Проследите чтобы Denwer работал (как? можно узнать из видео), а уж затем начните устанавливать дополнение. Во время установки инсталлятор должен автоматом определить где находится уже установленный Denwer, если он сразу не может этого сделать, придётся по нажимать на энтер (инсталлятор автоматически перебирает варианты) или ввести путь к папке Denwer в ручную.

После всех установок, нам нужно рассказать операционной системе где искать интерпретатор. Иначе, нам придётся каждый раз в командной строке писать полный путь к нему. Для этого установите специальную системную переменную path, она относится к переменным окружения. Её можно установить так, зайдите в Пуск — Настройка — Панель управления — Система, откроется диалоговое окно, в нём зайдите на вкладку Дополнительно, там есть кнопка Переменные среды. Откроется следующее диалоговое окно, в нём есть раздел Системные переменные. в столбике Переменная выберите Path, нажмите Изменить. Появится новое диалоговое окно. В строке Значение переменной, оставьте пока всё как есть, и аккуратно установите текстовый курсор в самый конец имеющегося текста. Всё что там написано это пути к папкам, перечисленные через точку с запятой. Нам нужно добавить путь к папке с интерпретатором Perl. Если вы при установки Denwer во всём соглашались с инсталлятором и нажимали энтер, то можно смело ставить в конце строки точку с запятой и дописать следующий путь — z:\usr\bin\, как раз тут находятся интерпретаторы Perl и PHP. После этого, по порядку нажимайте на кнопки ОК в открытых диалоговых окнах.

Теперь можно проверить всё ли у вас получилось. Зайдите в Пуск — Выполнить, введите команду cmd и нажмите энтер (когда мы говорим что нужно ввести команду, это значит что после её набора на клаве нужно нажать кнопку энтер). Появится командная строка в окне консоли, в ней будет призывно мигать текстовый курсор, ожидая команд. Введите команду perl -v
В консольном окне должно появится нечто похожее

C:\Documents and Settings\dmitry>perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 50 registered patches, see perl -V for more detail)
…

Это говорит о том что интерпретатор вполне хорошо чувствует себя в вашей операционной системе, и он имеет версию 5.8.8.

Не закрывайте пока консоль, мы будем использовать её для запуска наших программ написанных на языке Perl. Что бы нам было удобнее, сменим текущую директорию в консоли. Для этого наберём команду cd (расшифровывается, как change dir), поставим пробел и напишем путь к желанной папке, хотя можно не писать, а просто перетащить нужную папку, её иконку в окно консоли. Для нас желанной папкой будет z:/home/perl/, создайте её. После перетаскивания убедитесь что в консоли получилась команда:
cd z:/home/perl/
Нажмите энтер. После этого мы ожидаем увидеть что приглашение консоли станет таким:
z:/home/perl>
Но так как корневым разделом, скорее всего, у нас был диск C:, то нам придётся выполнить команду Z: чтобы увидеть долгожданное приглашение в папку perl. Теперь мы уже почти готовы написать простую программку и запустить её в этой консоли.

Надеюсь что у вас ещё открыты окна консоли и проводника с папкой z:/home/perl/. Через проводник создайте в папке простой текстовый файл, назовите его first.pl. Жемчужным скриптам будем давать расширение pl. Для редактирования скриптов, конечно можно пользоваться навороченными IDE (Какими инструментами можно пользоваться?), нам же, пока, подойдёт “простой” текстовый редактор Notepad++. У него есть подсветка синтаксиса, что немаловажно при программировании, а также возможность работы в разных кодировках. Чтобы при выводе информации в консольном окне у нас были русские буквы, текст программы нужно писать в кодировке cp866. Это кириллическая кодировка, пришедшая к нам ещё со времён активного использования операционной системы MS DOS. Чтобы лишний раз не заниматься шаманством, в самом начале написания программы в Notepad++, пока перед вами чистый лист, выставьте кодировку текста. Для этого в меню выберите Кодировки — Кодировки — Кириллица — OEM 866. Обратите внимание, в нижнем правом углу строки состояния окна редактора должна появится надпись — OEM 866.

Если вы любите забегать вперёд, и уже успели написать программу в которой есть сообщения на русском языке, то примените копипастное шаманство:

  1. вырежьте в буфер обмена весь текст программы,
  2. поменяйте в редакторе кодировку на нужную (OEM 866),
  3. вставьте из буфера текст программы обратно в редактор.

Когда, в следующий раз откроете текст вашей программы в Notepad++, вы увидите непонятные символы на месте русских букв, не пугайтесь, просто выставьте нужную кодировку, никакого копипастного шаманства уже не нужно делать.

Все эти перипетии с кодировками не будут вас мучить, когда вы займётесь веб-программированием, так как текст программ вы будете писать уже в кодировке UTF-8.

Возвращаемся к задаче. Возьмём первый пункт:
вывод на экран консоли текста приглашения — ‘Введите сумму в рублях:’.
Реализуем это в программе.
Необходимый для вывода на экран текст мы обязательно заключаем в апострофы. По отношению к программе, это будут строковые данные написанные непосредственно в тексте программы. Пока что мы не представляем как вывести текст, для нас это целая задача, но в последствии она превратится в подзадачу. Как перевести её на язык программирования?

Для нас уже написана подпрограмма (все подпрограммы в Perl называются функциями) выводящая текст на консоль, она называется print. Нам только останется её написать в нужном месте текста программы. Как она узнает, что нам нужно что то вывести на экран? У нас есть два варианта.
1) Поставить непосредственно после имени функции пробел и написать строковые данные
print ‘Введите сумму в рублях:’;
2) После имени функции открыть круглую скобку, написать строковые данные, закрыть круглую скобку
print(‘Введите сумму в рублях:’);

Обратите внимание, что в конце обоих вариантов инструкций стоит точка с запятой. Это специальный символ для обозначения окончания инструкции.

Для простых функций, мы будем использовать первый вариант написания Листинг№1.

Листинг №1 Файл first.pl вывод на экран строку

print 'Введите сумму в рублях:';

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

z:/home/perl>perl first.pl

Естественно, что z:/home/perl> уже писать не нужно.

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

Продолжим наращивание мощностей нашего скрипта. Добавим обработку ввода данных. Для этого воспользуемся операцией <> — «магический кристалл». Она может многое, но мы пока используем только считывание ввода данных с клавиатуры листинг №2.

Листинг №2 Файл first.pl — ввод данных

print 'Введите, сумму в рублях: ';
$s = <>;
print 'Результат ввода: ' . $s;

В этом листинге вы видите уже знакомую функцию вывода строк (1-я и 3-я строки) а во 2-ой строке — пара новых операций. Вместе они делают следующее: в скалярную (обозначается $) переменную s помещается (присваивается — =) строка считанная с клавиатуры, с помощью <>. В последнем операторе то что хранится в $s добавляется к строковым данным с помощью операции «точка», она соединяет строковые данные в одну строку. Значение хранящееся в $s, perl может интерпретировать по разному, в строковом контексте — как строковые данные, ну а в числовом контексте — как число.

Дополним наш скрипт запросом курса доллара и евро. Считаем их в две переменные листинг №3.

Листинг №3 Файл first.pl — дополнительный ввод данных

print 'Введите, сумму в рублях: ';
$s = <>;
print 'Введите курсы доллара и евро, через пробел: ';
($d, $e) = split /\s/, <>;
print 'Результат ввода: доллар - ' . $d . ' евро - ' . $e;

Заметили новшества? Четвёртая срока! Аааааа — взрыв мозга! Собираем мозги обратно в черепную коробку.
Успокоились? Продолжим.
Во первых — слева от операции присвоения список скалярных переменных. Во вторых функция split, в которой используется простейший шаблон регулярного выражения /\s/ (всё-таки столкнулись с регулярками) и операция <> получения данных от клавиатуры. В этом операторе происходит следующее:

  1. ожидается ввод строки состоящей из двух чисел разделённых пробелом,
  2. функцией split введённая строка разбивается на список строк, разделитель на подстроки задаётся регулярным выражением.
Регулярные выражения можно заключать, например, в слеши /. В данном случае регулярное выражение — пробельный символ, который обозначается так — \s (от слова space). Обратный слеш нужен для превращения обычного символа в специальную последовательность обозначающую пробел.
  1. присвоение передаёт список, полученный функцией split, в список из двух переменных ($d, $e) (переменные принимают значения в указанном порядке).
  2. если во введённой строке будет больше элементов, то они просто потеряются.

До решения осталось немного. Добавим конвертацию валют и вывод результата на консоль — листинг №4.

Листинг №4 Файл first.pl — обработка данных

print 'Введите, сумму в рублях: ';
$s = <>;
print 'Введите курсы доллара и евро, через пробел: ';
($d, $e) = split /\s/, <>;
$rd = $s / $d if $d;
$re = $s / $e if $e;
printf "У вас %.2f долларов или %.2f евро", $rd, $re;

Смотрим на последние три строки, и разбираемся что там происходит.
Две из них похожи, так что смотрим на предпоследнюю. Из того что мы уже использовали, здесь встречается присвоение. Из всех операций оно выполняется напоследок, но только в том случае, если это одобрит управляющая операция if. Эту операцию нужно понимать буквально — если $e содержит что-то (не ноль), тогда можно спокойно выполнять операцию стоящую слева, а на нет и суда нет, просто идём далее. А слева у нас стоит… Что бы вы думали? Ага, правильно капитан очевидность — присвоение в $re результата деления $s на $e. Это хорошо, что мы заранее проверили $e, могла бы и ошибка выскочить во время исполнения скрипта — деление на ноль.

И напоследок, printf — форматированный вывод строк. При таком выводе, в выводимой строке расставляются метки, которые определяют формат вывода данных. А сами данные пишутся через запятую после этой строки. Обратите внимание на метки — они одинаковые. Все подобные метки начинаются со знака % (процент) после которого идут настройки формата — «.2» означает, что после запятой будут выводится две цифры десятичной дроби, а то что это именно десятичная дробь говорит символ f — float point (плавающая запятая).

Можете теперь пользоваться своей программой когда захотите подсчитать наличность. А если серьёзно, то после прочтения и выполнения этого тьюториала, у вас должно сформироваться представление о программировании на языке Perl. Кроме этого, вы получили навыки по использованию скалярных переменных в программе (те что обозначаются баксом), а так-же функций:
print
printf
split
и операций:
=
<>
if
Увидели регулярное выражение и воспользовались списком для распределения результата функции по переменным.

Продолжение следует…

Понравилась статья? Посоветуйте другу

Количество коментариев: 0

Добавить комментарий



[ Ctrl + Enter ]