SlideShare a Scribd company logo
Perl para Administradores de Sistemas Slackshow 2010 Samir Cury – Rio Perl Monks
Caracteristicas principais do Perl  Licensa GPLv1, 2 ou 3 Artística! (exemplo no slide a seguir) "A vida imita o Perl" TIMTOWTDI! "There  Is More Than One Way To Do It" Vantagens e desvantagens Geralmente o Perl não te salva de você mesmo Embora o Strict e o Warnings ajudem =) Diversão dos programadores Como fica o gerente de projeto ? Para a tranquilidade dos gerentes : Bem como na vida, Formalidade pode e deve ser usada, tudo depende do escopo  
As faces do Perl - desmistificando Linguagem exclusiva para web antiga, scripts e a favorita dos sysadmins e hackers que nao tem paciencia para C. Em parte verdade       #### Linux Merry Christmas by SmokeMachine### perl -e'*MERRY=*\;*XMAS=*/;' -F: -nae'$,=join q,,,map{chr$_+@{[(1)x unpack q C\CC,q q \q \q q]}}q 1007769828289001 =~/.{2}/g;BEGIN{*SANTA = *ARGV}$MERRY=$XMAS;print$F[0],join q,,,map{chr}q;099104114105115116109097115;=~/(.{3})/g;BEGIN{push@SANTA,join q,,,map{chr}q 30471011160990471120971151151191003 =~/(.{3})/g}' http://tinyurl.com/26owg37
As faces do Perl - desmistificando O que muita gente nao sabe, ou ate mesmo nao aceita, e que Perl tambem pode ser bem formal, caso voce queira Ele nao te amarra e nem te obriga E uma escolha livre. #!/usr/bin/perl use Employee; my $object = new Employee( "Mohammad", "Saleem",23234345); # Get first name which is set using constructor. my $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n"; # Now Set first name using helper function. $object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName =  $object->getFirstName(); print "After Setting First Name is : $firstName\n";
Mais faces – diversão / “prototipagem” / Na verdade, o Perl pode assumir qualquer forma entre o punk e o engravatado, voce e livre para faze-lo, e por isso deve ter a responsabilidade de saber o que faz e onde faz, lembre-se :  tudo tem seu uso Quando quiser testar algum trecho rapido de codigo que esta em duvida sobre, ou  executar tarefas simples, nada melhor que um one-liner  : Darkstar ~ # cat teste.txt  I am writing here just to test a script Darkstar ~ # perl -nlpe's/writing/laughing/ or s/script/one\-liner/g' teste.txt I am laughing here just to test a one-liner
Diversos Frameworks / Utilidades WEB Catalyst – famoso, grande e mais adotado Mojolicious – Feito para aplicações pequenas, leves e rápidas para escrever. Command Line App::Rad Acesso a DB DBI – Database Interface DBIx::Class – é possível usar um DB, “sem usar SQL”:
Exemplo - DBIx::Class ################ Arquivo da classe Schema::Result::Artist ############ package MyDB::Schema::Result::Artist; use base qw/DBIx::Class::Core/; __PACKAGE__->table('artist'); __PACKAGE__->add_columns(qw/ artistid name /); __PACKAGE__->set_primary_key('artistid'); 1; ############### Arquivo do seu código: ################## Use MyDB::Schema::Result::Artist; my $schema = MyDB::Schema->connect($dbi_dsn, $user, $pass, \%dbi_params); $schema->table('artist'); #SELECT * FROM Artist  my @all_artists = $schema->resultset('Artist')->all; #SELECT * FROM Artist WHERE name LIKE 'John%' my $johns_rs = $schema->resultset('Artist')->search( # Build your WHERE using an SQL::Abstract structure: { name => { like => 'John%' } } ); Para quem quiser mais : http://www.slideshare.net/jshirley/demystifying-dbixclass
A linguagem Tipos de variavel (A.K.A. Contexto) $scalar; # pode ser  “a”, ou  ' http://url.com ' , ou  1  ou  0  ou  undef #Tipo de unidade mais primitiva  @array = qw[ a b c d e] ; #  (“a”, 'http://url.com',  1 ,  0 ), simplesmente lista de escalares %Hash = ( nome => 'Samir', endereco => 'Rua Local Host, 127.0.0.1',  ); Perldoc Perldata http://perldoc.perl.org/perldata.html
Acessando as variaveis Array é uma lista de escalares Então, para acessar o segundo valor : my $scalar = $array[2]; O Hash é um array associativo chave => valor Para acessar o valor de 'chave' : my $scalar = $hash{chave};
Problema Para array e para hash, eu só posso ter como valores, escalares, mas eu quero passar um hash ou um array como valor, e agora? Referências! $array1[3] = \@array; $hash{'array'} = \@array; Depois eu posso “restaurar” este valor para um escalar e trabalhar com ele : my $arref = $array1[3]; $arref->[0]; Foreach my $value (@$arref){ <code> } Ou posso dereferenciar : my $arref = $array1[3]; my @array = @$arref; #exemplo legal de mudanca de #contexto
Estruturas de loop .. interessantes Foreach my $row (@array) { print $row; } #ou Foreach (@array) { Print $_.”\n “; } for (1..100) { say $_; #suportado no Perl >= 5.10  } while (<FILEHANDLER>) { }
Inovações do Perl 5.10 Existem muitas outras, mas aqui será útil Say SmartMatch Para os curiosos / interessados : http://www.slideshare.net/rjbs/perl-510-for-people-who-arent-totally-insane
Say Basicamente print “$Input /n” ; Acreditem, faz bastante diferenca samir@Darkstar ~ $ perl -E'say &quot;HelloWorld&quot;' HelloWorld samir@Darkstar ~ $
SmartMatching - Arrays Operador para matches mais inteligentes  Procurando um valor num array antigamente : if(grep /$value/, @test) { <code> } Com SmartMatching : if ($value ~~ @test) { Code }
SmartMatching - Hashes O que já era fácil : If (exists $hash{$key}) { <code> } Ficou ainda mais If ($key ~~ %hash){ <code> }
Variáveis especiais – não mordem $_ - entrada padrão (para subs e regexps) %ENV – Ambiente da sua sessão (env do bash por exemplo) $^O – Sistema operacional $/ - “\n” - só que mais fácil @_ - Argumentos de uma sub (padrão para shift()) @ARGV – Argumentos para o seu script  $$ - PID do seu processo rodando $. - Numero da linha que está sendo lida agora do <FileHandle> Elas te ajudam a escrever testes rápidos, porém não são tão legíveis, obviamente
Variáveis especiais – ainda com medo? Use English; $_ - $ARG $^O – $OSNAME $/ - “\n” - $INPUT_RECORD_SEPARATOR ou $RS @_ - @ARG $$ - $PROCESS_ID ou $PID $. - $INPUT_LINE_NUMBER ou $NR
CPAN – O poder do Perl O repositório de módulos Perl http://search.cpan.org Onde 90% dos seus problemas já estão resolvidos Monitoramento de uma grandeza qualquer via gráficos (com histórico) RRD::Simple  Ler arquivos de configuração Config::Simple Ler um XML e passar chave => valor para um hash? (suporta árvores) XML::Simple Usar uma tabela do google (APIs AJAX) para saida via web : Data::Google::Visualization::DataTable  O que mais voce precisar Procure la e provavelmente ira achar
Update pre-palestra! Net::Twitter::Lite Use Net::Twitter::Lite my $net_twitter = Net::Twitter::Lite->new( username => $user, password => $password ); $net_twitter->update('Twittando via Perl no Slackshow');
NameSpaces Lembram que o modulo para RRDs era RRD::Simple e para XMLs era XML:: Chamamos isto de NameSpace Uma boa pratica, e se voce desenvolve um modulo, deixar sob um namespace que faca sentido NamesPace para modulos “zoados” => ACME:: Vamos para o browser, alguns modulos interessantes, inclusive um que originou a camisa da Rio Perl Monks
Instalando um modulo Perl Abra uma secao qualquer como root Darkstar ~ # cpan App::Rad Files=27, Tests=174,  4 wallclock secs ( 0.16 usr  0.06 sys +  3.07 cusr  0.49 csys =  3.78 CPU) Result: PASS GARU/App-Rad-1.04.tar.gz /usr/bin/make test -- OK Running make install Prepending /root/.cpan/build/App-Rad-1.04-smkdfB/blib/arch /root/.cpan/build/App-Rad-1.04-smkdfB/blib/lib to PERL5LIB for 'install' Installing /usr/local/share/perl/5.10.0/App/Rad.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Help.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Config.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Plugin.pod Installing /usr/local/share/perl/5.10.0/App/Rad/Include.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Exclude.pm Installing /usr/local/man/man3/App::Rad::Include.3pm Installing /usr/local/man/man3/App::Rad::Plugin.3pm Installing /usr/local/man/man3/App::Rad::Exclude.3pm Installing /usr/local/man/man3/App::Rad.3pm Installing /usr/local/man/man3/App::Rad::Help.3pm Appending installation info to /usr/lib/perl/5.10/perllocal.pod GARU/App-Rad-1.04.tar.gz /usr/bin/make install  -- OK
local::lib – Instale tudo no seu Home! #cpan local::lib Depois que tudo for bem : \ Eu precisei (talvez voces nao) $cpan >o conf read # (ver aqui se tem alguma variavel configurada para o home do root) >o conf prefs_dir /home/samir/.cpan/prefs >o conf commit samir@Darkstar ~ $ perl -Mlocal::lib  Attempting to create directory /home/samir/perl5 Attempting to create file /home/samir/perl5/.modulebuildrc export MODULEBUILDRC=&quot;/home/samir/perl5/.modulebuildrc&quot; export PERL_MM_OPT=&quot;INSTALL_BASE=/home/samir/perl5&quot; export PERL5LIB=&quot;/home/samir/perl5/lib/perl5/i486-linux-gnu-thread-multi:/home/samir/perl5/lib/perl5&quot; export PATH=&quot;/home/samir/perl5/bin:$PATH&quot;
Perldoc – sua fonte de referencias Se estiver perdido sobre qualquer coisa em Perl, geralmente a documentacao esta a um comando de distancia! #perldoc perlvar #perldoc perlreftut #perldoc perlboot #perldoc -f print E muito mais! WARNING – em muitas distros perldoc e um pacote separado que deve ser instalado!
Um pouco mais de one-liners Proposito (nao e grandioso) Por isso se torna bom – rapido e sujo, para tarefas temporarias, com o poder de uma linguagem e suas libs. Aprendendo helloworld em one-liners #perl -e'print “helloworld \n”' #perl -E'say “helloworld”' Aprendendo muito mais do que isto : #perldoc perlrun
Arquivo cobaia samir@Darkstar ~ $ cat perl.txt  PING google.com (64.233.163.104) 56(84) bytes of data. 64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=4 ttl=54 time=12.5 ms --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 11.826/12.543/13.847/0.795 ms
Flags interessantes -ne -npe – imprime o que esta em $_ while (<>) { ...  #seu codigo aqui } samir@Darkstar ~ $ perl -ne'print $_  if   m/^--\w*/ ' perl.txt --- google.com ping statistics --- samir@Darkstar ~ $ perl -npe's/^--.*/SUBSTITUI AQUI COM O PERL/' perl.txt PING google.com (64.233.163.104) 56(84) bytes of data. 64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=4 ttl=54 time=12.5 ms SUBSTITUI AQUI COM O PERL 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 11.826/12.543/13.847/0.795 ms
Flags interessantes -l – Tratamento de newlines Basicamente para cada linha do arquivo sendo lido, remove \n ao final Ao imprimir de volta, recoloca o \n (caso voce nao queira dados sujos) Deve ser usado com -n ou -p
Casos de uso de one-liners Yum log watch Surgiu de uma Regexp que veio de uma ideia legal Ate 2011 vai virar um projeto GPL Ja existe um esqueleto de codigo Temperature Ferramenta que e o exemplo perfeito de um framework para desenvolvimento de aplicativos de linha de comando – App::Rad
Hands on! App::Rad
Yet Another Perl Conference YAPC::BR Perl – Solucoes e integracoes para negocios! Fortaleza – 25 a 31 de Outubro http://www.yapcbrasil.org.br
Perl -E'say q[Obrigado!]' [email_address] [email_address] [email_address]

More Related Content

PPTX
Вебинар Томулевича materialized.path 2
PDF
Symfony2 en pièces détachées
ODP
FISL11 - REST com Java - WebServices Simples e Ágeis
PDF
Puppet入门
PDF
Neuperl6
PDF
Workwise overview summary 2011
PPTX
Summer training project ppts
Вебинар Томулевича materialized.path 2
Symfony2 en pièces détachées
FISL11 - REST com Java - WebServices Simples e Ágeis
Puppet入门
Neuperl6
Workwise overview summary 2011
Summer training project ppts

Viewers also liked (20)

PPTX
Summer training project
PPT
Ramas de la biologia
PDF
Anatomia de mi PLE
PDF
Consumer protection bill
PDF
Kannanotto: Talouden lyhyen ja pitkän aikavälin muutostarpeita
PPTX
15 19 nov
PPTX
Accessing resume templates in word
PDF
Cactus explorer 8 complete
PPT
C:\Documents And Settings\User\My Documents\My Pictures\Drakestergabypeace An...
PDF
Financial 101.2012
PDF
[plan politika] Pemuda dan Politik Indonesia : In Search of Truly Youthful Un...
PPT
Theo2 church-as-a-sacrament-and-a-mystery-1195896639466224-2
PPT
IEC Do's & Don'ts
 
PPT
IEC Orientation first year for B-Tech
 
PPT
IEC Orientation first year for MBA,MCA,B. Pharmacy & IHM
 
PDF
Kannanotto: Oppisopimuskoulutus tarvitsee oman kehittämisohjelmansa
PPTX
áLbum de fotografias
PPTX
วารุณี
PPTX
SJob
Summer training project
Ramas de la biologia
Anatomia de mi PLE
Consumer protection bill
Kannanotto: Talouden lyhyen ja pitkän aikavälin muutostarpeita
15 19 nov
Accessing resume templates in word
Cactus explorer 8 complete
C:\Documents And Settings\User\My Documents\My Pictures\Drakestergabypeace An...
Financial 101.2012
[plan politika] Pemuda dan Politik Indonesia : In Search of Truly Youthful Un...
Theo2 church-as-a-sacrament-and-a-mystery-1195896639466224-2
IEC Do's & Don'ts
 
IEC Orientation first year for B-Tech
 
IEC Orientation first year for MBA,MCA,B. Pharmacy & IHM
 
Kannanotto: Oppisopimuskoulutus tarvitsee oman kehittämisohjelmansa
áLbum de fotografias
วารุณี
SJob
Ad

Similar to Perl para sysadmins (20)

PPTX
Aspetos gerais de desenvolvimento web.
PDF
Perl6 Regex Programming with Rakudo
PDF
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
PPTX
PDF
Core rest edgarsilva_v1
PPT
Migracion de ActionScript 2 a ActionScript 3.0
ODP
Seminario Ruby On Rails Aula Open Source
PDF
Ria的强力后盾:rest+海量存储
PDF
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
PDF
망고100 보드로 놀아보자 16
PDF
UglifyJS 使用文档
PDF
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
PDF
Boostのあるプログラミング生活
ODP
Der lachende Dritte
PPT
Chico-UI en escuela DaVinci
KEY
Why Ruby?
PDF
FISL11 2010 - Automação de Datacenters
PDF
DevInRio 2010 - NodeJS
PPT
Présentation du framework Grails
PDF
Social networks analisys - github API
Aspetos gerais de desenvolvimento web.
Perl6 Regex Programming with Rakudo
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Core rest edgarsilva_v1
Migracion de ActionScript 2 a ActionScript 3.0
Seminario Ruby On Rails Aula Open Source
Ria的强力后盾:rest+海量存储
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
망고100 보드로 놀아보자 16
UglifyJS 使用文档
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Boostのあるプログラミング生活
Der lachende Dritte
Chico-UI en escuela DaVinci
Why Ruby?
FISL11 2010 - Automação de Datacenters
DevInRio 2010 - NodeJS
Présentation du framework Grails
Social networks analisys - github API
Ad

Perl para sysadmins

  • 1. Perl para Administradores de Sistemas Slackshow 2010 Samir Cury – Rio Perl Monks
  • 2. Caracteristicas principais do Perl Licensa GPLv1, 2 ou 3 Artística! (exemplo no slide a seguir) &quot;A vida imita o Perl&quot; TIMTOWTDI! &quot;There  Is More Than One Way To Do It&quot; Vantagens e desvantagens Geralmente o Perl não te salva de você mesmo Embora o Strict e o Warnings ajudem =) Diversão dos programadores Como fica o gerente de projeto ? Para a tranquilidade dos gerentes : Bem como na vida, Formalidade pode e deve ser usada, tudo depende do escopo  
  • 3. As faces do Perl - desmistificando Linguagem exclusiva para web antiga, scripts e a favorita dos sysadmins e hackers que nao tem paciencia para C. Em parte verdade       #### Linux Merry Christmas by SmokeMachine### perl -e'*MERRY=*\;*XMAS=*/;' -F: -nae'$,=join q,,,map{chr$_+@{[(1)x unpack q C\CC,q q \q \q q]}}q 1007769828289001 =~/.{2}/g;BEGIN{*SANTA = *ARGV}$MERRY=$XMAS;print$F[0],join q,,,map{chr}q;099104114105115116109097115;=~/(.{3})/g;BEGIN{push@SANTA,join q,,,map{chr}q 30471011160990471120971151151191003 =~/(.{3})/g}' http://tinyurl.com/26owg37
  • 4. As faces do Perl - desmistificando O que muita gente nao sabe, ou ate mesmo nao aceita, e que Perl tambem pode ser bem formal, caso voce queira Ele nao te amarra e nem te obriga E uma escolha livre. #!/usr/bin/perl use Employee; my $object = new Employee( &quot;Mohammad&quot;, &quot;Saleem&quot;,23234345); # Get first name which is set using constructor. my $firstName = $object->getFirstName(); print &quot;Before Setting First Name is : $firstName\n&quot;; # Now Set first name using helper function. $object->setFirstName( &quot;Mohd.&quot; ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print &quot;After Setting First Name is : $firstName\n&quot;;
  • 5. Mais faces – diversão / “prototipagem” / Na verdade, o Perl pode assumir qualquer forma entre o punk e o engravatado, voce e livre para faze-lo, e por isso deve ter a responsabilidade de saber o que faz e onde faz, lembre-se : tudo tem seu uso Quando quiser testar algum trecho rapido de codigo que esta em duvida sobre, ou executar tarefas simples, nada melhor que um one-liner : Darkstar ~ # cat teste.txt I am writing here just to test a script Darkstar ~ # perl -nlpe's/writing/laughing/ or s/script/one\-liner/g' teste.txt I am laughing here just to test a one-liner
  • 6. Diversos Frameworks / Utilidades WEB Catalyst – famoso, grande e mais adotado Mojolicious – Feito para aplicações pequenas, leves e rápidas para escrever. Command Line App::Rad Acesso a DB DBI – Database Interface DBIx::Class – é possível usar um DB, “sem usar SQL”:
  • 7. Exemplo - DBIx::Class ################ Arquivo da classe Schema::Result::Artist ############ package MyDB::Schema::Result::Artist; use base qw/DBIx::Class::Core/; __PACKAGE__->table('artist'); __PACKAGE__->add_columns(qw/ artistid name /); __PACKAGE__->set_primary_key('artistid'); 1; ############### Arquivo do seu código: ################## Use MyDB::Schema::Result::Artist; my $schema = MyDB::Schema->connect($dbi_dsn, $user, $pass, \%dbi_params); $schema->table('artist'); #SELECT * FROM Artist my @all_artists = $schema->resultset('Artist')->all; #SELECT * FROM Artist WHERE name LIKE 'John%' my $johns_rs = $schema->resultset('Artist')->search( # Build your WHERE using an SQL::Abstract structure: { name => { like => 'John%' } } ); Para quem quiser mais : http://www.slideshare.net/jshirley/demystifying-dbixclass
  • 8. A linguagem Tipos de variavel (A.K.A. Contexto) $scalar; # pode ser “a”, ou ' http://url.com ' , ou 1 ou 0 ou undef #Tipo de unidade mais primitiva @array = qw[ a b c d e] ; # (“a”, 'http://url.com', 1 , 0 ), simplesmente lista de escalares %Hash = ( nome => 'Samir', endereco => 'Rua Local Host, 127.0.0.1', ); Perldoc Perldata http://perldoc.perl.org/perldata.html
  • 9. Acessando as variaveis Array é uma lista de escalares Então, para acessar o segundo valor : my $scalar = $array[2]; O Hash é um array associativo chave => valor Para acessar o valor de 'chave' : my $scalar = $hash{chave};
  • 10. Problema Para array e para hash, eu só posso ter como valores, escalares, mas eu quero passar um hash ou um array como valor, e agora? Referências! $array1[3] = \@array; $hash{'array'} = \@array; Depois eu posso “restaurar” este valor para um escalar e trabalhar com ele : my $arref = $array1[3]; $arref->[0]; Foreach my $value (@$arref){ <code> } Ou posso dereferenciar : my $arref = $array1[3]; my @array = @$arref; #exemplo legal de mudanca de #contexto
  • 11. Estruturas de loop .. interessantes Foreach my $row (@array) { print $row; } #ou Foreach (@array) { Print $_.”\n “; } for (1..100) { say $_; #suportado no Perl >= 5.10 } while (<FILEHANDLER>) { }
  • 12. Inovações do Perl 5.10 Existem muitas outras, mas aqui será útil Say SmartMatch Para os curiosos / interessados : http://www.slideshare.net/rjbs/perl-510-for-people-who-arent-totally-insane
  • 13. Say Basicamente print “$Input /n” ; Acreditem, faz bastante diferenca samir@Darkstar ~ $ perl -E'say &quot;HelloWorld&quot;' HelloWorld samir@Darkstar ~ $
  • 14. SmartMatching - Arrays Operador para matches mais inteligentes Procurando um valor num array antigamente : if(grep /$value/, @test) { <code> } Com SmartMatching : if ($value ~~ @test) { Code }
  • 15. SmartMatching - Hashes O que já era fácil : If (exists $hash{$key}) { <code> } Ficou ainda mais If ($key ~~ %hash){ <code> }
  • 16. Variáveis especiais – não mordem $_ - entrada padrão (para subs e regexps) %ENV – Ambiente da sua sessão (env do bash por exemplo) $^O – Sistema operacional $/ - “\n” - só que mais fácil @_ - Argumentos de uma sub (padrão para shift()) @ARGV – Argumentos para o seu script $$ - PID do seu processo rodando $. - Numero da linha que está sendo lida agora do <FileHandle> Elas te ajudam a escrever testes rápidos, porém não são tão legíveis, obviamente
  • 17. Variáveis especiais – ainda com medo? Use English; $_ - $ARG $^O – $OSNAME $/ - “\n” - $INPUT_RECORD_SEPARATOR ou $RS @_ - @ARG $$ - $PROCESS_ID ou $PID $. - $INPUT_LINE_NUMBER ou $NR
  • 18. CPAN – O poder do Perl O repositório de módulos Perl http://search.cpan.org Onde 90% dos seus problemas já estão resolvidos Monitoramento de uma grandeza qualquer via gráficos (com histórico) RRD::Simple Ler arquivos de configuração Config::Simple Ler um XML e passar chave => valor para um hash? (suporta árvores) XML::Simple Usar uma tabela do google (APIs AJAX) para saida via web : Data::Google::Visualization::DataTable O que mais voce precisar Procure la e provavelmente ira achar
  • 19. Update pre-palestra! Net::Twitter::Lite Use Net::Twitter::Lite my $net_twitter = Net::Twitter::Lite->new( username => $user, password => $password ); $net_twitter->update('Twittando via Perl no Slackshow');
  • 20. NameSpaces Lembram que o modulo para RRDs era RRD::Simple e para XMLs era XML:: Chamamos isto de NameSpace Uma boa pratica, e se voce desenvolve um modulo, deixar sob um namespace que faca sentido NamesPace para modulos “zoados” => ACME:: Vamos para o browser, alguns modulos interessantes, inclusive um que originou a camisa da Rio Perl Monks
  • 21. Instalando um modulo Perl Abra uma secao qualquer como root Darkstar ~ # cpan App::Rad Files=27, Tests=174, 4 wallclock secs ( 0.16 usr 0.06 sys + 3.07 cusr 0.49 csys = 3.78 CPU) Result: PASS GARU/App-Rad-1.04.tar.gz /usr/bin/make test -- OK Running make install Prepending /root/.cpan/build/App-Rad-1.04-smkdfB/blib/arch /root/.cpan/build/App-Rad-1.04-smkdfB/blib/lib to PERL5LIB for 'install' Installing /usr/local/share/perl/5.10.0/App/Rad.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Help.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Config.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Plugin.pod Installing /usr/local/share/perl/5.10.0/App/Rad/Include.pm Installing /usr/local/share/perl/5.10.0/App/Rad/Exclude.pm Installing /usr/local/man/man3/App::Rad::Include.3pm Installing /usr/local/man/man3/App::Rad::Plugin.3pm Installing /usr/local/man/man3/App::Rad::Exclude.3pm Installing /usr/local/man/man3/App::Rad.3pm Installing /usr/local/man/man3/App::Rad::Help.3pm Appending installation info to /usr/lib/perl/5.10/perllocal.pod GARU/App-Rad-1.04.tar.gz /usr/bin/make install -- OK
  • 22. local::lib – Instale tudo no seu Home! #cpan local::lib Depois que tudo for bem : \ Eu precisei (talvez voces nao) $cpan >o conf read # (ver aqui se tem alguma variavel configurada para o home do root) >o conf prefs_dir /home/samir/.cpan/prefs >o conf commit samir@Darkstar ~ $ perl -Mlocal::lib Attempting to create directory /home/samir/perl5 Attempting to create file /home/samir/perl5/.modulebuildrc export MODULEBUILDRC=&quot;/home/samir/perl5/.modulebuildrc&quot; export PERL_MM_OPT=&quot;INSTALL_BASE=/home/samir/perl5&quot; export PERL5LIB=&quot;/home/samir/perl5/lib/perl5/i486-linux-gnu-thread-multi:/home/samir/perl5/lib/perl5&quot; export PATH=&quot;/home/samir/perl5/bin:$PATH&quot;
  • 23. Perldoc – sua fonte de referencias Se estiver perdido sobre qualquer coisa em Perl, geralmente a documentacao esta a um comando de distancia! #perldoc perlvar #perldoc perlreftut #perldoc perlboot #perldoc -f print E muito mais! WARNING – em muitas distros perldoc e um pacote separado que deve ser instalado!
  • 24. Um pouco mais de one-liners Proposito (nao e grandioso) Por isso se torna bom – rapido e sujo, para tarefas temporarias, com o poder de uma linguagem e suas libs. Aprendendo helloworld em one-liners #perl -e'print “helloworld \n”' #perl -E'say “helloworld”' Aprendendo muito mais do que isto : #perldoc perlrun
  • 25. Arquivo cobaia samir@Darkstar ~ $ cat perl.txt PING google.com (64.233.163.104) 56(84) bytes of data. 64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=4 ttl=54 time=12.5 ms --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 11.826/12.543/13.847/0.795 ms
  • 26. Flags interessantes -ne -npe – imprime o que esta em $_ while (<>) { ... #seu codigo aqui } samir@Darkstar ~ $ perl -ne'print $_ if m/^--\w*/ ' perl.txt --- google.com ping statistics --- samir@Darkstar ~ $ perl -npe's/^--.*/SUBSTITUI AQUI COM O PERL/' perl.txt PING google.com (64.233.163.104) 56(84) bytes of data. 64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=4 ttl=54 time=12.5 ms SUBSTITUI AQUI COM O PERL 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 11.826/12.543/13.847/0.795 ms
  • 27. Flags interessantes -l – Tratamento de newlines Basicamente para cada linha do arquivo sendo lido, remove \n ao final Ao imprimir de volta, recoloca o \n (caso voce nao queira dados sujos) Deve ser usado com -n ou -p
  • 28. Casos de uso de one-liners Yum log watch Surgiu de uma Regexp que veio de uma ideia legal Ate 2011 vai virar um projeto GPL Ja existe um esqueleto de codigo Temperature Ferramenta que e o exemplo perfeito de um framework para desenvolvimento de aplicativos de linha de comando – App::Rad
  • 30. Yet Another Perl Conference YAPC::BR Perl – Solucoes e integracoes para negocios! Fortaleza – 25 a 31 de Outubro http://www.yapcbrasil.org.br
  • 31. Perl -E'say q[Obrigado!]' [email_address] [email_address] [email_address]