Perl

Автоматизация работы в Web с помощью LWP

Ставили ли вы когда-нибудь перед собой задачу проверить Web-документ на предмет наличия «мертвых» ссылок, найти его название или выяснить, какие из его ссылок обновлялись с прошлого четверга? Может быть, вы хотели загрузить изображения, которые содержатся в каком-либо документе, или зеркально скопировать целый каталог? Что будет, если вам придется проходить через proxy-сервер или проводить переадресацию?

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

* Помните, что по Ларри Уоллу три главных достоинства программыста есть Леность, Нетерпение и Гордость.

Модули LWP (Library for WWW access in Perl — библиотека для доступа к WWW на Perl) из CPAN решают за вас все эти задачи — и даже больше. Например, обращение в сценарии к Web-документу с помощью этих модулей осуществляется настолько просто, что его можно выполнить с помощью одностроковой программы. Чтобы, к примеру, получить документ /perl/in-dex.html с узла www.perl.com, введите следующую строку в свой shell или интерпретатор команд:

perl -MLWP::Simple -e "getprint 'http://www.perl.com/perl/index.html'"

За исключением модуля LWP::Simple, большинство модулей комплекта LWP в значительной степени объектно-ориентированы. Вот, например, крошечная программа, которая получает URL как аргументы и выдает их названия:

#!/usr/local/bin/perl
use LWP;
$browser = LWP::UserAgent->new(); # создать виртуальный броузер 
$browser->agent("Mothra/126-Paladium:); # дать ему имя
foreeach $url (@ARGV) { # ожидать URL как аргументы

  # сделать GET-запрос по URL через виртуальный броузер
  $webdoc = $browser->request(HTTP::Request->new(GET => $url));

  if($webdoc->is success) { # нашли
    print STDOUT "$url::,$result->title, "\n";

  } else { # что-то не так
    print STDERR "$0: Couldn't fetch $url\n";

  }
}

Как видите, усилия, потраченные на изучение объектов Perl, не пропали даром. Но не забывайте, что, как и модуль CGI.pm, модули LWP скрывают большую часть сложной работы.

Этот сценарий работает так. Сначала создается объект — пользовательский агент (нечто вроде автоматизированного виртуального броузера). Этот объект используется для выдачи запросов на удаленные серверы. Дадим нашему виртуальному броузеру какое-нибудь глупое имя, просто чтобы сделать файлы регистрации пользователей более интересными. Затем получим удаленный документ, направив HTTP-запрос GET на удаленный сервер. Если результат успешный, выведем на экран URL и имя сервера; в противном случае немножко поплачем.

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

#!/usr/local/bin/perl -w
use strict;
use LWP 5.000;
use URI::URL;
use HTML::LinkExtor;

my($url, $browser, %saw);
$browser ” LPW::UserAgent->new(); # создать виртуальный броузер 
fоreach $url ( @ARGV ) { # выбрать документ через виртуальный броузер
  my $webdoc = $browser->request(HTTP: :Request->new(GET => $url).);
  next unless $webdoc->is_success;
  next unless $webdoc->content_type eq 'text/html';

  # не могу разобрать GIF-файлы
  my $base = $webdoc->base;

  # теперь извлечь все ссылки типа <А ...> и <IMG...>
  foreach (HTML::LinkExtor->new->parse($webdoc->content)->eof->links) { 
    my($tag, %links) = @$_;
    next unless $tag eq "a" or $tag eq "img";
    my $1ink;

    foreach $1ink (values %links) {
     $saw{ uri($1ink,$base)->abs->as_string }++;
    }
  }
}
print join("\n",sort keys %saw), "\n";

На первый взгляд все кажется очень сложным, но вызвано это, скорее всего, недостаточно четким пониманием того, как работают различные объекты и их методы. Мы не собираемся здесь давать пояснения по этим вопросам, потому что книга и так получилась уже достаточно объемной. К счастью, в LWP можно найти обширную документацию и примеры.


Назад | Вперед
Содержание (общее) | Содержание раздела

«Vanilla JavaScript — создаём клон Paint в браузере» от Anton Golosnichenko

Продолжительность: 14 лекций (1 час 38 минут).

Документ о прохождении обучения: только в платной версии курса.

Формат занятий: при выборе бесплатного варианта пользователь получает доступ только к лекциям. Если оплатить обучение, дополнительно предлагаются практические занятия и тесты.

Программа занятий: пользователям предоставляется информация, достаточная для создания клона приложения Paint, работающего непосредственно в браузере. Также даётся полный цикл данных о Vanilla JS («чистом» языке программирования), его возможностях.

Что можно узнать на курсе:

  • как создать собственный графический редактор с сохранением файлов на ПК;
  • какие возможности предоставляет «чистый» JS;
  • как работать с HTML5 Canvas из JavaScript;
  • как обрабатывать события мыши и т. д.

Плюсы курса: подробное изложение материала.

Шаг 3 — Первая программа

Чтобы протестировать работу установленного в предыдущем шаге софта нам понадобится какая-нибудь простая программка. Будем писать «Hello, World!» ;) Для того, чтобы протестировать работу интерпретатора достаточно программки в одну строку:

