Что такое 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

Что такое callback в perl?: 12 комментариев

  1. KsenZ

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

  2. Natalie Автор записи

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

  3. KsenZ

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

  4. Natalie Автор записи

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

  5. KsenZ

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

  6. Natalie Автор записи

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

  7. KsenZ

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

  8. Natalie Автор записи

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

  9. KsenZ

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

  10. Natalie Автор записи

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

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

  11. demitel

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

  12. Natalie Автор записи

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

Комментарии запрещены.