Perl – жив?!
        Блиц доклад
Perl Mova + YAPC::Russia 2010
Последние 2 года
все говорят только
     об одном
Жив ли Perl,
мёртв ли Perl?
Мёртв ли
живой Perl?
Жив ли
мёртвый Perl?
На самом деле я
хочу рассказать
другой доклад :)
Perl – зло?!
        Блиц доклад
YAPC::Russia + Perl::Mova 2010
Каждый год
на «May Perl»
Я рассказываю
  про «зло» :)
CGI
 «CGI.pm – зло?!», May Perl 2008
LWP
«Модули Net::*, использующие LWP::UserAgent – зло?!»,
                                      May Perl 2009
POE
 Такого доклада не было, но это так :)
PHP
ой :)
TT
«Template Toolkit – зло?!», May Perl 2010
– зло!
Может быть
CGI.pm, LWP, POE, TT
    не виноваты?
Может быть
Perl – зло !
Может быть
Perl – зло?!
НЕТ :)
На РИТе 2010 меня
попросили рассказать
     про «добро»
Поэтому я хочу
рассказать другой
    доклад :)
Perl – добро?!
        Блиц доклад
YAPC::Russia + Perl::Mova 2010
Однозначно,
Perl – добро!
Потому, что это
 мой доклад :)
Если речь идет
 о добре и зле
То это сказка :)
Если серьезно
«Мифы Перла»
Алексей Капранов
http://kapranoff.ru/myths
Я пишу про Perl в ЖЖ
    несколько лет
Решил проверить
реакцию читателей
Написал пост
«Perl гавно!»
«Я смотрю в будущее и
 в будущем Perl нет!»
       Андрей Шетухин
Реакция на пост

• Пост удалили с planetperl.ru
• «Как сделать так, чтобы меня
  отпустило, пожалуйста»
• «Бог умер» (с) Ницше
• «БУДУЩЕЕ С RUBY!» Аноним
Язык Perl толком
 не поменялся
  с 2003 года
Качество и стиль
моего кода изменился
    очень сильно
2003
#---------------------------------------------------------------#
#                        index.cgi                              #
#            Стартовый файл - путеводитель                      #
#---------------------------------------------------------------#
require "functions.cgi";
$query = new CGI;
$user = get_user();
  print $query->header(-charset => 'windows-1251');
  for my $i(0..$#menu) {
   for (keys %{$menu[$i]}) {
    if ($query->param('menu') eq $_) {
     $title .= " :: $menu[$i]{$_}";
     html_head($title);
     html_menu();
     require "$_.cgi";
     html_right($user);
     html_foot();
    }}}
 exit(0);
# student.cgi

head_title('Студенты кафедры');
print "
   <tr>
    <td valign="top" id=left>

    </td>";
vertical_line();
$stud_way = "$path{student}/info.txt";
print "
    <td valign="top">";
print $site_construct;
print "
    </td>
   </tr>n";
foot_way($way{student});
2004
my $dbh = Tools::connect();

my $tpl = new CGI::FastTemplate($PATH{template});
$tpl->no_strict;
$tpl->define(%DEFINE);

my $q = new CGI;
if (my $page = $q->param('page')) {
       my $url_page = $URL{cgi}.$PARAM.$page;
       if (my $p = Tools::get_one($dbh, $MENU{1}, $page) {
    	

 print $q->header(-charset => 'windows-1251');
	

 	

          # информация о разделе меню
          my $m = Tools::get_one($dbh, $MENU{2}, $p->{menu});
          my $k = Tools::get_one($dbh, $SELECT{0}, undef);
          my (%assign);
          $assign{IMG} = $URL{images};
          $assign{CSS} = $URL{css};
          $assign{JS} = $URL{js};
our %SELECT = (
   # ФИО по id
   fio => "SELECT name FROM person WHERE id = ?",
   ...
   0 => "SELECT * FROM info",	

   # id персоны по виду д.з.с.
   1 => "SELECT person FROM dzsperson WHERE dzs = ?",
   # название д.з.с. по коду преподавателя и виду д.з.с.
   2 => "SELECT dzs.name
    	

    FROM dzsperson, dzs
	

       WHERE dzs.id = dzsperson.dzs AND dzsperson.person = ?AND
        	

 	

 dzs.kind = ? AND dzsperson.kind = '0' ",
);
unless ($topimg || -s "$PATH{topimg}/$topimg") {
    	

 $topimg = (substr($fio, -2, 2) eq 'ич')
           ? 'man.jpg'
           : 'woman.jpg';
	

 }
2005
my $REQUEST = (
	

   	

 {
	

   	

 	

 1 => sub {
	

   	

 	

 	

 require Apache;
	

   	

 	

 	

 my $r = shift || Apache->request || return;
	

   	

 	

 	

 $r->register_cleanup(sub {1});
	

   	

 	

 	

 return $r;
	

   	

 	

 },
	

   	

 	

 2 => sub {
	

   	

 	

 	

 require Apache2::Response;
	

   	

 	

 	

 require Apache2::RequestRec;
	

   	

 	

 	

 require Apache2::RequestUtil;
	

   	

 	

 	

 require Apache2::RequestIO;
	

   	

 	

 	

 require APR::Pool;
	

   	

 	

 	

 my $r = shift || Apache2::RequestUtil->request || return;
	

   	

 	

 	

 $r->pool->cleanup_register(sub {1});
	

   	

 	

 	

 return $r;
	

   	

 	

 },
	

   	

 }->{$ENV{'MOD_PERL'} && $ENV{'MOD_PERL_API_VERSION'}}
	

      ||
	

   	

 sub {}
	

   )->($config->{'request'});
my $self = $class->SUPER::new(
   %$config,
   'method' => $REQUEST
      ? $REQUEST->method
      : $ENV{'REQUEST_METHOD'},
   'type'     => $ENV{'CONTENT_TYPE'},
   'query' => $REQUEST
      ? $REQUEST->args
      : ( $ENV{'QUERY_STRING'}
         || $ENV{'REDIRECT_QUERY_STRING'}
        )
   ,
   'length' => $ENV{'CONTENT_LENGTH'},
   'stream' => *STDIN,
);
2010
use Mojolicious::Lite;

get '/rss' => sub {
	

 my $self = shift;
	

 my $DB = $self->app->db;
	

	

 $self->render(
	

 	

 format => 'rss',
	

 	

 list => $DB->select(
           'select * from url order by -id limit ' .
           CONF->{'limit'}->{'rss'}
        ),
	

 );
} => 'index';
«Хороший программист
всегда важнее хорошего
        языка»
         Тим Банс
«Плохие программисты
будут программировать
       нечитаемо
    на любом языке»
       Дамиан Конвей
Почему многие
программисты
ненавидят Perl?
И считают, что
   Perl умер
Либо они плохие
 программисты
Либо им пришлось
  поддерживать
     Perl-код
 1998–2005 гг. :)
Либо они завидуют
 живому мёртвому
      Perl
Что нужно сделать,
 чтобы поменять
мнение хейтеров?
НИЧЕГО :)
Удалить весь
свой говнокод
Удалить из индексов
  Google и Яндекс
    говностатьи
 начала 2000х годов
Продолжать
программировать
     на Perl
И популяризировать
      это :)
P. S.
Perl – жив, хотя бы
потому что мы живы
и собрались здесь :)
use Perl
  or die
JFDI
Спасибо
за внимание!
 Анатолий Шарифулин
          sharifulin

Perl – жив?!