só não se esqueçam, q dependendo do q vcs queiram fazer, podem usar o open tb...<br><br><div class="gmail_quote">2009/2/27 breno <span dir="ltr"><<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/2/27 Raphael Carpi <<a href="mailto:raphael.carpi@gmail.com">raphael.carpi@gmail.com</a>>:<br>
> boa tarde drs.<br>
><br>
<br>
Boa tarde! Não sou doutor mas acho que o cumprimento foi pra mim também :-)<br>
<div class="Ih2E3d"><br>
> então senhores achei a lista enquanto estava pesquisando tutorial sobre perl<br>
><br>
> estou aprendendo perl agora e estou em busca de alguns tutoriais, achei<br>
> vario na net e acho que a lista ajuda em algumas coisas<br>
><br>
<br>
</div>Cuidado com exemplos errados ou jurássicos (e consequentemente errados<br>
tb)! Use a lista quando tiver dúvidas, e tenha certeza que o material<br>
lido refere-se ao Perl 5 (de preferência 5.8 ou 5.10, para ser mais<br>
exato). Pra começar, experimente esse:<br>
<br>
<a href="http://www.perl.org.br/Perldoc/V500807/Perlintro" target="_blank">http://www.perl.org.br/Perldoc/V500807/Perlintro</a><br>
<br>
Ah, e vc já conhece o CPAN, certo? 90% de todos os seus programas já<br>
estão prontos! :-)<br>
<br>
<a href="http://search.cpan.org" target="_blank">http://search.cpan.org</a><br>
<div class="Ih2E3d"><br>
<br>
> a duvida que tenho agora é a seguinte<br>
><br>
> qual o meio mais rapido de executar o comando num script perl<br>
><br>
> syste("comando");<br>
><br>
<br>
</div>vc quis dizer system(), eu sei. Typos acontecem :-)<br>
<div class="Ih2E3d"><br>
> exec("comando");<br>
><br>
> `comando`;<br>
><br>
> sei que as tres formas funcionam mas qual seria a mais rapido ou a mais<br>
> recomendada.<br>
><br>
<br>
</div>Que tal "nenhuma"? Perl é uma linguagem de programação. Se seu<br>
problema resume-se simplesmente a "executar programas externos de<br>
forma rápida", shell scripting (em ambiente *nix) e batch files (em<br>
ambiente win*) são mais apropriados, emho :-)<br>
<br>
Agora, se o buraco é mais embaixo e vc precisa fazer o parsing da<br>
saída ou controle externo de programas, Perl será provavelmente sua<br>
melhor amiga. Não se preocupe com velocidade - Perl é bastante rápido<br>
- preocupe-se com qual das opções melhor atende o seu problema.<br>
Garanto que o gargalo da aplicação (se houver) será no parsing em si,<br>
e não nos microsegundos que vc ganhou/perdeu chamando exec() ou<br>
system() - "desenvolva agora, otimize depois", já diz o ditado. E o<br>
módulo Devel::NYTProf pode te ajudar muito nisso, uma vez que seu<br>
programa estiver completo.<br>
<br>
Sobre as diferentes abordagens de system, etc, cada uma das opções<br>
listadas tem suas particularidades e propósitos específicos, não<br>
havendo uma "melhor que a outra" (depende do seu problema!). Para mais<br>
informações sobre elas, digite:<br>
<br>
perldoc -f system<br>
perldoc -f exec<br>
<br>
Uma dica que posso te dar sobre boas práticas na execução de programas<br>
externos é: Se vc realmente tem q fazer, coloque o programa e seus<br>
parâmetros numa lista. Isto é:<br>
<br>
em vez de:<br>
<br>
system("meuprog --arg1 --arg2");<br>
<br>
faça:<br>
<br>
system( "meuprog", "--arg1", "--arg2");<br>
<br>
ou, mais especificamente:<br>
<br>
my @cmd = ('meuprog', '--arg1', '--arg2');<br>
system (@cmd);<br>
<br>
O motivo é que, dessa forma, o Perl garante que o primeiro elemento da<br>
lista é o programa a ser chamado e que os demais elementos serão<br>
passados como parâmetros para ele. Isso elimina um monte de problemas<br>
de segurança associados à execução de programas com nome/parâmetros<br>
passados pelo usuário, especialmente em relação à interpolação de<br>
metacaracteres shell.<br>
<br>
Apenas por diversão, fiz o seguinte benchmark:<br>
<br>
----------------------------8<----------------------------<br>
use Benchmark qw(:all);<br>
<br>
cmpthese(100000, {<br>
'exec' => sub { exec 'bla' },<br>
'system' => sub { system 'bla' },<br>
'qx' => sub { qx{bla} },<br>
'plique' => sub { `bla` },<br>
});<br>
----------------------------8<----------------------------<br>
<br>
obtendo os resultados:<br>
<br>
Rate system plique qx exec<br>
system 1950/s -- -12% -12% -96%<br>
plique 2216/s 14% -- -0% -96%<br>
qx 2225/s 14% 0% -- -96%<br>
exec 50000/s 2464% 2156% 2147% --<br>
<br>
<br>
É isso. Qualquer dúvida, como o champs falou, lembre-se de usar e<br>
abusar da lista!<br>
<br>
[]s<br>
<font color="#888888"><br>
-b<br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Just another Perl Hacker,<br>Fernando (SmokeMachine)<br><a href="http://perl-e.org">http://perl-e.org</a><br>