Só pra não ficar de fora ...<br><br>Me corrijam se eu estiver errado, mas a diferenca entre use e require é o fato da primeira forçar a verificação no tempo de compilação, ou ... carga do script.<br><br>Se preparar um sistema realmente grande, vc deverá tomar varios cuidados para não acabar com alto desastroso em mãos, dentre eles, um fracionamento coerente de módulos e forma de chamada.
<br><br>Se vc tiver um sistema extenso, e utilizar a chamada padrão, com use, todo o codigo será validado. Claro... vc provavelmente nem vai perceber, pois digamos que um sistema muito extenso vai ter o que, 50 ou 100 mil linhas ? Mas se for um projeto web, ao entrar em produção, com carga elevada, isso pesa.
<br><br>Mas... em web para um projeto grande, não será utilizado CGI, será mod_perl, ou fastcgi.<br><br>Bem...&nbsp; voltando ao ponto use vs require.<br><br>O use equivale a &quot;BEGIN { require modulo; import modulo }&quot;, e não pode ser utilizado de forma condicional:
<br><br>#x<br>if ( $modo == 1 ) {<br>&nbsp;&nbsp; use Modulo1;<br>&nbsp;} else {<br>&nbsp;&nbsp; use ModuloX;<br>}<br><br>Enquanto que o require permite esta opção.<br><br>#x<br>
if ( $modo == 1 ) {<br>
&nbsp;&nbsp; require Modulo1;<br>
&nbsp;} else {<br>
&nbsp;&nbsp; require ModuloX;<br>
}<br>
<br># <a href="http://Modulo1.pm">Modulo1.pm</a><br>package Modulo1;<br>print &quot;Begin Modulo1\n&quot;;<br>1;<br><br>
# ModuloX.pm<br>
package Modulo1;<br>
print &quot;Begin ModuloX\n&quot;;<br>X;<br><br><br>Crie os arquivos e faça o teste ;)<br><br><a href="http://perldoc.perl.org/functions/require.html">http://perldoc.perl.org/functions/require.html</a><br><a href="http://perldoc.perl.org/functions/use.html">
http://perldoc.perl.org/functions/use.html</a><br><br>PS: Conhecimento estraído de leitura de discussões na Cascavel-PM. Como diria meu chefe... soluções em busca de problemas ;)<br>
<br><br>Sds,<br>Marco Antonio<br><br><div><span class="gmail_quote">Em 18/11/07, <b class="gmail_sendername">Blabos de Blebe</b> &lt;<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt; escreveu:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Era isso que eu queria saber fernando.<br><br>vlw<br><br>Obriagado a todos que responderam<br><br><br><br><br><br>On Nov 18, 2007 5:49 PM, Fernando Oliveira &lt;<a href="mailto:fernandocorrea@gmail.com">fernandocorrea@gmail.com
</a>&gt; wrote:<br>&gt;<br>&gt;<br>&gt; Isso depende...<br>&gt;<br>&gt; se nos seus módulos vc chama outros módulos através de &quot;use&quot;, ele vai ser<br>&gt; carregado logo no inicio do carregamento do programa, como se estivesse
<br>&gt; dentro do bloco BEGIN... agora, se vc usar um &quot;require&quot; os modulos serão<br>&gt; carregados sob demanda...<br>&gt;<br>&gt; Fiz um pequeno teste cara comprovar isso:<br>&gt;<br>&gt; fernando@ubuntu:~$ for i in 
<a href="http://teste.pm">teste.pm</a> <a href="http://teste2.pm">teste2.pm</a> <a href="http://teste3.pm">teste3.pm</a> <a href="http://teste4.pm">teste4.pm</a>; do echo<br>&gt; &quot;#$i&quot;; cat $i; echo; done<br>&gt; #teste.pm
<br>&gt; package teste;<br>&gt; print &quot;teste$/&quot;;<br>&gt; use teste2;<br>&gt;<br>&gt; #teste2.pm<br>&gt; package teste2;<br>&gt; print &quot;teste2$/&quot;;<br>&gt; use teste3;<br>&gt;<br>&gt; #teste3.pm<br>&gt; package teste3;
<br>&gt; print &quot;teste3$/&quot;;<br>&gt; use teste4;<br>&gt;<br>&gt; #teste4.pm<br>&gt; package teste4;<br>&gt; print &quot;teste4$/&quot;;<br>&gt;<br>&gt; fernando@ubuntu:~$ perl -Mteste -e &#39;&#39;<br>&gt; teste4<br>
&gt; teste3<br>&gt;&nbsp;&nbsp;teste2<br>&gt; teste<br>&gt; fernando@ubuntu:~$ perl -i -pe &#39;s/use/require/g;&#39;<br>&gt; teste*.pmfernando@ubuntu:~$ for i in <a href="http://teste.pm">teste.pm</a> <a href="http://teste2.pm">teste2.pm
</a> <a href="http://teste3.pm">teste3.pm</a> <a href="http://teste4.pm">teste4.pm</a>;<br>&gt; do echo &quot;#$i&quot;; cat $i; echo; done<br>&gt; #teste.pm<br>&gt; package teste;<br>&gt; print &quot;teste$/&quot;;<br>&gt; require teste2;
<br>&gt;<br>&gt; #teste2.pm<br>&gt; package teste2;<br>&gt; print &quot;teste2$/&quot;;<br>&gt; require teste3;<br>&gt;<br>&gt; #teste3.pm<br>&gt; package teste3;<br>&gt; print &quot;teste3$/&quot;;<br>&gt; require teste4;
<br>&gt;<br>&gt; #teste4.pm<br>&gt; package teste4;<br>&gt; print &quot;teste4$/&quot;;<br>&gt;<br>&gt; fernando@ubuntu:~$ perl -Mteste -e &#39;&#39;<br>&gt; teste<br>&gt; teste2<br>&gt; teste3<br>&gt; teste4<br>&gt; fernando@ubuntu
:~$<br>&gt;<br>&gt; isso prova q qdo se usa o &quot;use&quot;, ele carrega o módulo mesmo antes do<br>&gt; print... por isso a ordem é &quot;invertida&quot; agora, qdo uso o require, ele faz<br>&gt; &quot;na&quot; ordem, primeiro o print e depois o carregamento do modulo...
<br>&gt;<br>&gt; espero q tenha podido sanar algumas dúvidas...<br>&gt;<br>&gt; Em 18/11/07, Blabos de Blebe &lt; <a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt; escreveu:<br>&gt; &gt; Na mosca, Fernando.<br>&gt; &gt; Era exatamente nisso que eu queria chegar. Perdoem-me pela falta de
<br>&gt; clareza.<br>&gt; &gt;<br>&gt; &gt; Num projeto gigante, mas bem feito em perl, separado em módulos, etc<br>&gt; &gt; cada módulo seria compilado de acordo com a demanda, mesmo depois de subir<br>&gt; &gt; o script principal, ou seria compilado tudo de uma vez, pra depois
<br>&gt; &gt; subir o sistema?<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; Obrigado<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; On Nov 17, 2007 11:29 AM, Fernando Oliveira &lt;<a href="mailto:fernandocorrea@gmail.com">fernandocorrea@gmail.com
</a> &gt;<br>&gt; wrote:<br>&gt; &gt; &gt; Eu acho q a pergunta dele foi a seguinte:<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; se existem programas q levam dias p/ compilar, um equivalente a um<br>&gt; desses<br>&gt; &gt; &gt; programas em uma linguagem q compila o código em tempo real, levaria
<br>&gt; dias p/<br>&gt; &gt; &gt; rodar? e teria q se esperar dias toda vez q se quisesse rodar esse<br>&gt; programa?<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; foi isso q vc quis perguntar locão (wesley)?<br>&gt; &gt; &gt;<br>
&gt; &gt; &gt; Em 17/11/07, Frederico Recsky &lt; <a href="mailto:frederico@gmail.com">frederico@gmail.com</a>&gt; escreveu:<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Olá<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; On Nov 15, 2007 3:32 PM, Blabos de Blebe &lt; 
<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt; wrote:<br>&gt; &gt; &gt; &gt; &gt; Boa tarde a todos,<br>&gt; &gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt; Ultimamente andam me rodeando assuntos como interoperabilidade,
<br>&gt; &gt; &gt; &gt; &gt; máquina virtual, compilação, etc.<br>&gt; &gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt; Cenário:<br>&gt; &gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt; Tem uma pessoal aí que diz que pra ser portável tem que ter máquina
<br>&gt; &gt; &gt; &gt; &gt; virtual, &quot;porque vc compila pra um e<br>&gt; &gt; &gt; &gt; &gt; roda em todos&quot;. Outros dizem que para ser portável, basta ser<br>&gt; &gt; &gt; &gt; &gt; compilável em qualquer plataforma. Os
<br>&gt; &gt; &gt; &gt; &gt; adeptos das máquinas virtuais respondem que grandes sistemas demoram<br>&gt; &gt; &gt; &gt; &gt; muito pra compilar, gerando<br>&gt; &gt; &gt; &gt; &gt; custos extras, etc.<br>&gt; &gt; &gt; &gt;
<br>&gt; &gt; &gt; &gt; &quot;Maquina virtual, compila em um e roda em todas&quot; é um puta engano. No<br>&gt; &gt; &gt; &gt; caso do java você roda em todos que a sun quer com ressalvas em<br>&gt; &gt; &gt; &gt; algumas. Alias, não existe almoço gratis.
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt; A pergunta é: Dado um sistema que demore dias pra compilar numa<br>&gt; &gt; &gt; &gt; &gt; linguagem qualquer. Dado que<br>&gt; &gt; &gt; &gt; &gt; esse sistema tenha sido re-escrito em &quot;Elegante Perl&quot;. Como Perl se
<br>&gt; &gt; &gt; &gt; &gt; comporta ao levantar um<br>&gt; &gt; &gt; &gt; &gt; sistema gigante? Ou seja, quais as dificuldades que Perl poderia<br>&gt; &gt; &gt; &gt; &gt; enfrentar nesse cenário ou em<br>&gt; &gt; &gt; &gt; &gt; algum semelhante?
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Demorar dias para compilar não quer dizer nada. Quando voce muda<br>&gt; &gt; &gt; &gt; somente um pedaço do codigo fonte, voce não compila tudo novamente,<br>&gt; &gt; &gt; &gt; pois já inventaram o linker e etc.. Normalmente na entrega final se
<br>&gt; &gt; &gt; &gt; faz um grande build. Porém existem n formas de se distribuir grandes<br>&gt; &gt; &gt; &gt; programas compilados e suas atualizações sem recompilar tudo. Patches<br>&gt; &gt; &gt; &gt; de binarios por exemplo.
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Olha, dos sistemas de dias para compilar, eu vi servidores e sistemas<br>&gt; &gt; &gt; &gt; operacionais e suites office/graficas.&nbsp;&nbsp;O corel draw deve levar dias<br>&gt; &gt; &gt; &gt; para compilar por exemplo. Porém normalmente você trabalha com pedaços
<br>&gt; &gt; &gt; &gt; de um sistema. Você não vai fazer um oracle nem compilar seu proprio<br>&gt; &gt; &gt; &gt; oracle para entregar para o cliente, você faz um aplicativo<br>&gt; &gt; &gt; &gt; (relativamente pequeno) que usa o oracle existente e entrega tudo.
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; &gt; Eu tenho lá minhas especulações sobre o que aconteceria, mas já que<br>&gt; &gt; &gt; &gt; &gt; não tenho como testar,<br>&gt; &gt; &gt; &gt; &gt; gostaria das opiniões dos grandes mestres.
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Just for fun eu gerei um script perl de somente 20 megas, e ele ta<br>&gt; &gt; &gt; &gt; &quot;abrindo&quot; no meu micro faz uns 40 minutos:<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; ps aux |grep 
gigante.pl<br>&gt; &gt; &gt; &gt; ibm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8840 92.2&nbsp;&nbsp;7.2 153616 150460 pts/1&nbsp;&nbsp; R+&nbsp;&nbsp; 22:21&nbsp;&nbsp;42:58 perl<br>&gt; &gt; &gt; gigante.pl<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Obviamente um script monolitico de 20mb não é &quot;Elegante Perl&quot; :) ;)
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; --<br>&gt; &gt; &gt; &gt; ____________________________<br>&gt; &gt; &gt; &gt; Frederico Recsky<br>&gt; &gt; &gt; &gt; Linux User: #253572<br>&gt; &gt; &gt; &gt; <a href="http://www.fred.eti.br">
http://www.fred.eti.br</a><br>&gt; &gt; &gt; &gt; <a href="http://www.perl.org.br">http://www.perl.org.br</a><br>&gt; &gt; &gt; &gt; _______________________________________________<br>&gt; &gt; &gt; &gt; SaoPaulo-pm mailing list
<br>&gt; &gt; &gt; &gt; <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>&gt; &gt; &gt; &gt; <a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>&gt; &gt; &gt; &gt;
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt;<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; --<br>&gt; &gt; &gt; []&#39;s Fernando<br>&gt; &gt; &gt; _______________________________________________<br>&gt; &gt; &gt; Rio-pm mailing list<br>&gt; &gt; &gt; 
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>&gt; &gt; &gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>&gt; &gt; &gt;<br>&gt; &gt; _______________________________________________
<br>&gt; &gt; SaoPaulo-pm mailing list<br>&gt; &gt; <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>&gt; &gt; <a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm
</a><br>&gt; &gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt; []&#39;s Fernando<br>&gt;<br>&gt; --<br>&gt; []&#39;s Fernando<br>&gt; _______________________________________________<br>&gt; Rio-pm mailing list<br>&gt; <a href="mailto:Rio-pm@pm.org">
Rio-pm@pm.org</a><br>&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>&gt;<br>_______________________________________________<br>Rio-pm mailing list<br><a href="mailto:Rio-pm@pm.org">
Rio-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br>