print "Hello, World!\n";

Напишите эту строку в файл step3.cgi и запустите сначала из командной строки — perl step3.cgi.

А теперь попробуйте щёлкнуть по ней два раза левой кнопкой мыши. Ага, мелькнуло что-то и исчезло… Это не есть гут. Сейчас подправим.

#!/usr/bin/perl -w
print "Hello, World!\n";
sleep(3);

А теперь разбор полётов. Что же мы там такого понаписали? Первая строка — «#!/usr/bin/perl -w» — дань юниксовому прошлому. На этих платформах командный интерпретатор (aka shell), перед тем как запустить на исполнение текстовый файл, читает из него первую строку. Если она начинается с символов #!, то shell берёт всё, что следует за этими символами (а это обычно путь до интерпретатора), добавляет к получившейся строке имя файла и исполняет. Т.е. в нашем случае было бы выполнено «/usr/bin/perl -w step3.cgi». Под Windows эта строка не имеет никого смысла и без неё можно обойтись, как мы сделали в нашей первой программке. Но её до сих пор ставят потому, что а) традиция б) сегодня этот скрипт работает под Win32, а завтра его положат на сервер под FreeBSD в) в ней удобно передавать параметры perl’у. Добавка -w как раз и есть такой параметр. По умолчанию Perl выводит сообщения только об ошибках, а с параметром -w ещё и предупреждения, что бывает крайне полезно в процессе разработки программы

Ниже я ещё уделю внимание параметрам. Продолжим разбираться в нашей программке.

print — это функция вывода. Ей передаётся один параметр — строка в двойных («) или одинарных () кавычках. Её можно записать и так — print(«Hello, World!\n»). По умолчанию она выводит строку на экран, но может также выводить и в файл, и в сокет, и вообще хоть куда. Касательно «\n» — это символ перевода строки. Точнее это символ \ — говорящий интерпретатору, что дальше идёт специальный символ, а не буква, и сам символ перевода строки обозначающийся как n. Таких символов не мало, например \t — табуляция, \r — перевод каретки, \a — звонок и т.д. Последняя строка — sleep(3). Это функция останавливающая исполнение программы на кол-во секунд указанное параметром, в данном случае на три секунды. Как видите каждая строка (кроме первой естественно) должна заканчиваться точкой с запятой (;).

Напоследок ещё расскажу о параметрах perl‘а и пойду придаваться здоровому сну. Полезный параметр -w вы уже знаете. Ещё может найти применение параметр . Он позволяет выполнять программы передаваемый perl‘у в командной строке вместе с этим параметром. Например, perl -e «print .’ ‘ while()». Эта не хитрая программка ищет в каталоге файлы с расширением .cgi и выводит их на экран через пробел.

Ну, а остальное вам пока ещё рано… спешить нам ведь некуда ;)


Предыдущий Шаг | Следующий Шаг | ОглавлениеАвтор — 03.02.2004

Ruby

Ruby был разработан в 1990 году японским компьютерным экспертом Юкихиро Мацумото. Язык программирования имеет схожий синтаксис с Python, Java и Perl также стал одной из ведущих бэкенд-технологий на сегодняшний день. Это популярная платформа для разработки WEB-приложений, и большинство разработчиков предпочитают ее для создания прототипов.

Некоторые из ведущих онлайн-платформ, таких как Shopify, Airbnb и Etsy, используют Rubyдля автоматизации внутренних задач. Объектно-ориентированные, гибкие и легко масштабируемые функции делают ее очень популярной платформой.

Характеристики

Высокая производительность: Ruby очень продуктивен для выполнения бэкенд-задач благодаря хорошей читаемости кода и множеству сторонних библиотек. Разработчики могут получить доступ ко всем необходимым инструментам в Ruby; им вряд ли может понадобиться доступ к внешней документации.

