Perl 5.10
в 2010-м
Часть I
История
и статистика
5.10.0
18 декабря 2007
Сегодня
20 февраля 2010
Прошло
795 дней
За это время
    5.10.1
За это время
   5.11.0, 5.11.1,
5.11.2, 5.11.3, 5.11.4
Всего на CPAN
 ~80 000 модулей
Всего на CPAN
~20 000 дистрибутивов
Всего на CPAN
 ~8000 авторов
Как часто
 используют
фичи Perl 5.10?
?
~ 200 модулей
~ 100 авторов
Часть II
Фичи Perl 5.10
!"#
   !"#$%&
     ''
()*+,$-%&.+-
//
%"$//$0.10
%"$//$23*!,
23*!,$//$45"!5
!6*,75
8*9:+;%&<$=
$$$$65:+;0"0<$=>>>?
$$$$65:+;@A@<$=>>>?
$$$$1:B"C3,$$$=>>>?
?
!,",:
!CA$7DC+,:)$=
$$$$!,",:$%7$'$EF
$$$$):,C)+$GG%7F
?
):8:&:!
;HI+"J:K<   4G
.L          4N
.M          .8I+"J:K
00
 %7*,#$'$%")8$00$@OD!7D6@F

%9"7"+7#=7*,#?$00'$@OD!7D6@F
Часть III
Как пишут другие
Как включить
C!:$P>EQEEEEF
C!:$P>EQEEQF
C!:$P>EQEF
C!:$P>EQEREEEF
C!:$P>QE>EF
C!:$9P>QE>EF
C!:$9P>QEF
C!:$B:",C):$@SP>QE@F
P>QE>E
         9P>QE>E
         9P>QE

vector string
version string

сокращенно — v-string
!"# для отладки
8*9:+$;%"7,*D+<$=
$$$$65:+$;0T*+73C1:R7J1S0<$=
$$$$$$$$J#$%7J1$'$%75*31NK7D+,:+,F
$$$$$$$$%7J1$'/$0T*+73C1:R7J1S;.!U<0F
$$...
00 и 00'
для значений по умолчанию
%(D),$00'$$P_`aF
%5D!,$00'$@3D7"35D!,@F

%7D3$$00'$@@F




[8SSbD"1:) — 07 Jul 2008
Perl extension for loading Postgres ta...
%",,)c=$J"&YDA$$?$00'$QF
%9"3C:$00'$QF

%",,)c=$%R$?$00'$EF
%",,)c=$9:)AD!:$?$00'$@@F
%",,)c=$1:AC8$$$?$00'$@@F
%9"3$00'$Q...
!CA$*J(D),$$$=
$$$$!5*B,F
$$$$J#$4")8!$'$2RF
$$$$W$6:$1D$+D,$7"):$"ADC,$"C,D9*9
$$$$%Tg=B*&:1,*J:?$'$%")8!=:(D75RDBB!:,?$0...
!"#$%"+!6:)$00$
$$$$-^$1D+@,$d+D6$:+DC85$,D$"+!6:)$#DC$#:,>-F




g"*3D — 29 Jan 2010
A pluggable Markov engine analogous ...
J#$%J")("R9:)!*D+$$'$
$$$$%[")!:SSO")("SSlMe^km$00$@C+1:B@F
J#$%!DC)7:R9:)!*D+$'$
$$$$%[")!:SSO")("SSeDC)7:SSlMe^km$00$@C+...
J#$%+C33*+8R!#JAD3$'
$$%)5!R!#JAD3NKn[")!:SSO")("SS^+,:)+"3SSe#JAD3SSmhbbRob^oep$00$%)5!R!#JAD3F

%"7,*D+$00'$%1:B"C3,R"7,...
J#$%,)"7:RB5$'$%")8R,)"7:RB5$00$;Ue]iMM<F

J#$%,)"7:RB5$'$!5*B,F
%,)"7:RB5$00'$Ue]iMMF




[")!:SSO")("SSM:7D8+*c:)$— 14 D...
00 внутри ):,C)+
):,C)+$%!:3BNKR8:,R*+B:7,*D+;$%1*!:"!:NK*1$<$00$EF

J#$%9"3$'$%!:3BNKR8:,;%d:#<$00$%1:B"C3,NK=%d:#?F



):,C)+$2=$%!:3BNKR...
!CA$5DJ:1*)$=
$$J#$;%!:3B<$'$2RF
$$):XC*):$q*3:SSgDJ:i*)F
$$):,C)+$q*3:SSgDJ:i*)NKJ#R5DJ:
$$$$00$7)D"d$@q*3:SSgDJ:i*)$!"#!...
!CA$7D+B*8RB*3:+"J:$=
$$J#$;%!:3B<$'$2RF
$$):,C)+$%!:3BNK=@7D+B*8RB*3:+"J:@?$00$1D$=
$$$$):XC*):$q*3:SSe(:7F
$$$$q*3:SSe(:...
):,C)+$
$$$*!D1",:R,DR)B7raa;%1",:$00$%!:3BNK=@+D6raa@?<F

):,C)+$hM^SS]*,3:SS,*,3:
$$$$;=$C)3$$'K$;%):!(NK):XC:!,NKC)*$00...
):,C)+$внутри 00
J#$%AR,*J:$'$%!:3BNK*,:JR,DR,*J:,;%AR*,:J<
$$$00$):,C)+$%"R*,:JF

J#$%"R,*J:$'$%!:3BNK*,:JR,DR,*J:,;%"R*,:J<$
$$$00$):,C)+...
):,C)+$;:3,R,DR:J"*3$;%*,:JNKB*)!,R75*31;@"C,5D)@<<
$$$$$$$$00$:3,R,DR:J"*3$;%*,:J$$$NKB*)!,R75*31;@17S7):",D)@<<
$$$$$$$$...
!CA$*,:JR,DR3"+8C"8:$=
$$J#$;%!:3BZ$%*,:J<$'$2RF
$$J#$%7D+,:+,F
$$J#$%):,$'$;:3,R,DR3"+8C"8:;%*,:J<
$$$$$$$$$$$$$00$:3,R,D...
Несколько$00
$$$J#$%7"(,C):!$$$$'$%")8$=7"(,C):!?$$$$$$$00$npF
$$$J#$%7DJJ:+,$$$$$'$:!7"(:$%")8$=7DJJ:+,?$00$%+"J:$00$--F
$$$J#$%C(8)"1...
65:+ со скаляром
$$$$65*3:$;J#$;%d:#Z$%9"3C:<$'$:"75$4")8<$=
$$$$$$$$8*9:+$;%d:#<$=
$$$$$$$$$$$$65:+$;-,:!,!-<$=
$$$$$$$$$$$$$$$$%]:!,$NK$(...
$$$$BD):"75$;25"c")1!<$=
$$$$$$$$65:+$;%shO[he<$=
$$$$$$$$$$$$%!:3B$NK$3D!:F
$$$$$$$$$$$$(C!5$2J:!!"8:!$'K$-kD(!t$uCJ(:1$*...
65:+ для выбора варианта
8*9:+$;%d<$=
$$$$65:+$;@B*3:@<$$$$=$%D(,RB*3:$$$$$'$%9F$?
$$$$65:+$;@")89@<$$$$=$%D(,R")89$$$$$'$%9F$?
$$$$65:+$;@*+,:)@<$...
8*9:+$;%*+(R,#(<
$$$$65:+$;@B@<$>$>$>
$$$$65:+$;@"@<$>$>$>
$$$$65:+$;@*@<$>$>$>
$$$$1:B"C3,$=
$$$$$$$$1*:$-^+,:)+"3$:))D)S...
65:+
с булевым выражением
C+3:!!$;$@*,"+@$//$23*!,$<$=
$$$$8*9:+$;$3:+8,5$%("!!6D)1$<$=
$$$$$$$$65:+$;$Qx$<$=
$$$$$$$$$$$$W$Dd
$$$$$$$$?
$$$$$$$$65:...
C+3:!!$;$@*,"+@$//$23*!,$<$=
$$$$8*9:+$;$3:+8,5$%("!!6D)1$<$=
$$$$$$$$65:+$;$Qx$<$=
$$$$$$$$$$$$W$Dd
$$$$$$$$?
$$$$$$$$65:...
65:+
с регулярным выражением
!CA$)"+8:a3*!,$=
$ J#$%R$'$!5*B,F
$ 8*9:+$;%R<$=
$ $ 65:+$;0T;.1<.N;.1<%0D$<$$$=$):,C)+$-%Q>>%a-$?
$ $ 65:+$;0T.1.>.>.1%0D...
65:+ и ):B
$$$$8*9:+;):B$%B1:B<=
$$$$$$$$65:+;@oMMov@<=




