Что такое callback в perl?

Что такое callback?

Если кто-нибудь заметит неточности, буду благодарна за комментарии.

Callback – это ссылка на блок исполняемого кода, который передан в качестве аргумента другому коду – функции, процедуре и т.п.

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

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

В принципе, callback в perl не совсем то же, что и в С. И что важно – он значительно доступнее для понимания.

 

Пример callback в perl

В данном примере мы получаем название команды и список параметров из командной строки.

В зависимости от того, какая команда была введена пользователем, упаковываем переданные в параметрах данные в тот или иной формат – в данном случае xml или html. Вместо того, чтобы писать списки для if-ов

мы создаем список подпрограмм-обработчиков и по запросу передаем ссылки на них:

Вызов программы:

 

Второй пример callback в perl

Еще один пример. Существует некоторый список обработчиков, каждый их которых выполняет какую-то свою работу. В зависимости от ситуации, функция main() получает произвольный список ссылок на те обработчики, которые надо запустить на выполнение.

В данном случае, список жестко прописан в массиве $functions, но в реальной жизни он мог бы зависеть от переданных программе параметров, полученных данных, произошедших событий.

Полезные ссылки

ru.wikipedia.org: Callback (программирование)

Callback functions

perldoc.perl.org: perlcall – Strategies for Storing Callback Context Information

12 thoughts on “Что такое callback в perl?

  1. KsenZ

    Привет. Хотел бы поинтересоваться, а каким инструментарием для программирования на perl ты пользуешься на маке?

    Reply
  2. Natalie Post author

    Привет. На маке – komodo edit. Хороший редактор, много форматов поддерживает.

    Reply
  3. KsenZ

    Совсем про него забыл, хотя только им и пользовался на Win и Linux…

    Reply
  4. Natalie Post author

    Komodo я использую только на маке. Потому что там нет ничего более удобного, к сожалению. В основном на рабочих местах стоит windows, там я всегда пользуюсь редактором Far, с подключенным колорером. Этого мне хватает, ничего более удобного для меня нет. Если приходится что-то редактировать на Linux-серверах – там использую редактор Midnight Commander. На FreeBSD был очень удобный редактор, который вызывался как ee – даже не знаю названия. Хорошо бы освоить vim, но пока …

    Reply
  5. KsenZ

    а я как то far не осилил, в linux только mc и пользуюсь. ее – это Easy Editor. vim мощный редактор, но его нужно изучать. Делал несколько попыток, но не чего вышло )))

    Reply
  6. Natalie Post author

    Спасибо за подсказку с ee! Я слышала про Easy Editor, но у меня были сомнения, что это одно и то же. На far мне было легко перейти, т.к. изучение ИТ для меня началось с DOS и Volcov Commander. Потом был DOS Navigator, потом плавно перешла на far – вот такая эволюция сознания ))) А vim изучить просто жизнь пока не заставила. Всегда для работы находился более простой вариант.

    Reply
  7. KsenZ

    А еще для мака есть замечательная штука MacPorts называется macports.org
    С помошью них можешь и mc собрать или ее :)

    Reply
  8. Natalie Post author

    Я пробовала собрать mc. Но там пошли какие-то проблемы с кодировками, а у меня на тот момент просто не было достаточного количества времени, чтобы разбираться с ними. А сейчас уже и желания нет.

    Reply
  9. KsenZ

    Буквально вчера собрал mc на свежую osx, и не каких проблем…
    Как то не по теме у нас раговор пошел, не как не про callback ))) просто не знал куда писать…

    Reply
  10. Natalie Post author

    У меня OSX совсем не “свежая”. А очень даже старая, ей уже года 4, без обновлений. Это, конечно же, немного усложняет установку новых программ, и mc в том числе. Разворачивать новую версию операционки не хочется, тут уже все работает и проверено. А отвращение к переустановке системы у меня еще со времен windows NT, которую довольно часто приходилось ставить на разные компьютеры, да еще с парой десятков дополнений и исправлений. А потом еще куча вспомогательных программ. Вот не понимаю, почему бесплатный проигрыватель SMPlayer после установки работает, а MediaPlayer на лицензионной Windows еще хочет пачку кодеков, часть из них – платные. Это же платная винда!!! Можно было бы прилично сделать…

    Я всего неделю как разрешила комментарии в блоге, так что, меня пока не раздражают “не тематические” комментарии. :)

    Reply
  11. demitel

    Маленькое замечание:
    if ($command=’to_xml’) {
    } elsif ($command=’to_html’) {
    } elsif ($command=’to_tsv’) {
    } … # ну сколько можно, этих форматов еще 120 штук
    }
    Здесь срочно нужно s/=/==/g;
    Ну и последняя } лишняя. :)
    Простите что брюзжу, но уж зело глаз резануло, даже комментарий вынудило написать :)

    Reply
  12. Natalie Post author

    demitel, спасибо за комментарий! Сама не понимаю, как так вышло. Ну лишняя скобка, это понятно – копировала и удалила часть промежуточного текста. А вот if …
    Похоже, добавила в текст не корректную версию скрипта, который был еще до отладки. Хм.
    Но лучше не s/=/==/g; а s/=/eq/g;

    Reply

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*