Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #26




Здравствауйте, уважаемые читатели.

Сегодня мы представляем Вашему вниманию статью о Perl.

Perl :: Маленькие этюды :: #1


Вступление


Для чего я начал эту серию статей? Прежде всего - мне нравится Perl. Еще - для поддержки раздела Perl на нашем форуме. Я хотел бы чаше видеть на нем любителей этого языка!


Лирика


Perl - один из самых интересных языков программирования, созданных за последнюю четверть века. Perl очень многогранен: с одной стороны, он очень сложен, с другой стороны, - очень прост. Думаю, Perl не устроит только приверженцев строгой модели ООП, т.к. он позволяет программисту самому выбирать уровень строгости и абстракции. Это очень дружелюбный язык и очень гибкий!

Если кому-то захочется еще больше лирики, рекомендую книгу "Programming Perl" ("Программирование на Perl") - там найдете много интересного и не только лирику - русское издание книги занимает 1152 страниц! Английский электронный вариент можно найти на сайте O'Reilly. Это лучшая книга о Perl, а среди авторов есть создатели этого языка.

При рождении Perl перенял лучшее из C, Shell и Awk, а позже, развиваясь самостоятельно, получил объектную модель и богатейшую коллекцию модулей - CPAN.

Наверное, не многие программисты PHP знают, что не будь Pеrl, не было бы и PHP. Ну, может быть, он и был бы, но, думаю, он был бы больше похож на ASP или что-то в этом роде.

Perl дал миру свою систему описания регулярных выражений для поиска и замены в строках - PCRE.

Perl... Короче, он еще много чего хорошего может...

Конечно, есть у него и недостатки, но мне они не мешают.


Маленький этюд #1 - Переопределение встроенных функций


В языке Perl есть понятие package - это нечто вроде namespace в C++. Package можно на ходу переключать, соответственно, попадая в другое простанство имен. Чтобы обратиться к имени объекта в другом пространстве имен, нужно либо указывать его перед именем объекта, либо импортировать имя в текущее пространство.

Имена объектов в Perl сохраняются во время исполнения программы и активно используются. Это отличие от компилируемых языков типа C/C++, где имена перестают иметь смысл после компиляции.

Еще в Perl есть набор встроенных функций. Они привязаны к package CORE и всегда доступны в текущем пространстве имен.

Perl позволяет переопределять эти функции, но и после переопределения их можно вызвать через префикс "CORE::".

Вот я и решил проверить, как это работает на примере функции print.


Код: (Perl)
#!/usr/bin/perl

use subs qw(print);

*print = sub # задание ф-ии для имени "main::print"
{
    CORE::print "Package: " . __PACKAGE__ . "\n";
};

print("aaa\n"); # вызывается "STDOUT->print" или "print STDOUT"
&print("aaa\n"); # вызывается ф-ия print из текущего пакета ("main")
main::print("aaa\n"); # явно вызывается "main::print"

=pod
    Результат:
aaa
Package: main
Package: main
=cut

Делайте выводы!

Задавайте вопросы!


10.12.2006 Чернышов Роман (RXL).

При оформлении статьи использован редактор Art Editor V2.0 нашего софорумца x77.
Отдельное спасибо Sel за борьбу с моей неграмотностью.

А теперь прощаемся с Вами до следующего выпуска.

                                        С уважением, команда Клуба.




В избранное