["7d"8:SSq)DJi","$— 14 Jan 2008
generate a package with methods and varia...
65:+ и C+1:B
8*9:+$;%Q<$=
$$$$65:+$;C+1:B<$$=):,C)+?
$$$$65:+$;%3:B,<$$=$%1:(,5GGF$?
$$$$65:+$;%)*85,<$=$%1:(,5NNF$?
?




[")!:SSO")("...
8*9:+$;%"7,*D+<$=
$$$$65:+$;C+1:B<$=F?$$$$W$1D$+D,5*+8
$$$$$$$$$$$$$$$$$$$$$$$$W$M*85,$+D6$1D$+D,5*+8$
$$$$$$$$$$$$$$$$$$$...
Вложенные 8*9:+065:+
8*9:+;%+"J:<$=
$$$$65:+$;@!,):"JS!,):"J@<$>$>$>
$$$$65:+$;@75"33:+8:@<$>$>$>
$$$$65:+$;@B"*3C):@<$>$>$>
$$$$65:+$;@!,):"JS...
8*9:+;%+"J:<$=
$$$$65:+$;@!,):"JS!,):"J@<$>$>$>
$$$$65:+$;@75"33:+8:@<$>$>$>
$$$$65:+$;@B"*3C):@<$>$>$>
$$$$65:+$;@!,):"JS...
BD) и 65:+
BD)$;$7",75$<$=
$$65:+$;$%RNK*!";@f:,D(,SSbC7*1SS&7:(,*D+SSoMfl@<$<$=
$$$$!"#F
$$$$W$C!"8:$!,CBB
$$$$):,C)+$QF
$$?
$$1:B"C...
//
):,C)+$RB"*3;$%(d8Z$%!CA$<$*B$%R$//$EF



*B$;$%",,)$//$0T&(D),RHb:&*7"3%0*$<$=




&(D),SSb:&*7"3$— 09 Oct 2008
Lexically...
2:&(D),c$$$$'$8):($=$t$;$%R$//$2")8c$<$?$2RF



%1*!($//$2:&(D),c$
$$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F




&(D),:)SS[)D&#$— 2...
2:&(D),c$$$$'$8):($=$t$;$%R$//$2")8c$<$?$2RF



%1*!($//$2:&(D),c$
$$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F
                      ...
%1*!($//$2:&(D),c$
$$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F




(C!5$2:&(D),cZ$%1*!($C+3:!!$%1*!($//$2:&(D),c
BD);$2R$<
$$$$=
$$$$$$$$*+1:&$%RZ$@S@
$$$$$$$$D)$+:&,F

$$$$$$$$*B;$%R$//$2:&(D),c$<
$$$$$$$$=
$$$$$$$$$$$$J#$%!DC)7:$$'$X...
BD);$2R$<
$$$$=
$$$$$$$$*+1:&$%RZ$@S@
$$$$$$$$D)$+:&,F                                 М. б. 65:+?
$$$$$$$$*B;$%R$//$2:&(D...
48 файлов, но только в одном
(Maplat::Helpers::CommandHelper)
 используется фича 5.10
O"(3",                              ...
48 файлов, но только в одном
 (Maplat::Helpers::CommandHelper)
  используется фича 5.10




*B;%3*+:NK=*1?$//$4"7,*9:<$


...
Именованные
сохраняющие скобки
$$$$$J#$%7DJ(*3:1R):8:&$'$X)=
$$$$$$$$$.f
$$$$$$$$$;HIJo)["R():B*&K%():B*&<
$$$$$$$$$;HIJo)["RJ",75K%):8:&<
$$$$$$$$$;HIJo...
Часть IV
Антипаттерны
C!:$P>EQEF
            C!:$B:",C):$@SP>QE@F




o((SS]:J(3",:e:)9:)
$$$%!5D6R3*+:$00'$Q$
$$$$$$$*B$%!,#3:$:X$@M:8:&(SSjDJJD+@F




  eJ"),O",75SSeC8")
  Regexp-CharClasses
C!:$e6*,75F
 !6*,75;%!,):"JNK7D1:7R,#(:<=
 $ $ $ 7"!:$-9*1:D-$=
 $ $ $ $ A3:!!$%!,):"JZ$@l*1:DSSqqJ(:8SSole,):"JSSl*1:D@F
...
J#$%():B*&$'$%!#JAD3R():B*&$00$%1:B"C3,R():B*&F
%():B*&$'$X)0%():B*&0&J!$*B$1:B*+:1$%():B*&F

J#$%!CBB*&$'$%!#JAD3R!CBB*&$...
%*![:)J"b*+d$'$
$$$;37;%8C*1NK",,;@*![:)J"b*+d@<$00$@,)C:@<$
$$$:X$@,)C:@<F




o((SSMeeab:"B+D1:$— 02 Feb 2010
post RSS f...
8*9:+$;$%(")"J!nEp$00$@@$<$=
$$$$65:+$;A3:!!:1$%R$yy$%RNK*!";@O",5SSu*8^+,@<<$=
$$$$$$$$%A*,$'$%73"!!NK!,)*+8aA*,;!5*B,;2(...
65*3:$;$J#$;$%D(,*D+Z$%9"3C:$<$'$:"75$4=%")8!?$<$=
$$$$$8*9:+$;%D(,*D+<$=
$$$$$$$$$65:+$;@)C3:!@<$=
$$$$$$$$$65:+$;@,:)J*+...
J#$%",,)c
$$$$$$$$$$$'$3D7"3$%XC:NK=$",,)*A$?
$$$$$$$$$$$'$%YDAa",,)c=$%YDAR*1$?
$$$$$$$$$$$00'$%XC:NKJ:)8:R",,)*A;$%YDAR*...
BD):"75$J#$%!5*(J:+,$;2=%):!(D+!:NK!5*(J:+,?<$=
$$$$!"#$->''''''''''''''''''''''''''''''''''''''''''>-F
$$$$!"#$-V$e5*(J:+...
C!:$P>EQEEEEF

            ()*+,$-.+-F
            ()*+,$-$75"(,:)!.+-F




iliSSM:"1$— 16 Nov 2008
libdvdread perl binding
1DR!DJ:,5*+8;<$00$):,C)+$mk]RqkhmiF
1DR!DJ:,5*+8;<$00$):,C)+$mk]RqkhmiF




*!R3:"(R#:");<$
$$$$H$;%+$'$`xx<$
$$$$S$;%+$'$`xP<
$$$$F
Часть V
Где применить
Часть V
Где применить
и как не наступить на грабли
Как включить
C!:$9P>QEF

C!:$OD1:)+SS[:)3F

C!:$7DJJD+SS!:+!:F
C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE@F
C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE@F

           5.10 читает полностью
C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE@F

           5.10 читает полностью



C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE...
C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE@F

           5.10 читает полностью



C!:$B:",C):$@SP>QE>Q@F
C!:$B:",C):$@SP>QE...
C!:$:9:)#65:):$X;B:",C):$@SP>QE@<F
C!:$O#OD1C3:F
O#OD1C3:NKJ#R!CA;%%<F
C!:$:9:)#65:):$X;B:",C):$@SP>QE@<F
C!:$O#OD1C3:F
O#OD1C3:NKJ#R!CA;%%<F