Метапрограммирование: Ruby поддерживает метапрограммирование, которое позволяет программе получать данные из других программ и изменять себя во время работы. Наряду с другими инструментами, такими как макросы, скрипты и интроспекция, можно сильно ускорить написание проектов в Ruby.

Огромная библиотека: Ruby может использовать доступ к сторонним модулям, доступными в RubyGems.

Особенности тестирования: Ruby оснащен огромной библиотекой, содержащей несколько функций тестирования и автоматизации, которые повышают качество разработки продукта.

Быстрый и надежный: Бэкэнд-скрипты могут быть созданы быстрее с помощью Ruby по сравнению с другими скриптовыми технологиями. Методы объектно-ориентированного программирования делают Ruby более устойчивым и превосходным для создания запросов и обработки результатов. На нем можно писать код на 40% быстрее, чем на многих других скриптовых языках. 

Ограничения

  • Время исполнения на других скриптовых языков относительно быстрее, чем у Ruby.
  • Несмотря на наличие сообщества с открытым исходным кодом, Ruby имеет ограниченные источники и библиотеки.
  • Ruby является новым по сравнению с другими языками программирования; существующие бэкенд-разработчики считают его сложным для изучения.
  • Код Ruby сложно отлаживать.

Если у вас MacOS или Linux — у вас уже есть Perl

Интерпретатор Perl встроен почти во все UNIX-подобные операционные системы, поэтому его можно использовать в любой момент без установки. Единственное, что нужно проверить — что в системных настройках правильно указан путь к интерпретатору.

Запустить код на Perl в UNIX-среде просто: достаточно в командной строке написать perl <имя.файла> или perl <код на Perl>. 

Если у вас Windows, то всё сложнее — нужно будет использовать отдельный интерпретатор, написанный специально для вашей версии Windows. Дополнительный минус — так как это не родная среда для Perl, часть команд в таком режиме совместимости работать не будет. 

Python

Python (питон) — интерпретируемый, объектно-ориентированный язык программирования высокого уровня. Он поддерживает
классы, модули (которые могут быть объединены в пакеты), обработку исключений, а также многонитевую обработку.
Python относится к классу языков с динамической типизацией, предоставляет программисту автоматическую «сборку
мусора» и удобные высокоуровневые структуры данных, такие как словари, списки, кортежи и др. Питон объединяет
поразительную мощь с простым и ясным синтаксисом, продуманной модульностью и масштабируемостью. Одной из интересных
синтаксических особенностей языка является выделение блоков программы с помощью отступов (пробелов или табуляций),
поэтому в Python отсутствуют операторные скобки («begin/end», как в языке Паскаль или фигурные скобки, как в Си).
Python — oдно из самых простых средств обучению и применению ООП. Часто является как первым (для обучения), так и
последним (в череде используемых опытными программистами) языком программирования.

