Сисадминские Байки.
Я тут немного запал на Perl - для тех, кто не в курсе, это язык
программирования. Всяких скриптов полезных понаписал. Вообще, впечатление от
языка несколько двойственное. Постоянно сравнивал с "С", так как очень
много общаюсь и с ним. Тяжеловато, конечно, с типами данных. Все вот эти вот
"@$", "\$", "$$", "\&"
и пр. - это надо просто видимо проникнуться :) Т.е. что в Сях делается практически
интуитивно, то в Perl надо порядком начитаться и насмотреться примеров. Но некоторые
финты, что и говорить, хороши. Впрочем, язык с самого начала был ориентирован
на parsing, вернее сказать, сделан большой упор на него. Конечно, создатели
обобщили многлетние мучения со стандартными действиями, типа разбор ассоциативного
массива, работа с текстом и прочими, в общем-то, стандартными и занудными телодвижениями.
Как начинающий заниматься Перлом, могу посоветовать с чего начать изучать язык
и чего желать от работы системного администратора своего провайдера (если у
вас есть своя страничка/сайт и т.п.).
Итак, с чего начать: начать конечно, надо с провайдера. Самое
толковое, если он сделает вам так, чтобы скрипты запускались прямо из вашей
директории на вашем сайте. Обычно это не так. Обычно, скрипты отделены от директории,
где лежат все гипертекстовые документы. Туда (в директорию со всеми скриптами),
скорее всего, вас не пустят из соображений безопасности. В общем-то, со стороны
системного администратора это верно. Вот поэтому, вам как воздух необходимо,
чтобы администратор прописал запуск скриптов _от вас_ на вашу директорию. Далее,
необходимо, чтобы вы могли устанавливать аттрибуты исполнения файлам. Это тоже
должен разрешить сисадмин. С вашей стороны изменять аттрибуты файлов можно делать,
например, из встроенного ftp клиента FAR командера.
Ну, насчет самого языка... начну с примера. Самый простой пример,
который приводится везде, это такой:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><BODY>\n";
print "<BR>It's generated Html page<BR>\n";
print '</BODY></HTML>';
Первая строчка - понятно, это указание интерпретатора, потом идет
грубо говоря, указание браузеру (приемной стороне) в каком виде интерпретировать
данные вывода. В данном случае - это html. А есть еще просто "text/plain"
- это значит воспринимать просто текстом без интерпретации всяких там тэгов.
Или например "Location:www.address.com" - это значит, передать
браузеру (принимающей стороне) адрес, куда надо пойти. Он сразу же и пойдет.
На этой одной строке, вывод кстати и заканчивается.
Частенько накалывался с двойными кавычками и одинарными. Для чего
они сделаны: например, когда точно знаешь, что в строке нет переменных или еще
чего, что нужно будет интерпретировать перлу перед выводом, но зато дочерта
всяких двойных кавычек (которые нужно будет забэкслешивать) и пр. - используешь
одинарные кавычки. Иначе - двойные. Вот например "\n" - эта штука
в общем-то не нужна для вывода html - там это не имеет смысла, разве что в тэгах
<PRE> и еще для удобства просмотра source странички. Но в одинарных кавычках
она не сынтерпретируется и вылезет на страницу как есть - '\n'.
Ну, это-то все понятно, а вот весьма удобным представляется работа с локальными
файлами (чего нельзя сделать из Java-script'а, например). Причем, работа без
ограничений - это поиск, запись результатов обращений, запись результатов переданных
данных из форм и т.д. Приятно, что при работе с файлами помогает знание "С"
- даже синтаксис один и тот же. Впрочем, неудивительно. Тут менять было и нечего.
Первым моим чтивом по языку стал ресурс сервера www.citforum.ru
- вот с него бы я рекомендовал скачать все по перлу, хотя бы потому, что там
русский перевод. Но там только справочный материал и примеров хороших нет совсем.
Поэтому, для изучения я бы рекомендовал ресурсы, найденные мной в библиотеке
Мошкова. Набор самых удачных и показательных примеров для начинающего я
нашел в Perl tutorial
Ника Сильвера. Все на английском, правда, но этот туториал мне сильно помог.
Следующая вещь, от которой я просто отпал - это Perl
Practicum Хала Померанца. Он достаточно хорош для начинающего, но уверен,
что понравится даже глубоко знающим перл. Например, там хорошо разъяснена работа
с сокетами. Открыл далекий сервер - и обрабатывай его. Можно онлайновый даунлоадер
сделать. Потом все запаковать и автоматом сформировать список готовых архивов.
Качай себе на здоровье :) Или зеркалом управлять - тоже вполне простой скрипт
можно накатать.
Вообще, "практикум" Померанца, пожалуй, одна из самых сильных работ
по перлу. Там очень много советов дается по ходу. Так что, даже известные вещи
почитать полезно.
На первый взгляд достаточно убийственно выглядят регулярные выражения, которые
представлены во все красе юникса. Типа вот этого:
/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?$/
Между прочим, обычное выделение числа (и с десятичной точкой и
в экспоненциальном формате тоже) из строки. "[-+]?" - это
значит, что знаки "-" или "+" могут присутсвовать или нет
("?" делает это опциональным). "\d+" - это любая
цифра, повторяющаяся не менее одного раза. "(\.\d+)?" - десятичная
точка с цифрами после нее и скобки указывают, что эта конструкция может быть,
а может и не быть. Ну, дальше - понятно - разбор возможного присутствия экспоненциального
формата.
Пересыщение языка регулярными выражениями таких тяжелочитаемых, согласитесь,
строчек возможно могло бы вызвать раздражение, но просто все равно пришлось
бы придумывать язык описния запросов (запросов, а как же еще?) и был ли бы он
лучше, чем существующий? Который кстати, пошел от языка потокового редактора
sed, принятого в юниксе. Так что, диалог типа:
"- а какой у вашей программы интерфейс?
- ну... как в юниксе..
- а, понятно, значит, никакого..."
Вполне может иметь место :) Но это, казалось бы, неудобство на самом деле -
единственно разумное решение работы с сетевыми средствами и файлами, где понятие
потока, вообще, основополагающее.
В заключение хочу сказать, что связка Perl+html достаточно мощная штука и применение
его, разумеется, оправдано на сайтах, где нужен какой-либо сервис.
И на десерт, полная книга по Perl от самих разработчиков. Там
все с примерами. (скачать у меня
900kb zip)
|