("7d"8:$O#OD1C3:F
!CA$J#R!CA$=
$$$$!"#$%RnQpF
?
...
K$(:)3$N$-!"#$%%F-
// для проверки
вхождения в список
*B$;%3"!,R+"J:$//$2",,:+1::!<$=>>>?
// для сравнения списков
J#$2"$'$;QZ$`Z$P<F
J#$2A$'$;QZ$`Z$P<F
!"#$2"$//$2AF$W$Q
J#$2"$'$;QZ$`Z$$$$$$P<F
J#$2A$'$;QZ$X)0.10Z$P<F
!"#$2"$//$2AF$W$Q




Осторожно, это не поэлементное сравнение
// для проверки аргументов
4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1
4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1


!"#$@i:AC8@$$*B$@NN1:AC8@$//$2oMflF
!"#$@i":JD+@$*B$@N1@$//$2oMflF
4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1


!"#$@i:AC8@$$*B$@NN1:AC8@$//$2oMflF
!"#$@i":JD+@$*B$@N1@$//$2oMflF


!"#$@g:3(@$
$$$$*B$0T...
Цепочка 00
J#$%*($'$
$$$$%ml=}Rg]][RqkMsoMiiRqkM?$00
$$$$%ml=g]][R}RMobR^[?$$$$$$$00
$$$$%ml=MOk]RoiiM?F
J#$%*($'$
$$$$%("8:NK(")"J;@):XC:!,R*(@<$00
$$$$%ml=}Rg]][RqkMsoMiiRqkM?$00
$$$$%ml=g]][R}RMobR^[?$$$$$$$00
$$$$%ml=MOk]Ro...
!,",: для счетчиков
!CA$7DC+,$=
$$$$!,",:$%7F
$$$$):,C)+$GG%7F
?


!"#$7DC+,;<F$W$Q
!"#$7DC+,;<F$W$a
!,",:$%7DC+,F
C+3:!!$;%7DC+,<$=
$$$$W$e{bN~•€•‚ƒ$!:3:7,$7DC+,;U<
?


J#$%DBB!:,$'$*+,$)"+1$%7DC+,F
W$e{bN~•€•‚ƒ$
W$!:3:7,$...
BD) и 65:+
C!:$9P>QEF
J#$2"))"#$'$;Q>>aE<F
J#$%7DC+,$'$EF
BD);2"))"#<$=
$$$$65:+;0nEa_xrp%0<$=
$$$$$$$$%7DC+,GGF
$$$$?
$$$$!"#F
?
!"#...
C!:$9P>QEF
J#$2"))"#$'$;Q>>aE<F
J#$%7DC+,$'$EF
BD);2"))"#<$=
$$$$65:+;0nEa_xrp%0<$=
$$$$$$$$%7DC+,GGF
$$$$?
$$$$!"#F
?
!"#...
C!:$9P>QEF
J#$2"))"#$'$;Q>>aE<F
J#$%7DC+,$'$EF
BD);2"))"#<$=
$$$$65:+;0nEa_xrp%0<$=
$$$$$$$$%7DC+,GGF
$$$$?
$$$$!"#F
?
!"#...
Q
C!:$9P>QEF
                         `
J#$2"))"#$'$;Q>>aE<F
J#$%7DC+,$'$EF           P
BD);2"))"#<$=            |
$$$$65:...
C!:$9P>QEF
J#$2"))"#$'$;Q>>aE<F
J#$%7DC+,$'$EF
BD);2"))"#<$=
$$$$65:+;0nEa_xrp%0<$=
$$$$$$$$%7DC+,GGF$7D+,*+C:F
$$$$?
$$$$...
K$(:)3P>QE$N$.
$$-!"#$BD)$Q>>`-



K$(:)3x$N:$.
$$-!"#$BD)$Q>>`-
K$(:)3P>QE$N$.    Q
$$-!"#$BD)$Q>>`-   a
                   `

K$(:)3x$N:$.       .+
$$-!"#$BD)$Q>>`-   .+
               ...
Кроме того

  Много интересных
 новых возможностей
регулярных выражений
Часть V.X
RRmiRR


Андрей Шитов
andy@shitov.ru   talks.shitov.ru
Perl 5.10 в 2010-м
Upcoming SlideShare
Loading in …5
×

Perl 5.10 в 2010-м

1,174 views
1,064 views

Published on

