Неожиданно про Perl или как снова полюбить CGI
Привет,
расскажу-ка я историю про то, как я написал, как сейчас модно говорить, “веб-приложение” на немодном Perl/CGI и при этом остался жив и вмеру упитан. =)
Вот все привыкли думать, что Perl - это очень старый и странный язык. И что он особо никуда не годится, и что есть более модные языки типа Ruby и Python, которые пушистее и белее.
Кстати сказать, я вообще-то не против Python’a или Ruby, мне даже они нравятся. Просто не вижу профита менять одно шило на другое.
Но в этом посте я хочу поговорить про то, что явилось неожиданностью для меня. Возможно, мой рассказ для многих покажется наивным, но, тем не менее, прошу отнестить с пониманием.
Итак, в мире Perl уже давно все очень прекрасно: есть Plack, AnyEvent, Coro, uwsgi и прочее и прочее. То есть, существует немало способов решить задачу быстро и надежно. То есть, про CGI уже все забыли.
Но это мы забыли про CGI, а вообще в мире шаред-хостинга не особо-то в курсе (притом, что немало хостингов работают на перле и, по идее, должны же как-то толкать прогресс в массы, но нет).
Но довольно отступлений. Рассказ мой посвящен возникшей задаче и ее решению на Perl. Итак, задача простая, институтская, второй курс, наверное: есть сайтик, на котором показывается каталог книг. По клику на заголовок, раскрывается инфа про книгу: автор, издательство, кол-во страниц, краткое описание. Все очень просто.
Меня смутило лишь, что задача должны крутиться на перле на шаред-хосте. То есть, никакого тебе Mojolicious. Никаких Template::Toolkit. Только CGI.
Ну и раз такая пьянка, то и базу данных лучше не трогать. И таки да, сначала я даже немного понервничал, вспоминая свои студенческие годы. Но после того, как включил воображение, оказалось, не все так плохо. Нет шаблонов? Окей, есть __DATA__, возможность встраивать текстовые даннные прямо в скрипт. Нужно только прочесть то, что ниже __DATA__ и выдать браузеру.
Чтобы не парсить этот текстовый блок перлом, я решил использовать js и с помощью ajax’a тянуть данные со своего скрипта внутрь шаблона на клиенте. Сэкономили на парсинге + сделали “современный” веб-интерфейс. Отличненько.
Как вы помните, я решил обойтись без базы данных, но передумал и воспользовался Sqlite. Впрочем, мог бы совершенно спокойно обойтись, ведь в перле есть отличная штука для сериализации данных - Data::Dumper. Она из любой переменной сделает тебе текст и его можно сохранять в файл, а при необходимости, читать файл, делать eval этой строки и дальше юзать.
Получается key-value хранилище, которому вообще ничего не нужно.
В итоге, имеем cgi-скрипт, который можно пускать почти везде и который написан часа за полтора с перерывами. А вы говорите, Perl. ;-P
