| Perl’овка в домашнем
хозяйстве 16.09.2003 Илья Щуров Voyager
Домохозяйство Конечно, обычному пользователю обычной Windows-машины редко приходится обрабатывать log-файлы или писать cgi-скрипты, но Perl может пригодиться для решения куда более широкого круга задач. Вот несколько примеров. Однажды мне в руки попал диск, гордо именовавшийся «Музыкальной энциклопедией Deep Purple». В действительности — обычная mp3-коллекция, немного сдобренная фотографиями, текстами песен, историей группы и кривой оболочкой. И все бы ничего, да только дать человеческие имена каталогам и файлам разработчики поленились, в результате чего mp3’шки назывались весьма загадочно: «Songs/03/02.mp3» — понятно, о какой песне идет речь? Как оказалось, информация о названиях треков хранилась, во-первых, в id3-свойствах самих файлов, а во-вторых — в лежащих в другом каталоге плей-листах. Мне же хотелось скопировать весь диск в свою музыкальную коллекцию на винчестере, но так, чтобы все было разложено по полочкам: имена файлов совпадали с названиями треков, а каталогов — с альбомами. Разбираться с id3 не хотелось, зато формат плей-листов оказался на удивление стандартным, и рука сама потянулась к Perl’у. В течение нескольких минут написался скрипт, вытащивший информацию о названиях и скопировавший все в правильном виде, а мне осталось лишь с ужасом представить, сколько бы я проковырялся, вручную переименовывая сто тридцать один файл.
Впрочем, что я все о музыке да о музыке? Вот, например, история о применении Perl’а в фотографии. Волею судьбы на мою голову свалился цифровой фотоаппарат от Canon. При этом от удара в голове что-то повредилось, и теперь, где бы я ни находился, мой мозг автоматически анализирует окружающую обстановку на предмет композиции, освещения, выдержки, диафрагмы, баланса белого, глубины резкости и т. п., а жесткий диск компьютера постоянно пополняется гигабайтами отснятых кадров. История, которую я хочу рассказать, связана с одним из режимов работы камеры — так называемым Stitch Assist mode, который помогает снимать серии кадров для последующего их «склеивания» в одну панораму с использованием стандартного софта от Canon. Полезный режим, надо сказать. Одна проблема: чтобы скормить программе сделанные в нем снимки, их неплохо было бы для начала найти — порой среди тысяч других кадров. Не слишком интересное занятие, однако тоже легко поддающееся автоматизации. Дело в том, что камера записывает всевозможные данные о параметрах съемки в специальные EXIF-свойства файла, в том числе и режим. Поэтому достаточно взять какой-нибудь Perl-модуль, умеющий вытаскивать эту информацию (я использовал Image-Info), написать скрипт, прогоняющий через него все файлы каталога, и каким-либо образом отметить те из них, которые содержат в EXIF’е слово «Stitch». Пишется в течение пары минут! Мне могут возразить, что можно было бы просто с помощью стандартного поиска найти все jpg-файлы, содержащие слово «Stitch» (если рассматривать их как текстовые), и не мучаться. Это, конечно, так, но с помощью скрипта можно не только выделить кадры, снятые в определенном режиме, но и, например, отсортировать их в порядке возрастания выдержки или убывания диафрагмы, или автоматически переименовать их, добавив в имя какую-то информацию о съемке, или сделать множество других полезных в хозяйстве вещей. Еще одно занятие, для которого Perl подходит как нельзя лучше, — обработка текстов из электронных библиотек. Там часто встречаются «порезанные на строки» файлы в кодировке DOS, которые крайне неудобно печатать и читать — не из-за кодировки (ее как раз несложно перевести в Win1251), а из-за оформления: через каждые 80 символов в них начинается новая строка, а абзацы выделяются несколькими пробелами (в отличие от стандартного Windows TXT, в котором строка равна абзацу). Борясь с подобными файлами, начинаешь ценить мощь и простоту регулярных выражений. Программа, конвертирующая их в стандартный, опрятно выглядящий HTML, занимает всего пару строчек кода. Еще пара строчек — и ее можно использовать в пакетном режиме, натравливая на целые каталоги. Долой рутину! На десерт расскажу о совсем необычном применении этого языка. Однажды мне понадобилось проверить некоторое математическое утверждение, относящееся ко взаимному расположению многомерных эллипсоидов. Самому думать было лень, и я решил использовать для этих целей компьютер — чтоб не простаивал зря. Каково же было мое удивление, когда я обнаружил, что пишу программу не на C++ или Mathematica, а на вовсе не предназначенном для таких вещей Perl’е! Не могу сказать, чтобы результат получился изящным, но он работал. А одно из основных утверждений философии Perl так и звучит: «Если программа работает, значит, она хорошая». Разумеется, я мог бы еще долго продолжать разговор об использовании Perl’а в самых разных «бытовых» ситуациях, но не буду — полагаю, что приведенных в статье примеров вполне достаточно, чтобы выразить основную мысль: возможность в нужный момент быстро написать программу позволяет вам решать множество нестандартных задач и дает реальную власть над компьютером и информацией. Власть, за которую не надо бороться — достаточно просто освоить Perl.
|