Python портируем и работает почти на всех известных платформах. Существуют порты под Windows, все варианты UNIX
(включая Linux), Mac OS и Mac OS X, Palm OS, OS/2 и т.д. При этом, в отличие от многих портируемых систем, на каждой
платформе Python поддерживает все характерные для данной платформы технологии (например, Microsoft COM/DCOM). Более
того, существует специальная версия Python для виртуальной машины Java — Jython
(http://www.jython.org/), что позволяет интерпретатору выполняться на любой
системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Python и даже быть
написанными на Python.

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

Стандартная библиотека языка Python богата и предоставляет программисту множество возможностей. Однако, если вам не
достаточно возможностей стандартной библиотеки, то существует множество библиотек, предоставляющих интерфейс ко
всем мыслимым системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы
Win32 API, а также COM в объёме не меньшем, чем у Visual Basic или Delphi. Кроме того, количество прикладных
библиотек для Python в самых разных областях без преувеличения огромно (веб, базы данных, обработка изображений,
обработка текста, численные методы, приложения операционной системы, и т. д.). Python легко расширяется языками C и
C++, а на платформе Windows — также с помощью COM. Библиотека Numeric Python для работы с многомерными массивами
позволяет достичь производительности научных расчётов, сравнимой с MATLAB. Кроме того, существует специальная
библиотека psyco (http://psyco.sf.net/), позволяющая оптимизировать выполнение
некоторых программ, после чего скорость их выполнения можно сравнивать с программами на Си. В среде коммерческих
приложений скорость выполнения программ на Python часто сравнивают с Java-приложениями. Существует реализация Python
для .NET (http://ironpython.com/).

Для Python существуют библиотеки доступа к СУБД (на платформе Windows доступ к БД возможен через ADO). Существуют
модули расширения для Python под Windows и Unix/Linux для доступа к Oracle, Sybase, Informix и MySQL. Существует
также пакет mxODBC для доступа к СУБД через ODBC, также поддерживаемый на платформах Windows и Unix.

С Python поставляется библиотека tkinter для создания кроссплатформенных программ с графическим интерфейсом. Данная
библиотека является фактически стандартом для GUI-приложений, написанных на Python. Многие люди при написании GUI
программ пользуются также библиотекой wxPython, основанной на библиотеке wxWidgets. Также часто используются
библиотеки PyQT (PyQt) и PyGTK.

Python и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие
от многих открытых систем, лицензионная политика на Python никак не ограничивает его использование в коммерческих
системах и не налагает никаких обязательств, кроме указания авторских прав.

«Уроки JavaScript для начинающих с нуля» от Олега Шпагина

Пройти курс

Продолжительность: автор предлагает 39 роликов, посвящённых различным аспектам программирования на JavaScript.

Документ о прохождении обучения: не выдаётся.

Формат обучения: видеоролики с комментариями автора.

Программа обучения: Олег Шпагин предлагает ознакомиться с базовой информацией о языке (переменные, логические операции, функции). Значительная часть роликов посвящена созданию эффектов на сайте с использованием возможностей JavaScript.

Чему можно научиться на курсе:

  • работать с данными различных форматов;
  • создавать циклы for, if, while;
  • писать практические приложения, например, для имитации фейерверка, снега, эффекта бьющегося экрана;
  • работать с функциями, в том числе с запуском по таймеру.

Плюс курса: автор рассказывает о возможности практического применения инструментов языка.

Perl CGI — Setting cookie values

Using , creating cookies that you can store on your client’s computers is very simple. Listing 1 below shows the steps necessary to create a cookie from a Perl program.

In the first step, you just create a CGI object, just as you normally would when using the CGI.pm module.

In the second step, you’ll define the cookie properties by calling the cookie method. In this example, the name of the cookie is MY_COOKIE, while the value of the cookie is «BEST_COOKIE=chocolatechip». You create a cookie just like this, by specifying the name and value of the cookie when using the cookie method:

$cookie = $query->cookie(-name=>'MY_COOKIE',
    -value=>'BEST_COOKIE=chocolatechip',
    -expires=>'+4h',
    -path=>'/');

In your applications you’ll probably want to create cookies with names like «SITE-ID» or «USER-ID», and then store a value in the cookie like «12345», or perhaps use something more complicated like «UID3:AGE=30». As you can see from this example, what you put in your cookie is entirely up to you.

As you can see from the documentation in the code of Listing 1, the rest of the parameters (besides the name and value) for the $query->cookie method are optional, but in many cases you’ll want to set these values to gain more control over your cookies.

Once you’ve defined your cookie in step two of the process, just add the cookie information to the header of your HTML page in step three with this statement:

print $query->header(-cookie=>$cookie);

This statement prints the header information to your visitor’s browser, and includes the information about the cookie you just created. If the browser will allow cookies to be saved to your visitors computer, the cookie information will be saved to their disk drive for later retrieval. (Note that it’s possible with many current browsers to turn off, or disable, cookies. You’ll need to account for this possibility in your programs, as we’ll discuss shortly.)

Steps four and five in this example are trivial. In your applications, you’ll perform some type of real work here, perhaps displaying a custom web page based on the User ID, or printing custom web page information for your shopping cart application.

«Основы JavaScript» от DoCode.ru

Длительность: всем желающим предлагается 19 часов лекций и неограниченная практика.

Документ об обучении: не выдаётся.

Формат обучения: на сайте приведены лекции, совмещенные с практическими занятиями. Проверка правильности выполнения заданий — автоматическая.

Программа обучения: курс разделён на 4 основных модуля, посвященных HTML5 и CSS, Bootstrap, jQuery и непосредственно основам JavaScript . Далее в рамках каждого модуля даётся подробное изложение материала.

Чему можно научиться в рамках курса:

  • работать с переменными, выполнять арифметические и логические действия;
  • работать со строками и массивами (находить определённый элемент, выполнять объединение и т. д.);
  • работать с функциями и свойствами объектов;
  • использовать циклы, логические операторы.

Плюсы курса: подробное изложение материала с уклоном в практическую плоскость.

Минусы курса: занятия обезличены. Нет возможности задать вопрос преподавателю.

23 «JavaScript. Основы для Начинающих» от Владилена Минина

Пройти курс

Продолжительность: 6 часов.

Документ о прохождении обучения: не предусмотрен.

Программа обучения: Владилен Минин даёт информацию об азах программирования на JS. Можно узнать, что собой представляет цикл, объект, функция, массив. Во второй части ролика автор рассказывает о разных методах работы (indexOf, find, includes и т. д.).

Что можно узнать на курсе:

  • как найти элемент массива;
  • как создать новый массив, в котором каждому элементу присваивается результат вызова определённой функции;
  • как найти индекс определённого массива в объекте и т. д.

Плюсы курса: автор доступно рассказывает о сложном.

В чем различие между программой и скриптом?

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

За счет того, что скрипты значительно короче программ, они выполняются тоже достаточно быстро.

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

Отличия TypeScript от JavaScript

Строгая типизация

Данные в JS хранятся в переменных и имеют какой-либо тип: строка, число, логическое значение. В JavaScript нестрогая, динамическая типизация. Это значит, что одной переменной можно присвоить сначала числовое значение, а потом, например, текстовое.

TypeScript добавляет в язык строгую типизацию. Каждой переменной при создании присваивается определенный тип (type) — стандартный или созданный самим разработчиком. Создать тип можно в пределах возможностей языка: например, число от 1 до 31 для записи дня в месяц или массив из двух элементов для записи координат.

Что такое «переменной присваивается тип»? Это значит, что на протяжении всего скрипта она сможет принимать только значения в рамках этого типа. Переменная, заданная как число, будет только числом. Если попытаться присвоить ей строковое значение, программа выдаст ошибку.

Помимо примитивных типов, уже существующих в JavaScript, — boolean, bigint, null, number, string, symbol, object и undefined, — TypeScript имеет уже знакомые нам типы any (разрешает использовать любое значение) и void (тип для функций, которые ничего не возвращают, у них нет return). 

Объектно-ориентированный подход

ООП, или объектно-ориентированный подход, рассматривает информацию, с которой работает, как классы (classes) и объекты (objects). Объект — это сложный экземпляр данных, а класс — «чертеж» или «каркас», на основании которого создаются объекты. Объект имеет класс, так же как переменная имеет тип.

В JavaScript есть возможности, которые позволяют реализовать ООП, но только частично. Язык поддерживает классы и объекты, и этого достаточно для базовых действий. Но, например, он не работает с модификаторами доступа — так называют возможность сделать какую-то часть класса «открытой» или «закрытой» для доступа со стороны.

TypeScript поддерживает три модификатора:

  • Public — элементы с этим модификатором доступны отовсюду без каких-либо ограничений. Этот модификатор установлен по умолчанию.
  • Private — элементы с этим модификатором доступны только из того класса, в котором они определены.
  • Protected — элементы с этим модификатором доступны из класса, в котором они определены, и в подклассах/производных классах.

TypeScript добавляет в JS множество возможностей ООП: и модификаторы доступа, и абстрактные классы, и другие особенности подхода.

Высокая скорость работы над проектом

TypeScript помогает сократить время на выявление и устранение багов, которые иногда сложно найти в динамической среде JavaScript. С помощью TypeScript можно написать более понятный и читаемый код, который максимально описывает предметную область. Таким образом архитектура становится более выраженной.

«Курс JavaScript Basic» от EasyCode

Пройти курс

Длительность: 34 видео продолжительностью до 32 минут.

Документ о прохождении обучения: не выдаётся.

Формат обучения: пользователь в удобное для себя время может просматривать ролики, в том числе наиболее интересные или важные для себя.

Программа обучения: любой желающий может узнать, что представляют собой переменные языка, числа, строки, объекты и условные операторы. Предоставляется информация о циклах и функциях, работе с атрибутами, событиях, AJAX и Promises.

Чему можно научиться на курсе:

  • работать с основными типами данных, выполнять их преобразование;
  • работать с разными объектами;
  • запускать функции;
  • выявлять ошибки в программном коде;
  • работать с Post-запросами.

Плюс курса: доступное изложение основных моментов, связанных с практическим использованием JavaScript.

Что пишут на Perl

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

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

CGI-скрипты — любые скрипты для обмена данными между сервером и клиентом

Для Perl неважно, в каком виде данные выходят и поступают обратно, — он переведёт их в нужный вид и отправит из одного сервиса в другой

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

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

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