New features of Perl 5.10 as they appear in modern CPAN; where to use them and how to avoid difficulties.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,174
On SlideShare
0
From Embeds
0
Number of Embeds
341
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Perl 5.10 в 2010-м

  1. 1. Perl 5.10 в 2010-м
  2. 2. Часть I История и статистика
  3. 3. 5.10.0 18 декабря 2007
  4. 4. Сегодня 20 февраля 2010
  5. 5. Прошло 795 дней
  6. 6. За это время 5.10.1
  7. 7. За это время 5.11.0, 5.11.1, 5.11.2, 5.11.3, 5.11.4
  8. 8. Всего на CPAN ~80 000 модулей
  9. 9. Всего на CPAN ~20 000 дистрибутивов
  10. 10. Всего на CPAN ~8000 авторов
  11. 11. Как часто используют фичи Perl 5.10?
  12. 12. ?
  13. 13. ~ 200 модулей
  14. 14. ~ 100 авторов
  15. 15. Часть II Фичи Perl 5.10
  16. 16. !"# !"#$%& '' ()*+,$-%&.+-
  17. 17. // %"$//$0.10 %"$//$23*!, 23*!,$//$45"!5
  18. 18. !6*,75 8*9:+;%&<$= $$$$65:+;0"0<$=>>>? $$$$65:+;@A@<$=>>>? $$$$1:B"C3,$$$=>>>? ?
  19. 19. !,",: !CA$7DC+,:)$= $$$$!,",:$%7$'$EF $$$$):,C)+$GG%7F ?
  20. 20. ):8:&:! ;HI+"J:K< 4G .L 4N .M .8I+"J:K
  21. 21. 00 %7*,#$'$%")8$00$@OD!7D6@F %9"7"+7#=7*,#?$00'$@OD!7D6@F
  22. 22. Часть III Как пишут другие
  23. 23. Как включить
  24. 24. C!:$P>EQEEEEF C!:$P>EQEEQF C!:$P>EQEF C!:$P>EQEREEEF C!:$P>QE>EF C!:$9P>QE>EF C!:$9P>QEF C!:$B:",C):$@SP>QE@F
  25. 25. P>QE>E 9P>QE>E 9P>QE vector string version string сокращенно — v-string
  26. 26. !"# для отладки
  27. 27. 8*9:+$;%"7,*D+<$= $$$$65:+$;0T*+73C1:R7J1S0<$= $$$$$$$$J#$%7J1$'$%75*31NK7D+,:+,F $$$$$$$$%7J1$'/$0T*+73C1:R7J1S;.!U<0F $$$$$$$$J#$%6!$'$%Q$VV$@@F $$$$$$$$%7J1$'/$!0T*+73C1:R7J1S.!U00F $$$$$$$$W!"#;-7J1S%6!%7J1-<F $$$$$$$$%7J1$'$761;<$>$@0@$>$%7J1F $$$$$$$$2DC,(C,$'$X&;%7J1<F $$$$$$$$%75*31NK7D+,:+,;%6!$>$YD*+;%6!Z$2DC,(C,<<F $$$$? [D1SS3:J:+,"3SS])"+!BD)J:)SS^+73C1:$— 08 Jan 2010 include output via files and commands
  28. 28. 00 и 00' для значений по умолчанию
  29. 29. %(D),$00'$$P_`aF %5D!,$00'$@3D7"35D!,@F %7D3$$00'$@@F [8SSbD"1:) — 07 Jul 2008 Perl extension for loading Postgres tables
  30. 30. %",,)c=$J"&YDA$$?$00'$QF %9"3C:$00'$QF %",,)c=$%R$?$00'$EF %",,)c=$9:)AD!:$?$00'$@@F %",,)c=$1:AC8$$$?$00'$@@F %9"3$00'$QF %:&*,$00'$EF %!d*(cNK=$%YDAR*1$?$00'$@ed*($D+$e^fgh[@ [")"33:3SSi:(:+1 — 12 Aug 2009 Parallel-dependent dispatch of perl or shell code
  31. 31. !CA$*J(D),$$$= $$$$!5*B,F $$$$J#$4")8!$'$2RF $$$$W$6:$1D$+D,$7"):$"ADC,$"C,D9*9 $$$$%Tg=B*&:1,*J:?$'$%")8!=:(D75RDBB!:,?$00$ $$$$$$$$$$$$$$$$$$$$$jkMSS,*J:F ? B*&:1,*J: — 14 Aug 2008 lexical pragma to fix the epoch offset for time related functions
  32. 32. !"#$%"+!6:)$00$ $$$$-^$1D+@,$d+D6$:+DC85$,D$"+!6:)$#DC$#:,>-F g"*3D — 29 Jan 2010 A pluggable Markov engine analogous to MegaHAL
  33. 33. J#$%J")("R9:)!*D+$$'$ $$$$%[")!:SSO")("SSlMe^km$00$@C+1:B@F J#$%!DC)7:R9:)!*D+$'$ $$$$%[")!:SSO")("SSeDC)7:SSlMe^km$00$@C+1:B@F %D(,*D+!$00'$=?F [")!:SSO")(" — 14 Dec 2008 Generate Parsers from any BNF grammar
  34. 34. J#$%+C33*+8R!#JAD3$' $$%)5!R!#JAD3NKn[")!:SSO")("SS^+,:)+"3SSe#JAD3SSmhbbRob^oep$00$%)5!R!#JAD3F %"7,*D+$00'$%1:B"C3,R"7,*D+F !"#$=%,)"7:RB5? $$$$@[)DA3:J!$7DJ(*3*+8$"7,*D+$BD)$D)*8*+"3$)C3:S$@Z $$$$[")!:SSO")("SSA)*:BRD)*8*+"3R)C3:;%)C3:<F J#$%73D+:$'$%73D+:R")8$00$QF J#$%7C)):+,R(")!:R!:,$'$%(")!:R!:,R")8$00$%1:B"C3,R(")!:R!:,F %75D*7:$00'$EF %3*+:!$00'$nEpF %!DC)7:RD(,*D+!$00'$=?F [")!:SSO")("SS^+,:)+"3SS9"3C",D)$— 14 Dec 2008 Generate Parsers from any BNF grammar
  35. 35. J#$%,)"7:RB5$'$%")8R,)"7:RB5$00$;Ue]iMM<F J#$%,)"7:RB5$'$!5*B,F %,)"7:RB5$00'$Ue]iMMF [")!:SSO")("SSM:7D8+*c:)$— 14 Dec 2008 Generate Parsers from any BNF grammar
  36. 36. 00 внутри ):,C)+
  37. 37. ):,C)+$%!:3BNKR8:,R*+B:7,*D+;$%1*!:"!:NK*1$<$00$EF J#$%9"3$'$%!:3BNKR8:,;%d:#<$00$%1:B"C3,NK=%d:#?F ):,C)+$2=$%!:3BNKR(3"#:)!$00$np$?F f"J:!SS["+1:J*7SSj*,#Z$f"J:!SS["+1:J*7SSjD+B*8$— 07 Sep 2009 f"J:!SSM*!d$— 18 Oct 2008
  38. 38. !CA$5DJ:1*)$= $$J#$;%!:3B<$'$2RF $$):XC*):$q*3:SSgDJ:i*)F $$):,C)+$q*3:SSgDJ:i*)NKJ#R5DJ: $$$$00$7)D"d$@q*3:SSgDJ:i*)$!"#!$#DC$5"9:$+D$5DJ: $$$$$$$$$$$$$$1*):7,D)#@F ? o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  39. 39. !CA$7D+B*8RB*3:+"J:$= $$J#$;%!:3B<$'$2RF $$):,C)+$%!:3BNK=@7D+B*8RB*3:+"J:@?$00$1D$= $$$$):XC*):$q*3:SSe(:7F $$$$q*3:SSe(:7NK7",B*3:$ $$$$$$$$;%!:3BNK5DJ:1*)Z$@>)!!a3:"B+D1:>7D+B@<F $$?F ? o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  40. 40. ):,C)+$ $$$*!D1",:R,DR)B7raa;%1",:$00$%!:3BNK=@+D6raa@?<F ):,C)+$hM^SS]*,3:SS,*,3: $$$$;=$C)3$$'K$;%):!(NK):XC:!,NKC)*$00$@@<Z $$$$$$$1","$'K$%):!(NK1:7D1:1R7D+,:+,$ $$$$$$$;75")!:,$'K$@+D+:@<?<F o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  41. 41. ):,C)+$внутри 00
  42. 42. J#$%AR,*J:$'$%!:3BNK*,:JR,DR,*J:,;%AR*,:J< $$$00$):,C)+$%"R*,:JF J#$%"R,*J:$'$%!:3BNK*,:JR,DR,*J:,;%"R*,:J<$ $$$00$):,C)+$%AR*,:JFF J#$%!,)$'$%!:3BNK*,:JR,DR1",:;%*,:J<$ $$$00$):,C)+F o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  43. 43. ):,C)+$;:3,R,DR:J"*3$;%*,:JNKB*)!,R75*31;@"C,5D)@<< $$$$$$$$00$:3,R,DR:J"*3$;%*,:J$$$NKB*)!,R75*31;@17S7):",D)@<< $$$$$$$$00$:3,R,DR:J"*3$;%*,:J$$$NKB*)!,R75*31;@17S7D+,)*AC,D)@<< $$$$$$$$00$+D+R:J(,#$;%*,:JNKB*)!,R75*31R,:&,;@6*d*SC!:)+"J:@<< $$$$$$$$00$:3,R,DR:J"*3$;%75"++:3NKB*)!,R75*31;@17S7):",D)@<< $$$$$$$$00$:3,R,DR:J"*3$;%75"++:3NKB*)!,R75*31;@"C,5D)@<< $$$$$$$$00$:3,R,DR:J"*3$;%75"++:3NKB*)!,R75*31;@J"+"8*+81*,D)@<< $$$$$$$$00$:3,R,DR:J"*3$;%75"++:3NKB*)!,R75*31;@6:AO"!,:)@<< $$$$$$$$00$:3,R,DR:J"*3$;%*,:J$$$NKB*)!,R75*31;@17S(CA3*!5:)@<< $$$$$$$$00$:3,R,DR:J"*3$;%75"++:3NKB*)!,R75*31;@17S(CA3*!5:)@<< $$$$$$$$00$+D+R:J(,#$;%75"++:3NKB*)!,R75*31R,:&,;@,*,3:@<< $$$$$$$$W$Mqjraa $$$$$$$$00$@+DAD1#2@>%!:3BNKC)*R,DR5D!, $$$$$$$<F o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  44. 44. !CA$*,:JR,DR3"+8C"8:$= $$J#$;%!:3BZ$%*,:J<$'$2RF $$J#$%7D+,:+,F $$J#$%):,$'$;:3,R,DR3"+8C"8:;%*,:J< $$$$$$$$$$$$$00$:3,R,DR3"+8C"8:;%*,:JNKB*)!,R75*31;@7D+,:+,@<<<F $$BD)$;FF<$= $$$$%*,:J$'$%*,:JNK("):+,$00$3"!,F $$$$%):,$00'$:3,R,DR3"+8C"8:;%*,:J<F $$? $$%):,$00'$%!:3BNK=@):!(@?NK7D+,:+,R3"+8C"8:F $$):,C)+$%):,F ? o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  45. 45. Несколько$00
  46. 46. $$$J#$%7"(,C):!$$$$'$%")8$=7"(,C):!?$$$$$$$00$npF $$$J#$%7DJJ:+,$$$$$'$:!7"(:$%")8$=7DJJ:+,?$00$%+"J:$00$--F $$$J#$%C(8)"1:$$$$$'$%")8$=C,BrRC(8)"1:?$$$00$QF $$$J#$%1D6+8)"1:$$$'$%")8$=C,BrR1D6+8)"1:?$00$QF $$$J#$%J",75$$$$$$$'$%")8$=J",75?$$$$$$$$$$00$QF f"J:!SSsCJ(C!$— 24 Nov 2009 Play Hunt the Wumpus
  47. 47. 65:+ со скаляром
  48. 48. $$$$65*3:$;J#$;%d:#Z$%9"3C:<$'$:"75$4")8<$= $$$$$$$$8*9:+$;%d:#<$= $$$$$$$$$$$$65:+$;-,:!,!-<$= $$$$$$$$$$$$$$$$%]:!,$NK$(3"+$;%9"3C:<F $$$$$$$$$$$$? $$$$$$$$$$$$65:+$;-*J(D),-<$= $$$$$$$$$$$$$$$$%!:3B$NK$:&(D),R,DR3:9:3$;QZ$%!:3BZ$%R<$BD)$2=%9"3C:$VV$np?F $$$$$$$$$$$$? $$$$$$$$$$$$1:B"C3,$= $$$$$$$$$$$$$$$$1*:$-h+d+D6+$D(,*D+$@%d:#@.+-F $$$$$$$$$$$$? $$$$$$$$? $$$$? ]:!,SSM:8:&($— 09 Dec 2009 Test your regular expressions
  49. 49. $$$$BD):"75$;25"c")1!<$= $$$$$$$$65:+$;%shO[he<$= $$$$$$$$$$$$%!:3B$NK$3D!:F $$$$$$$$$$$$(C!5$2J:!!"8:!$'K$-kD(!t$uCJ(:1$*+,D$"$sCJ(C!t-F $$$$$$$$? $$$$$$$$65:+$;%[^]<$= $$$$$$$$$$$$%!:3B$NK$3D!:F $$$$$$$$$$$$(C!5$2J:!!"8:!$'K$-vvv^^^^t$q:33$*+$"$(*,t-F $$$$$$$$? $$$$$$$$65:+$;%uo]<$= $$$$$$$$$$$$(C!5$2J:!!"8:!$'K$ $$$$$$$$$$$$$$$$$$-wo[t$eC(:)$A",$!+",75t$3!:65:):9*33:$BD)$#DCt-F $$$$$$$$? $$$$? f"J:!SSsCJ(C!$— 24 Nov 2009 Play Hunt the Wumpus
  50. 50. 65:+ для выбора варианта
  51. 51. 8*9:+$;%d<$= $$$$65:+$;@B*3:@<$$$$=$%D(,RB*3:$$$$$'$%9F$? $$$$65:+$;@")89@<$$$$=$%D(,R")89$$$$$'$%9F$? $$$$65:+$;@*+,:)@<$$$=$%D(,R*+,:)"7,$'$%9F$? $$$$65:+$;@()DJ(,@<$$=$%D(,R()DJ(,$$$'$%9F$? $$$$65:+$;@XC*:,@<$$$=$%D(,RXC*:,$$$$'$%9F$? $$$$65:+$;@,,#R*+@<$$=$%,,#R*+$$$$$$$'$%9F$? $$$$65:+$;@,,#RDC,@<$=$%,,#RDC,$$$$$$'$%9F$? $$$$1:B"C3,$= $$$$$$$$1*:$-))D)S$*+$!CA)DC,*+:$!:,RD(,;<Z$BDC+1$*+9"3*1$d:#$=%d$'K$@%9@? $$$$$$$$$$$$$;+D,$@B*3:@Z$@")89@Z$@*+,:)@Z$@()DJ(,@Z$@XC*:,@Z $$$$$$$$$$$$$@,,#R*+@$D)$@,,#RDC,@<-F $$$$? ? ]:)JSSiu[)DJ(,$— 18 Dec 2009 Commandline prompt for a database application
  52. 52. 8*9:+$;%*+(R,#(< $$$$65:+$;@B@<$>$>$> $$$$65:+$;@"@<$>$>$> $$$$65:+$;@*@<$>$>$> $$$$1:B"C3,$= $$$$$$$$1*:$-^+,:)+"3$:))D)S$,#(:$'$@%*+(R,#(@$;+D,$@B@Z$@"@$D)$@*@<-F $$$$? ? ]:)JSSiu[)DJ(,$— 18 Dec 2009 Commandline prompt for a database application
  53. 53. 65:+ с булевым выражением
  54. 54. C+3:!!$;$@*,"+@$//$23*!,$<$= $$$$8*9:+$;$3:+8,5$%("!!6D)1$<$= $$$$$$$$65:+$;$Qx$<$= $$$$$$$$$$$$W$Dd $$$$$$$$? $$$$$$$$65:+$;$%R$I$_$<$= $$$$$$$$$$$$1*:;@MMkMS$["!!6D)1$*!$,DD$!5D),$;O*+$_$A#,:!$):XC*):1<@<F $$$$$$$$? $$$$$$$$65:+$;$%R$K$Qx$<$= $$$$$$$$$$$$1*:;@MMkMS$["!!6D)1$*!$,DD$3D+8$;O"&$Qx$A#,:!$"33D6:1<@<F $$$$$$$$? $$$$$$$$1:B"C3,$= $$$$$$$$$$$$65*3:$;Q<$= $$$$$$$$$$$$$$$$%("!!6D)1$>'$@E@F $$$$$$$$$$$$$$$$3"!,$ $$$$$$$$$$$$$$$$$$$$*B$3:+8,5$%("!!6D)1$''$QxF $$$$$$$$$$$$? $$$$$$$$? $$$$? o((SS*]"+SSh,*3!$— 26 Oct 2009 Secure management of iTans for online banking
  55. 55. C+3:!!$;$@*,"+@$//$23*!,$<$= $$$$8*9:+$;$3:+8,5$%("!!6D)1$<$= $$$$$$$$65:+$;$Qx$<$= $$$$$$$$$$$$W$Dd $$$$$$$$? $$$$$$$$65:+$;$%R$I$_$<$= $$$$$$$$$$$$1*:;@MMkMS$["!!6D)1$*!$,DD$!5D),$;O*+$_$A#,:!$):XC*):1<@<F $$$$$$$$? $$$$$$$$65:+$;$%R$K$Qx$<$= $$$$$$$$$$$$1*:;@MMkMS$["!!6D)1$*!$,DD$3D+8$;O"&$Qx$A#,:!$"33D6:1<@<F $$$$$$$$? $$$$$$$$1:B"C3,$= $$$$$$$$$$$$65*3:$;Q<$= $$$$$$$$$$$$$$$$%("!!6D)1$>'$@E@F $$$$$$$$$$$$$$$$3"!,$ $$$$$$$$$$$$$$$$$$$$*B$3:+8,5$%("!!6D)1$''$QxF $$$$$$$$$$$$? $$$$$$$$? $$$$? o((SS*]"+SSh,*3!$— 26 Oct 2009 Secure management of iTans for online banking
  56. 56. 65:+ с регулярным выражением
  57. 57. !CA$)"+8:a3*!,$= $ J#$%R$'$!5*B,F $ 8*9:+$;%R<$= $ $ 65:+$;0T;.1<.N;.1<%0D$<$$$=$):,C)+$-%Q>>%a-$? $ $ 65:+$;0T.1.>.>.1%0D$<$$$$$=$):,C)+$-%R-$? $ $ 65:+$;0T.1%0D$<$$$$$$$$$$$=$):,C)+$%R? $ $ 65:+$;0T;>UH<Z;>U<%0D$<$$$=$):,C)+$)"+8:a3*!,;%Q<>$@Z@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$>)"+8:a3*!,;%a<? $ $ 1:B"C3,$$$$$$$$$$$$$$$$$$$=$):,C)+$@@? $ ? ? j","3#!,SSi:9:3
  58. 58. 65:+ и ):B
  59. 59. $$$$8*9:+;):B$%B1:B<= $$$$$$$$65:+;@oMMov@<= ["7d"8:SSq)DJi","$— 14 Jan 2008 generate a package with methods and variables from a data structure
  60. 60. 65:+ и C+1:B
  61. 61. 8*9:+$;%Q<$= $$$$65:+$;C+1:B<$$=):,C)+? $$$$65:+$;%3:B,<$$=$%1:(,5GGF$? $$$$65:+$;%)*85,<$=$%1:(,5NNF$? ? [")!:SSO")("SSb:&
  62. 62. 8*9:+$;%"7,*D+<$= $$$$65:+$;C+1:B<$=F?$$$$W$1D$+D,5*+8 $$$$$$$$$$$$$$$$$$$$$$$$W$M*85,$+D6$1D$+D,5*+8$ $$$$$$$$$$$$$$$$$$$$$$$$W$AC,$B*+1$3:&RXRXCD,: $$$$65:+$;@3:&RXRXCD,:@<$= $$$$$$$$%3:&:)!n%*&p$' $$$$$$$$$$$$n$.y[")!:SSO")("SSb:&SS3:&RXRXCD,:Z $$$$$$$$$$$$$$$%():B*&Z$%!CBB*&$pF $$$$? [")!:SSO")("SSM:7D8+*c:)
  63. 63. Вложенные 8*9:+065:+
  64. 64. 8*9:+;%+"J:<$= $$$$65:+$;@!,):"JS!,):"J@<$>$>$> $$$$65:+$;@75"33:+8:@<$>$>$> $$$$65:+$;@B"*3C):@<$>$>$> $$$$65:+$;@!,):"JSB:",C):!@<$>$>$>$ $$$$$$$$8*9:+;J#$%73*!,$'$%+D1:NK8:,j5*31):+g"!5;<<$= $$$$$$$$$$$$65:+$;@!,"),,3!@<$>$>$> $$$$$$$$$$$$65:+;@J:75"+*!J!@<$>$>$> $$$$$$$$$$$$$$$$BD):"75;%73*!,NK=@J:75"+*!J!@?NK $$$$$$$$$$$$$$$$$$nEpNK8:,j5*31):+u#]"8m"J:;@U@<< $$$$$$$$$$$$$$$$$$$$65:+;%RNK,:&,jD+,:+,;<$:X$@i^fe]NOiP@$ $$$$$$$$$$$$$$$$$$$$$$D)$%RNK,:&,jD+,:+,;<$:X$@[bo^m@< $$$$$$$$$$$$65:+;@A*+1@<$>$>$> $$$$$$$$$$$$1:B"C3,$>$>$> $$$$65:+$;@()D7::1@<$>$>$> $$$$65:+$;@!C77:!!@<$>$>$> [kSSjDJ(D+:+,SSz"AA:)$— 22 Mar 2009 A POE Component for communicating over Jabber
  65. 65. 8*9:+;%+"J:<$= $$$$65:+$;@!,):"JS!,):"J@<$>$>$> $$$$65:+$;@75"33:+8:@<$>$>$> $$$$65:+$;@B"*3C):@<$>$>$> $$$$65:+$;@!,):"JSB:",C):!@<$>$>$> $$$$$$$$8*9:+;J#$%73*!,$'$%+D1:NK8:,j5*31):+g"!5;<<$= $$$$$$$$$$$$65:+$;@!,"),,3!@<$>$>$> $$$$$$$$$$$$65:+;@J:75"+*!J!@<$>$>$>$ $$$$$$$$$$$$$$$$BD):"75;%73*!,NK=@J:75"+*!J!@?NK $$$$$$$$$$$$$$$$$$nEpNK8:,j5*31):+u#]"8m"J:;@U@<< $$$$$$$$$$$$$$$$$$$$65:+;%RNK,:&,jD+,:+,;<$:X$@i^fe]NOiP@$ $$$$$$$$$$$$$$$$$$$$$$D)$%RNK,:&,jD+,:+,;<$:X$@[bo^m@< $$$$$$$$$$$$65:+;@A*+1@<$>$>$> $$$$$$$$$$$$1:B"C3,$>$>$> $$$$65:+$;@()D7::1@<$>$>$>$ $$$$65:+$;@!C77:!!@<$>$>$> [kSSjDJ(D+:+,SSz"AA:)$— 22 Mar 2009 A POE Component for communicating over Jabber
  66. 66. BD) и 65:+
  67. 67. BD)$;$7",75$<$= $$65:+$;$%RNK*!";@f:,D(,SSbC7*1SS&7:(,*D+SSoMfl@<$<$= $$$$!"#F $$$$W$C!"8:$!,CBB $$$$):,C)+$QF $$? $$1:B"C3,$=$1*:$%R$? ? o((SSj[omSSO*+*SSl*!*,$— 07 Nov 2008 explore each distribution in a minicpan repository
  68. 68. //
  69. 69. ):,C)+$RB"*3;$%(d8Z$%!CA$<$*B$%R$//$EF *B$;$%",,)$//$0T&(D),RHb:&*7"3%0*$<$= &(D),SSb:&*7"3$— 09 Oct 2008 Lexically scoped subroutine imports
  70. 70. 2:&(D),c$$$$'$8):($=$t$;$%R$//$2")8c$<$?$2RF %1*!($//$2:&(D),c$ $$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F &(D),:)SS[)D&#$— 29 Jan 2010 Simplified symbol export & proxy dispatch
  71. 71. 2:&(D),c$$$$'$8):($=$t$;$%R$//$2")8c$<$?$2RF %1*!($//$2:&(D),c$ $$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F Cool? &(D),:)SS[)D&#$— 29 Jan 2010 Simplified symbol export & proxy dispatch
  72. 72. %1*!($//$2:&(D),c$ $$$$$$$$D)$(C!5$2:&(D),cZ$%1*!(F (C!5$2:&(D),cZ$%1*!($C+3:!!$%1*!($//$2:&(D),c
  73. 73. BD);$2R$< $$$$= $$$$$$$$*+1:&$%RZ$@S@ $$$$$$$$D)$+:&,F $$$$$$$$*B;$%R$//$2:&(D),c$< $$$$$$$$= $$$$$$$$$$$$J#$%!DC)7:$$'$XC"3*B#R,DR):B$%RZ$%!DC)7:F $$$$$$$$$$$$J#$%*+!,"33$'$XC"3*B#R,DR):B$%RZ$%7"33:)F $$$$$$$$$$$$U%*+!,"33$$$'$U%!DC)7:F $$$$$$$$? $$$$$$$$:3!: $$$$$$$$= $$$$$$$$$$$$1*:$-uD8C!$%!DC)7:S$@%R@$+D,$:&(D),:1-F $$$$$$$$? $$$$? &(D),:)SS[)D&#$— 29 Jan 2010 Simplified symbol export & proxy dispatch
  74. 74. BD);$2R$< $$$$= $$$$$$$$*+1:&$%RZ$@S@ $$$$$$$$D)$+:&,F М. б. 65:+? $$$$$$$$*B;$%R$//$2:&(D),c$< $$$$$$$$= $$$$$$$$$$$$J#$%!DC)7:$$'$XC"3*B#R,DR):B$%RZ$%!DC)7:F $$$$$$$$$$$$J#$%*+!,"33$'$XC"3*B#R,DR):B$%RZ$%7"33:)F $$$$$$$$$$$$U%*+!,"33$$$'$U%!DC)7:F $$$$$$$$? $$$$$$$$:3!: $$$$$$$$= $$$$$$$$$$$$1*:$-uD8C!$%!DC)7:S$@%R@$+D,$:&(D),:1-F $$$$$$$$? $$$$? &(D),:)SS[)D&#$— 29 Jan 2010 Simplified symbol export & proxy dispatch
  75. 75. 48 файлов, но только в одном (Maplat::Helpers::CommandHelper) используется фича 5.10 O"(3", O"(3",SSs:ASSbD8*+ O"(3",SSg:3(:)!SSuC*31mCJ O"(3",SSs:ASSbD8Dj"75: O"(3",SSg:3(:)!SSjelq*3,:) O"(3",SSs:ASSO:Jj"75: O"(3",SSg:3(:)!SSj"75:SSO:J7"75:1 O"(3",SSs:ASSO:Jj"75:e*J O"(3",SSg:3(:)!SSj"75:SSO:J7"75:1SSf:,[")!:) O"(3",SSs:ASS[",5M:1*):7,*D+ O"(3",SSg:3(:)!SSjDJJ"+1g:3(:) O"(3",SSs:ASS[D!,8):!iu O"(3",SSg:3(:)!SSiue:)*"3*c: O"(3",SSs:ASSe:+1O"*3 O"(3",SSg:3(:)!SSi",:e,)*+8! O"(3",SSs:ASSe:!!*D+e:,,*+8! O"(3",SSg:3(:)!SSbD8D O"(3",SSs:ASSe,"+1")1q*:31! O"(3",SSg:3(:)!SSO"*3bD88:) O"(3",SSs:ASSe,",*7j"75: O"(3",SSg:3(:)!SSO"!7D, O"(3",SSs:ASSe,",C! O"(3",SSg:3(:)!SS["11*+8 O"(3",SSs:ASS]:J(3",:j"75: O"(3",SSg:3(:)!SSe,)*+8! O"(3",SSs:ASSh!:)e:,,*+8! O"(3",SSg:3(:)!SS]:&,bD88:) O"(3",SSs:ASSl")*"A3:!oiO O"(3",SSs:A O"(3",SSsD)d:) O"(3",SSs:ASSu"!:OD1C3: O"(3",SSsD)d:)SSo1J*+jDJJ"+1! O"(3",SSs:ASSu)D6!:)sD)d")DC+1! O"(3",SSsD)d:)SSu"!:OD1C3: O"(3",SSs:ASSjDJJ"+1{C:C: O"(3",SSsD)d:)SSjDJJ"+1! O"(3",SSs:ASSi:AC83D8 O"(3",SSsD)d:)SSi*)j3:"+:) O"(3",SSs:ASSi*)j3:"+:) O"(3",SSsD)d:)SSO:Jj"75: O"(3",SSs:ASSiD7!e:")75 O"(3",SSsD)d:)SSk)"73:iu O"(3",SSs:ASSiD7!e():"1e5::, O"(3",SSsD)d:)SS[D!,8):!iu O"(3",SSs:ASSiD7!sD)1[)D7:!!D) O"(3",SSsD)d:)SSM:(D),*+8 O"(3",SSs:ASS))D)! O"(3",SSsD)d:)SSe:+1O"*3 O"(3",$— 20 Jan 2010 The MAPLAT Web Framework This Module is actually a stub (don't use it)
  76. 76. 48 файлов, но только в одном (Maplat::Helpers::CommandHelper) используется фича 5.10 *B;%3*+:NK=*1?$//$4"7,*9:<$ O"(3",$— 20 Jan 2010 The MAPLAT Web Framework This Module is actually a stub (don't use it)
  77. 77. Именованные сохраняющие скобки
  78. 78. $$$$$J#$%7DJ(*3:1R):8:&$'$X)= $$$$$$$$$.f $$$$$$$$$;HIJo)["R():B*&K%():B*&< $$$$$$$$$;HIJo)["RJ",75K%):8:&< $$$$$$$$$;HIJo)["R!CBB*&K%!CBB*&< $$$$$?&J!F [")!:SSO")("SSM:7D8+*c:)
  79. 79. Часть IV Антипаттерны
  80. 80. C!:$P>EQEF C!:$B:",C):$@SP>QE@F o((SS]:J(3",:e:)9:)
  81. 81. $$$%!5D6R3*+:$00'$Q$ $$$$$$$*B$%!,#3:$:X$@M:8:&(SSjDJJD+@F eJ"),O",75SSeC8") Regexp-CharClasses
  82. 82. C!:$e6*,75F !6*,75;%!,):"JNK7D1:7R,#(:<= $ $ $ 7"!:$-9*1:D-$= $ $ $ $ A3:!!$%!,):"JZ$@l*1:DSSqqJ(:8SSole,):"JSSl*1:D@F $ $ $ $ (C!5$2!,):"J!Z$%!,):"JF $ $ $ ? $ $ $ 7"!:$-"C1*D-$= $ $ $ $ A3:!!$%!,):"JZ$@l*1:DSSqqJ(:8SSole,):"JSSoC1*D@F $ $ $ $ (C!5$2!,):"J!Z$%!,):"JF $ $ $ ? $ $ $ 7"!:$-!CA,*,3:-$= $ $ $ $ A3:!!$%!,):"JZ$@l*1:DSSqqJ(:8SSole,):"JSSeCA,*,3:@F $ $ $ $ (C!5$2!,):"J!Z$%!,):"JF $ $ $ ? $ $ $ :3!:$= $ $ $ $ (C!5$2!,):"J!Z$%!,):"JF $ $ $ ? $ $ ? C!:$*B$%p$K'$P>EQQZ$@1:():7",:@F l*1:DSSqqJ(:8SSolqD)J",
  83. 83. J#$%():B*&$'$%!#JAD3R():B*&$00$%1:B"C3,R():B*&F %():B*&$'$X)0%():B*&0&J!$*B$1:B*+:1$%():B*&F J#$%!CBB*&$'$%!#JAD3R!CBB*&$00$%1:B"C3,R!CBB*&F %!CBB*&$'$X)0%!CBB*&0&J!$*B$1:B*+:1$%!CBB*&F [")!:SSO")("SSM:7D8+*c:)
  84. 84. %*![:)J"b*+d$'$ $$$;37;%8C*1NK",,;@*![:)J"b*+d@<$00$@,)C:@<$ $$$:X$@,)C:@<F o((SSMeeab:"B+D1:$— 02 Feb 2010 post RSS feeds to newsgroups
  85. 85. 8*9:+$;$%(")"J!nEp$00$@@$<$= $$$$65:+$;A3:!!:1$%R$yy$%RNK*!";@O",5SSu*8^+,@<<$= $$$$$$$$%A*,$'$%73"!!NK!,)*+8aA*,;!5*B,;2(")"J!<NK"!RA*+;<<F $$$$? $$$$65:+$;J0T.1G%0<$= $$$$$$$$%A*,$'$%73"!!NK*+,aA*,;!5*B,;2(")"J!<<F $$$$? $$$$65:+$;J0TEnAupnEQpG%0<$= $$$$$$$$%A*,$'$%73"!!NK!,)*+8aA*,;!5*B,;2(")"J!<<F $$$$? $$$$65:+$;J0Tn%wMk%kmpG%0<$= $$$$$$$$%A*,$'$%73"!!NKA*,aA*,;!5*B,;2(")"J!<<F $$$$? u*,J"!dSSi","$— 03 Oct 2008 Handle unlimited length bitmasks in an easy and flexible way
  86. 86. 65*3:$;$J#$;$%D(,*D+Z$%9"3C:$<$'$:"75$4=%")8!?$<$= $$$$$8*9:+$;%D(,*D+<$= $$$$$$$$$65:+$;@)C3:!@<$= $$$$$$$$$65:+$;@,:)J*+"3!@<$= $$$$$$$$$65:+$;@,)"7:R():1:B*+:1!@<$= $$$$$$$$$65:+$;@!,"),@<$= $$$$$$$$$65:+$;@,)"7:R*,:)",*D+!@<$= $$$$$$$$$65:+$;@"7"1:J*7@<$= $$$$$$$$$65:+$;@,)"7:R()*D)*,*:!@<$= $$$$$$$$$65:+$;@1:B"C3,R+C33R9"3C:@<$= $$$$$$$$$65:+$;@,)"7:R7DJ(3:,*D+!@<$= $$$$$$$$$65:+$;@1:B"C3,R"7,*D+@<$= $$$$$$$$$65:+$;@3D7",*D+R7"33A"7d@<$= $$$$$$$$$65:+$;@1:B"C3,R3:&R():B*&@<$= $$$$$$$$$65:+$;@D("XC:@<$= $$$$$$$$$65:+$;@1:B"C3,R3:&R!CBB*&@<$= $$$$$$$$$65:+$;@7#73:R"7,*D+@<$= $$$$$$$$$65:+$;@"JA*8CDC!R3:&@<$= $$$$$$$$$65:+$;@7#73:R1:(,5@<$= $$$$$$$$$65:+$;@!,)*(@<$= $$$$$$$$$65:+$;@6")+*+8!@<$= $$$$$$$$$65:+$;@,)"7:RB*3:R5"+13:@<$= $$$$$$$$$65:+$;@7D1:R3*+:!@<$= $$$$$$$$$65:+$;@,)"7:R"7,*D+!@<$= $$$$$$$$$65:+$;@"33D6R)"6R!DC)7:@<$= $$$$$$$$$65:+$;@,)"7:R3:&@<$= $$$$$$$$$65:+$;@J"&R(")!:!@<$= $$$$$$$$$65:+$;@,)"7:R3:&R,)*:!@<$= $$$$$$$$$65:+$;@9:)!*D+@<$= $$$$$$$$$65:+$;@,)"7:R3:&RJ",75:!@<$= $$$$$$$$$65:+$;@!:J"+,*7!@<$= $$$$$$$$$65:+$;@,)"7:R9"3C:!@<$= $$$$$$$$$65:+$;@3:&R():"JA3:@<$= $$$$$$$$$65:+$;@,)"7:R)C3:!@<$= $$$$$$$$$65:+$;@():"JA3:@<$= $$$$$$$$$65:+$;@,)"7:R!,)*+8!@<$= $$$$$$$$$1:B"C3,$= [")!:SSO")("SS^+,:)+"3
  87. 87. J#$%",,)c $$$$$$$$$$$'$3D7"3$%XC:NK=$",,)*A$? $$$$$$$$$$$'$%YDAa",,)c=$%YDAR*1$? $$$$$$$$$$$00'$%XC:NKJ:)8:R",,)*A;$%YDAR*1$< $$$$$$$$$$$F [")"33:3SSi:(:+1$— 12 Aug 2009 Parallel-dependent dispatch of perl or shell code
  88. 88. BD):"75$J#$%!5*(J:+,$;2=%):!(D+!:NK!5*(J:+,?<$= $$$$!"#$->''''''''''''''''''''''''''''''''''''''''''>-F $$$$!"#$-V$e5*(J:+,$%7DC+,$$$$$$$$$$$$$$$$$$$$$$$$$$V-F $$$$!"#$%!5*(J:+,NK!:)*"3*c:NK1)"6F $$$$!"#$--F $$$$*B$;%!:3BNK9:)AD!:<$= $$$$$$$$!"#$%!5*(J:+,NK&J3NK,De,)*+8;Q<F $$$$? $$$$%7DC+,$GGF ? [")"33:3SSi:(:+1$— 12 Aug 2009 Parallel-dependent dispatch of perl or shell code
  89. 89. C!:$P>EQEEEEF ()*+,$-.+-F ()*+,$-$75"(,:)!.+-F iliSSM:"1$— 16 Nov 2008 libdvdread perl binding
  90. 90. 1DR!DJ:,5*+8;<$00$):,C)+$mk]RqkhmiF
  91. 91. 1DR!DJ:,5*+8;<$00$):,C)+$mk]RqkhmiF *!R3:"(R#:");<$ $$$$H$;%+$'$`xx<$ $$$$S$;%+$'$`xP< $$$$F
  92. 92. Часть V Где применить
  93. 93. Часть V Где применить и как не наступить на грабли
  94. 94. Как включить
  95. 95. C!:$9P>QEF C!:$OD1:)+SS[:)3F C!:$7DJJD+SS!:+!:F
  96. 96. C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F
  97. 97. C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F 5.10 читает полностью
  98. 98. C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F 5.10 читает полностью C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F 5.10.1 — только первые две части
  99. 99. C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F 5.10 читает полностью C!:$B:",C):$@SP>QE>Q@F C!:$B:",C):$@SP>QE@F 5.10.1 — только первые две части C!:$B:",C):$@SP>QE>|@F
  100. 100. C!:$:9:)#65:):$X;B:",C):$@SP>QE@<F C!:$O#OD1C3:F O#OD1C3:NKJ#R!CA;%%<F
  101. 101. C!:$:9:)#65:):$X;B:",C):$@SP>QE@<F C!:$O#OD1C3:F O#OD1C3:NKJ#R!CA;%%<F ("7d"8:$O#OD1C3:F !CA$J#R!CA$= $$$$!"#$%RnQpF ? QF
  102. 102. K$(:)3$N$-!"#$%%F-
  103. 103. // для проверки вхождения в список
  104. 104. *B$;%3"!,R+"J:$//$2",,:+1::!<$=>>>?
  105. 105. // для сравнения списков
  106. 106. J#$2"$'$;QZ$`Z$P<F J#$2A$'$;QZ$`Z$P<F !"#$2"$//$2AF$W$Q
  107. 107. J#$2"$'$;QZ$`Z$$$$$$P<F J#$2A$'$;QZ$X)0.10Z$P<F !"#$2"$//$2AF$W$Q Осторожно, это не поэлементное сравнение
  108. 108. // для проверки аргументов
  109. 109. 4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1
  110. 110. 4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1 !"#$@i:AC8@$$*B$@NN1:AC8@$//$2oMflF !"#$@i":JD+@$*B$@N1@$//$2oMflF
  111. 111. 4$>0!DJ:R()D8)"JJ:$NN1:AC8$N1 !"#$@i:AC8@$$*B$@NN1:AC8@$//$2oMflF !"#$@i":JD+@$*B$@N1@$//$2oMflF !"#$@g:3(@$ $$$$*B$0T;N5VNN5:3(<%0$//$2oMflF
  112. 112. Цепочка 00
  113. 113. J#$%*($'$ $$$$%ml=}Rg]][RqkMsoMiiRqkM?$00 $$$$%ml=g]][R}RMobR^[?$$$$$$$00 $$$$%ml=MOk]RoiiM?F
  114. 114. J#$%*($'$ $$$$%("8:NK(")"J;@):XC:!,R*(@<$00 $$$$%ml=}Rg]][RqkMsoMiiRqkM?$00 $$$$%ml=g]][R}RMobR^[?$$$$$$$00 $$$$%ml=MOk]RoiiM?F Легко обновлять
  115. 115. !,",: для счетчиков
  116. 116. !CA$7DC+,$= $$$$!,",:$%7F $$$$):,C)+$GG%7F ? !"#$7DC+,;<F$W$Q !"#$7DC+,;<F$W$a
  117. 117. !,",:$%7DC+,F C+3:!!$;%7DC+,<$= $$$$W$e{bN~•€•‚ƒ$!:3:7,$7DC+,;U< ? J#$%DBB!:,$'$*+,$)"+1$%7DC+,F W$e{bN~•€•‚ƒ$ W$!:3:7,$>>>$3*J*,$%DBB!:,Z$Q
  118. 118. BD) и 65:+
  119. 119. C!:$9P>QEF J#$2"))"#$'$;Q>>aE<F J#$%7DC+,$'$EF BD);2"))"#<$= $$$$65:+;0nEa_xrp%0<$= $$$$$$$$%7DC+,GGF $$$$? $$$$!"#F ? !"#$%7DC+,F
  120. 120. C!:$9P>QEF J#$2"))"#$'$;Q>>aE<F J#$%7DC+,$'$EF BD);2"))"#<$= $$$$65:+;0nEa_xrp%0<$= $$$$$$$$%7DC+,GGF $$$$? $$$$!"#F ? !"#$%7DC+,F$$W$QE
  121. 121. C!:$9P>QEF J#$2"))"#$'$;Q>>aE<F J#$%7DC+,$'$EF BD);2"))"#<$= $$$$65:+;0nEa_xrp%0<$= $$$$$$$$%7DC+,GGF $$$$? $$$$!"#F ? !"#$%7DC+,F$$W$QE
  122. 122. Q C!:$9P>QEF ` J#$2"))"#$'$;Q>>aE<F J#$%7DC+,$'$EF P BD);2"))"#<$= | $$$$65:+;0nEa_xrp%0<$= „ $$$$$$$$%7DC+,GGF QQ $$$$? Q` $$$$!"#F QP ? Q| !"#$%7DC+,F$$W$QE Q„
  123. 123. C!:$9P>QEF J#$2"))"#$'$;Q>>aE<F J#$%7DC+,$'$EF BD);2"))"#<$= $$$$65:+;0nEa_xrp%0<$= $$$$$$$$%7DC+,GGF$7D+,*+C:F $$$$? $$$$!"#F ? !"#$%7DC+,F$$W$QE
  124. 124. K$(:)3P>QE$N$. $$-!"#$BD)$Q>>`- K$(:)3x$N:$. $$-!"#$BD)$Q>>`-
  125. 125. K$(:)3P>QE$N$. Q $$-!"#$BD)$Q>>`- a ` K$(:)3x$N:$. .+ $$-!"#$BD)$Q>>`- .+ .+
  126. 126. Кроме того Много интересных новых возможностей регулярных выражений
  127. 127. Часть V.X RRmiRR Андрей Шитов andy@shitov.ru talks.shitov.ru

×