0
III FSLDC Modern::Perl Tiago Peczenyj @pac_man http://pacman.blog.br http://rio.pm.org
Perl Moderno
Modern::Perl
Modern Perl?
Modern Science?
Modern Love?
Modern Art?
Art of Perl
Art of Art
Perl of Perl
Perl of Perl (...parece uma apresentação do Larry Wall)
PERL
$==$'; $;||$.| $|;$_ ='*$ (  ^@(%_+&~~;# ~~/.~~ ;_);;.);;#)  ;~~~~;_,.~~,.* +,./|~ ~;_);@-,  .;.); ~  ~,./@@-__);@-);~~,.*...
P ratical E xtraction and R eport L anguage
Perl foi criado por Larry Wall, inspirado em Shell Script, AWK, SED e C (e uma pitada de linguística)
Larry também criou a primeira versão do PATCH e do leitor de  news  RN
Perl 1.0 foi lançado na usenet alt.comp.sources em 18/12/1987
Exemplos
# fibbonacci - iterativo sub  factorial {   my $n =  shift ;   my $result = 1;   for my $i (1..$n)   {   $result *= $i;   ...
# fibbonacci - recursivo sub  factorial {   my $n =  shift ;   ($n == 0)? 1 : $n* factorial ($n-1); }
# fibbonacci - funcional use List::Util qw(reduce); sub  factorial {   my $n =  shift ;   reduce  { $a * $b } 1, 1 .. $n }
http://rosettacode.org/
Linguagem e Cultura  estão intimamente ligados
Ab Ovo Usque Ad Mala
From the Beginning to End
Linguagem Depende da Cultura
E a Cultura Perl é....
COLABORAÇÃO
TIMTOWTDI
TIMTOWTDI There is More Than One Way To Do It
CPAN
Comprehensive Perl Archive Network (Perl's Killer Feature)
www.cpan.org
95.676 módulos 8.998 autores 259 mirrors
“ Nós não nos importamos com a qualidade, Não nos importamos com o propósito, Apenas queremos hospedar os seus módulos"
Desafio: como trazer inovação e, ao mesmo tempo, ser estável?
Versão Perl Data 1 1987-Dec-18 2 1988-Jun-05 3 1989-Oct-18 4 1991-Mar-21 5 1994-Oct-17
Linguagem Criação Versão Atual PHP 1994 5.3.6 Ruby 1995 1.9.2 Python 1991 3.2 Java 1995 1.6.0_25 JavaScript 1995 1.8.5 C# ...
Algumas linguagens modernas surgiram, evoluiram e se consolidaram  durante  do período de vida da versão mais recente de P...
Perl 5 é o dialeto atual
Perl 6 ainda está em desenvolvimento ( mas é muito, muito legal )
Então que Diabos é Perl Moderno?
Que versão de Perl vc utiliza?
http://perldoc.perl.org/
Perl 5.8.9 (que muita gente deve usar ainda...) É de  2008-Dec-14
Em 2007-Dec-18 é lançado Perl 5.10.0
Big Changes!
<ul>The  feature  pragma </ul>
<ul>use feature “:5.10”; use feature qw( … ); </ul>
Antes eu tinha que fazer assim <ul>#!/usr/bin/perl use strict; use warnings; print “hello worldn”; # argh... não posso esq...
Agora podemos escrever <ul>#!/usr/bin/perl use strict; use warnings; use feature 'say'; say “hello world”; </ul>
Modern::Perl <ul><li>#!/usr/bin/perl
use Modern::Perl;
# precisa instalar via CPAN...
say “hello world”; </li></ul>
Modern::Perl <ul><li>Operador //
Given/ When
State variables
Smart Matching ~~
Regular Expression (?<name>...)
Pragma mro for Method Resolution Order  </li><ul><li>DFS Depth First Search
C3 (like Dylan language) </li></ul></ul>
Implicit Strictures in Perl 5.12 <ul>use 5.12.0; significa: use strict; use feature ':5.12'; </ul>
Versão atual: 5.14 ! 5.10 ja está depreciada
Suporte a Unicode 6
Suporte a IPv6
Array and hash container functions accept references!
Traditional Syntax Terse Syntax push @$arrayref, @stuff push $arrayref, @stuff pop @$arrayref  pop $arrayref shift @$array...
Package Block Syntax <ul>Package Foo::Bar 1.2 { # code } </ul>
Filehandle method calls load  IO::File on demand <ul>open my $fh, &quot;>&quot;, $file; # loads IO::File and succeeds $fh-...
Modulos Core (alguns...) <ul><li>Carp
Data::Dumper
Encode
English
File::Temp
Findbin
Getopt::Long
Scalar::Util </li></ul><ul><li>List::Util
Hash::Util
Memoize
Module::Pluggable
Test::Simple
Test::More
Tie::File
Time::HiRes </li></ul>
autodie <ul>Antes: open(my $fh,&quot;<&quot;,$filename)  <ul>or die &quot;ops...&quot;; </ul></ul>
autodie <ul>bIlujDI' yIchegh()Qo'; yIHegh()! It is better to die() than to return() in failure. -- Klingon programming pro...
autodie <ul>use autodie qw(open close);  # open/close succeed or die open(my $fh, &quot;<&quot;, $filename);  # No need to...
CPAN!
Antes o tratamento de erros era assim <ul>eval { <ul>...algum codigo que pode lançar um erro... </ul>}; if($@){ # cuidado!...
Try::Tiny <ul>use Try::Tiny; try { <ul>algum codigo que pode lançar um erro </ul>} catch {  <ul>warn &quot;opa... ocorreu ...
Moose
Perl 5 é Orientado a Objetos!
package Point; sub new {  # construtor! my $klass =  shift ; my $self = { x => 0, y => 0}; bless  $self, $klass; } # crian...
Moose is a postmodern object system for Perl 5
package Point; use Moose;  has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); sub clear { my $s...
package Point3D; use Moose; extends 'Point'; has 'z' => (is => 'rw', isa => 'Int'); after 'clear' => sub { my $self = shif...
Roles
package Breakable; use Moose::Role; has 'is_broken' => (  is  => 'rw',  isa => 'Bool' ); sub break { shift->is_broken(1); }
package Car; use Moose; with 'Breakable'; ...
Outros Modulos <ul><li>DateTime
Smart::Comments
IO::All
Perl::Tidy
Perl::Critic
Email::Simple
Upcoming SlideShare
Loading in...5
×

Perl Moderno

4,532

Published on

Apresentação sobre Perl Moderno no III FSLDC

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
4,532
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Perl Moderno"

  1. 1. III FSLDC Modern::Perl Tiago Peczenyj @pac_man http://pacman.blog.br http://rio.pm.org
  2. 2. Perl Moderno
  3. 3. Modern::Perl
  4. 4. Modern Perl?
  5. 5. Modern Science?
  6. 6. Modern Love?
  7. 7. Modern Art?
  8. 8. Art of Perl
  9. 9. Art of Art
  10. 10. Perl of Perl
  11. 11. Perl of Perl (...parece uma apresentação do Larry Wall)
  12. 12. PERL
  13. 13. $==$'; $;||$.| $|;$_ ='*$ ( ^@(%_+&~~;# ~~/.~~ ;_);;.);;#) ;~~~~;_,.~~,.* +,./|~ ~;_);@-, .;.); ~ ~,./@@-__);@-);~~,.*+,. /|);;;~~@-~~~~;;(),. ;.,./@,./@,.;_~~@-););,. ;_);~~,./@,.;;;./@,./ |~~~~;#-(@-__@-__&$#%^';$__ ='`'&'&';$___=&quot;````&quot; |&quot;$[`$[&quot;|'`%&quot;,';$~=(&quot;$___$__-$[``$__&quot;| &quot;$___&quot;| (&quot;$___$__-$[.%&quot;)).(&quot;'`&quot;|&quot;'$[&quot;|&quot;'#&quot;). '/.*?&([^&]*)&.*/$'.++$=.(&quot;/``&quot;|&quot;/$[`&quot;|&quot;/#'&quot;).(&quot;;`/[``$__]//`;&quot; |&quot;;$[/[$[`$__]//`;&quot;|&quot;;#/[$.$__]//'&quot;).'@:=(&quot;@-&quot;,&quot;/.&quot;, &quot;~~&quot;,&quot;;#&quot;,&quot;;;&quot;,&quot;;.&quot;,&quot;,.&quot;,&quot;);&quot;,&quot;()&quot;,&quot;*+&quot;,&quot;__&quot;,&quot;-(&quot;,&quot;/@&quot;,&quot;.%&quot;,&quot;/|&quot;, &quot;;_&quot;);@:{@:}=$%..$#:;'.('`'|&quot;$[&quot;|'#').&quot;/(..)(..)/&quot;.(&quot;```&quot;|&quot;``$[&quot;| '#(&quot;').'(($:{$'.$=.'}<<'.(++$=+$=).')|($:{$'.$=.'}))/'.(&quot;```;&quot;| &quot;``$[;&quot;|&quot;%'#;&quot;).(&quot;````'$__&quot;|&quot;%$[``&quot;|&quot;%&!,&quot;).${$[};`$~$__>&$=`;$_= '*$(^@(%_+&@-__~~;#~~@-;.;;,.(),./.,./|,.-();;#~~@-);;;,.;_~~@-,./., ./@,./@~~@-);;;,.(),.;.~~@-,.,.,.;_,./@,.-();;#~~@-,.;_,./|~~@-,. ,.);););@-@-__~~;#~~@-,.,.,.;_);~~~~@-);;;,.(),.*+);;# ~~@-, ./|,.*+,.,.);;;);*+~~@-,.*+,.;;,.;.,./.~~@-,.,.,.;_) ;~~~ ~@-,.;;,.;.,./@,./.);*+,.;.,.;;@-__~~;#~~@-,.;;,.* +);; #);@-,./@,./.);*+~~@-~~.%~~.%~~@-;;__,. /.);;#@- [email_address] __ ~~;;);/@;#.%;#/.;#-(@-__~~;;;.;_ ;#.%~~~~ ;;() ,.;.,./@,. /@,.;_~~@- ););,.;_ );~~,./ @,. ;;;./@,./| ~~~~;#-(@- __,.,.,. ;_);~~~ ~@ -~~());; #);@-,./@, .*+);;; ~~@-~~ );~~);~~ *+~~@-);-( ~~@-@-_ _~~@- ~~@-);; #,./@,.;., .;.);@ -~~@-; #/.;#-( ~~@-@-__ ~~@-~~ @-);@ -);~~, .*+,./ |);;;~ ~@-~~ ;;;.; _~~@-@ -__);. %;#-( @-__@ -__~~;# ~~@-;; ;#,. ;_,.. %);@-,./@, .*+, ..%, .;.,./|) ;;;) ;;#~ ~@-,.*+,. ,.~~ @-); *+,.;_);;.~ ~);); ~~,.; .~~@-);~~,.;., ./.,.; ;,.*+ ,./|,.); ~~@- );;;,.( ),.*+); ;#~~/|@- __~~;#~~ $';$;;
  14. 14. P ratical E xtraction and R eport L anguage
  15. 15. Perl foi criado por Larry Wall, inspirado em Shell Script, AWK, SED e C (e uma pitada de linguística)
  16. 16. Larry também criou a primeira versão do PATCH e do leitor de news RN
  17. 17. Perl 1.0 foi lançado na usenet alt.comp.sources em 18/12/1987
  18. 18. Exemplos
  19. 19. # fibbonacci - iterativo sub factorial { my $n = shift ; my $result = 1; for my $i (1..$n) { $result *= $i; }; $result; } print “Fatorial de 10 eh ”. factorial (10);
  20. 20. # fibbonacci - recursivo sub factorial { my $n = shift ; ($n == 0)? 1 : $n* factorial ($n-1); }
  21. 21. # fibbonacci - funcional use List::Util qw(reduce); sub factorial { my $n = shift ; reduce { $a * $b } 1, 1 .. $n }
  22. 22. http://rosettacode.org/
  23. 23. Linguagem e Cultura estão intimamente ligados
  24. 24. Ab Ovo Usque Ad Mala
  25. 25. From the Beginning to End
  26. 26. Linguagem Depende da Cultura
  27. 27. E a Cultura Perl é....
  28. 28. COLABORAÇÃO
  29. 29. TIMTOWTDI
  30. 30. TIMTOWTDI There is More Than One Way To Do It
  31. 31. CPAN
  32. 32. Comprehensive Perl Archive Network (Perl's Killer Feature)
  33. 33. www.cpan.org
  34. 34. 95.676 módulos 8.998 autores 259 mirrors
  35. 35. “ Nós não nos importamos com a qualidade, Não nos importamos com o propósito, Apenas queremos hospedar os seus módulos&quot;
  36. 36. Desafio: como trazer inovação e, ao mesmo tempo, ser estável?
  37. 37. Versão Perl Data 1 1987-Dec-18 2 1988-Jun-05 3 1989-Oct-18 4 1991-Mar-21 5 1994-Oct-17
  38. 38. Linguagem Criação Versão Atual PHP 1994 5.3.6 Ruby 1995 1.9.2 Python 1991 3.2 Java 1995 1.6.0_25 JavaScript 1995 1.8.5 C# 2001 4.0 C++ 1985 ISO/IEC 14882:2003 / C++0x
  39. 39. Algumas linguagens modernas surgiram, evoluiram e se consolidaram durante do período de vida da versão mais recente de Perl
  40. 40. Perl 5 é o dialeto atual
  41. 41. Perl 6 ainda está em desenvolvimento ( mas é muito, muito legal )
  42. 42. Então que Diabos é Perl Moderno?
  43. 43. Que versão de Perl vc utiliza?
  44. 44. http://perldoc.perl.org/
  45. 45. Perl 5.8.9 (que muita gente deve usar ainda...) É de 2008-Dec-14
  46. 46. Em 2007-Dec-18 é lançado Perl 5.10.0
  47. 47. Big Changes!
  48. 48. <ul>The feature pragma </ul>
  49. 49. <ul>use feature “:5.10”; use feature qw( … ); </ul>
  50. 50. Antes eu tinha que fazer assim <ul>#!/usr/bin/perl use strict; use warnings; print “hello worldn”; # argh... não posso esquecer o n no final! </ul>
  51. 51. Agora podemos escrever <ul>#!/usr/bin/perl use strict; use warnings; use feature 'say'; say “hello world”; </ul>
  52. 52. Modern::Perl <ul><li>#!/usr/bin/perl
  53. 53. use Modern::Perl;
  54. 54. # precisa instalar via CPAN...
  55. 55. say “hello world”; </li></ul>
  56. 56. Modern::Perl <ul><li>Operador //
  57. 57. Given/ When
  58. 58. State variables
  59. 59. Smart Matching ~~
  60. 60. Regular Expression (?<name>...)
  61. 61. Pragma mro for Method Resolution Order </li><ul><li>DFS Depth First Search
  62. 62. C3 (like Dylan language) </li></ul></ul>
  63. 63. Implicit Strictures in Perl 5.12 <ul>use 5.12.0; significa: use strict; use feature ':5.12'; </ul>
  64. 64. Versão atual: 5.14 ! 5.10 ja está depreciada
  65. 65. Suporte a Unicode 6
  66. 66. Suporte a IPv6
  67. 67. Array and hash container functions accept references!
  68. 68. Traditional Syntax Terse Syntax push @$arrayref, @stuff push $arrayref, @stuff pop @$arrayref pop $arrayref shift @$arrayref shift $arrayref values %$hashref values $hashref keys %$hashref keys $hashref
  69. 69. Package Block Syntax <ul>Package Foo::Bar 1.2 { # code } </ul>
  70. 70. Filehandle method calls load IO::File on demand <ul>open my $fh, &quot;>&quot;, $file; # loads IO::File and succeeds $fh->autoflush(1); # local $| = 1; $fh->binmode(&quot;:raw&quot;); $fh->close; </ul>
  71. 71. Modulos Core (alguns...) <ul><li>Carp
  72. 72. Data::Dumper
  73. 73. Encode
  74. 74. English
  75. 75. File::Temp
  76. 76. Findbin
  77. 77. Getopt::Long
  78. 78. Scalar::Util </li></ul><ul><li>List::Util
  79. 79. Hash::Util
  80. 80. Memoize
  81. 81. Module::Pluggable
  82. 82. Test::Simple
  83. 83. Test::More
  84. 84. Tie::File
  85. 85. Time::HiRes </li></ul>
  86. 86. autodie <ul>Antes: open(my $fh,&quot;<&quot;,$filename) <ul>or die &quot;ops...&quot;; </ul></ul>
  87. 87. autodie <ul>bIlujDI' yIchegh()Qo'; yIHegh()! It is better to die() than to return() in failure. -- Klingon programming proverb. </ul>
  88. 88. autodie <ul>use autodie qw(open close); # open/close succeed or die open(my $fh, &quot;<&quot;, $filename); # No need to check! </ul>
  89. 89. CPAN!
  90. 90. Antes o tratamento de erros era assim <ul>eval { <ul>...algum codigo que pode lançar um erro... </ul>}; if($@){ # cuidado! $@ é global! :/ <ul>print &quot;opa...&quot;; </ul>} </ul>
  91. 91. Try::Tiny <ul>use Try::Tiny; try { <ul>algum codigo que pode lançar um erro </ul>} catch { <ul>warn &quot;opa... ocorreu um erro $_&quot;; </ul>} finally { <ul>... </ul>}; </ul>
  92. 92. Moose
  93. 93. Perl 5 é Orientado a Objetos!
  94. 94. package Point; sub new { # construtor! my $klass = shift ; my $self = { x => 0, y => 0}; bless $self, $klass; } # criando um acessor para a prop. x sub x { my $self = shift ; my $x = shift ; $self->{x} = $x // $self->{x}; }
  95. 95. Moose is a postmodern object system for Perl 5
  96. 96. package Point; use Moose; has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); sub clear { my $self = shift; $self->x(0); $self->y(0); }
  97. 97. package Point3D; use Moose; extends 'Point'; has 'z' => (is => 'rw', isa => 'Int'); after 'clear' => sub { my $self = shift; $self->z(0); } __PACKAGE__->meta->make_immutable;
  98. 98. Roles
  99. 99. package Breakable; use Moose::Role; has 'is_broken' => ( is => 'rw', isa => 'Bool' ); sub break { shift->is_broken(1); }
  100. 100. package Car; use Moose; with 'Breakable'; ...
  101. 101. Outros Modulos <ul><li>DateTime
  102. 102. Smart::Comments
  103. 103. IO::All
  104. 104. Perl::Tidy
  105. 105. Perl::Critic
  106. 106. Email::Simple
  107. 107. Text::CSV_XS
  108. 108. Config::Any </li></ul><ul><li>DBI
  109. 109. Dist::Zilla
  110. 110. Devel::NYTProf
  111. 111. Devel::Cover
  112. 112. Log::Log4Perl
  113. 113. POE
  114. 114. WWW::Mechanize
  115. 115. Task::Kensho </li></ul>
  116. 116. Shell <ul>use Shell qw(cat ps cp); $passwd = cat('</etc/passwd'); @pslines = ps('-ww'); cp(&quot;/etc/passwd&quot;, &quot;/tmp/passwd&quot;); # Forma OO, utilizando “method missing” my $sh = Shell->new; print $sh->ls('-l'); </ul>
  117. 117. Inline::C <ul>use Inline C => <<'END_C'; void greet() { printf(&quot;Hello, worldn&quot;); } END_C greet; # imprime hello world from C </ul>
  118. 118. Attribute::Util <ul>use Attribute::Memoize; sub fib :Memoize { my $n = shift; return $n if $n < 2; fib($n-1) + fib($n-2); } say fib($_) for 1..50; </ul>
  119. 119. <ul>Attribute::Overload </ul><ul>use Attribute::Overload; sub add : Overload(+) { # ... } </ul>
  120. 120. Template Toolkit
  121. 121. DBIx::Class
  122. 122. Catalyst
  123. 123. Dancer
  124. 124. Mojolicious
  125. 125. ojo <ul>perl -Mojo -e ' <ul>a(&quot;/&quot; => {text => &quot;Hello Mojo!&quot;})->start </ul>' daemon a : any g : get p : post u : put d : delete </ul>
  126. 126. Mojolicious::Lite <ul>use Mojolicious::Lite; # Route with placeholder get '/:foo' => sub { my $self = shift; my $foo = $self->param('foo'); $self->render(text => &quot;Hello from $foo!&quot;); }; # Start the Mojolicious command system app->start; </ul>
  127. 127. Mojolicious::Lite <ul># /foo?user=bar get '/foo' => sub { my $self = shift; my $user = $self->param('user'); $self->stash(one => 23); $self->render('baz', two => 24, u => $user); }; __DATA__ @@ baz.html.ep Hello <%=$u%> with <%=$one%> and <%=$two%>. </ul>
  128. 128. Mojolicious::Lite <ul>websocket '/echo' => sub { my $self = shift; $self->on_message(sub { my ($self, $message) = @_; $self->send_message(&quot;echo: $message&quot;); }); }; </ul>
  129. 129. http://mojolicio.us/perldoc
  130. 130. Mojolicious
  131. 131. mojo generate app MyApp
  132. 132. MAC179013:palestra peczenyj$ mojo generate app MyApp [mkdir] /Users/peczenyj/palestra/my_app/script [write] /Users/peczenyj/palestra/my_app/script/my_app [chmod] my_app/script/my_app 744 [mkdir] /Users/peczenyj/palestra/my_app/lib [write] /Users/peczenyj/palestra/my_app/lib/MyApp.pm [mkdir] /Users/peczenyj/palestra/my_app/lib/MyApp [write] /Users/peczenyj/palestra/my_app/lib/MyApp/Example.pm [mkdir] /Users/peczenyj/palestra/my_app/t [write] /Users/peczenyj/palestra/my_app/t/basic.t [mkdir] /Users/peczenyj/palestra/my_app/log [mkdir] /Users/peczenyj/palestra/my_app/public [write] /Users/peczenyj/palestra/my_app/public/index.html [mkdir] /Users/peczenyj/palestra/my_app/templates/layouts [write] /Users/peczenyj/palestra/my_app/templates/layouts/default.html.ep [mkdir] /Users/peczenyj/palestra/my_app/templates/example [write] /Users/peczenyj/palestra/my_app/templates/example/welcome.html.ep
  133. 133. package MyApp; # in my_app/lib use Mojo::Base 'Mojolicious'; # This method will run once at server start sub startup { my $self = shift; # Documentation browser under &quot;/perldoc&quot; $self->plugin('pod_renderer'); # Routes my $r = $self->routes; # Normal route to controller $r->route('/welcome')->to('example#welcome'); } 1;
  134. 134. package MyApp::Example; use Mojo::Base 'Mojolicious::Controller'; # This action will render a template sub welcome { my $self = shift; # Render template &quot;example/welcome.html.ep&quot; # with message $self->render(message => 'Welcome to the Mojolicious Web Framework!'); } 1;
  135. 135. templates/layouts/default.htmp.ep <!doctype html><html> <head><title><%= title %></title></head> <body><%= content %></body> </html> templates/example/welcome.html.ep % layout 'default'; % title 'Welcome'; <h2><%= $message %></h2> This page was generated from the template
  136. 136. #!/usr/bin/env perl use strict; use warnings; use Test::More tests => 5; use Test::Mojo; use_ok 'MyApp'; # Test my $t = Test::Mojo->new(app => 'MyApp'); $t->get_ok('/welcome')->status_is(200) ->content_type_is('text/html;charset=UTF-8') ->content_like(qr/Mojolicious Web Framework/i);
  137. 137. Perl5i
  138. 138. Perl 6
  139. 139. Livros Modern Perl – Chromatic (free) Learning Perl – Randal Schwartz Programming Perl – Larry Wall Intermediate Perl Randal Schwartz Mastering Perl – Brian d foy Perl Best Practices – Damian Conway High Order Perl – Mark Jason Dominus
  140. 140. E utilizando o perldoc $ perldoc -f builtinFunction $ perldoc -q FAQ $ perldoc Some::Module $ perldoc perlhist Disponivel em html ou pdf no site perldoc.perl.org
  141. 141. Language Reference <ul><li>perlsyn – sintaxe
  142. 142. perldata – data types
  143. 143. perlsub – subrotinas
  144. 144. perlvar – variaveis predefinidas
  145. 145. perltie – variaveis “tie”
  146. 146. perlport – escrever codigo portavel !
  147. 147. perlperf – tecnicas de performance
  148. 148. perlmod – modulos e tabela de simbolos </li></ul>
  149. 149. Tutoriais <ul><li>perlstyle – style guide
  150. 150. perlreftut – references
  151. 151. perlretut – regular expressions
  152. 152. perlunitut – unicode
  153. 153. perllol – arrays of arrays
  154. 154. perlopentut – open things
  155. 155. perlboot – Beginner's OO
  156. 156. perlxstut – sobre XS </li></ul>
  157. 157. Obrigado
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×