<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt">&nbsp;&nbsp;&nbsp; Na verdade o METHOD_A é uma constante do módulo que aponta para um método da operadora em questão.<br>&nbsp;&nbsp;&nbsp; Tipo :<br><br>use constant METHOD_A 'getRGInfo';<br><br>&nbsp;&nbsp;&nbsp; Minha intenção é de "tentar" manter um padrão nestes módulos pq são/serão muitos.<br><div>&nbsp;&nbsp;&nbsp; Sobre usar o "new" de forma indireta, já tinham me falado isto, eu modifiquei em grande parte do código. Mas este trecho em particular faz parte do módulo chave do sistema e eu acabei não mexendo. Eu já procurei uma referência do por que desta "Best Practice", mas não encontrei, vc poderia me indicar algum lugar onde eu possa compreender isto ?<br>&nbsp;&nbsp;&nbsp; Novamente obrigado.<br>&nbsp;</div>Daniel ® Antunes<br><em><font color="#007f40">profissional
 de informática</font></em><br><em><font color="#007f40"></font></em><em><font color="#007f40">gnu/linux user</font></em> #238553<div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">----- Mensagem original ----<br>De: Daniel Ruoso &lt;daniel@ruoso.com&gt;<br>Para: Cascavel Perl Mongers &lt;cascavel-pm@pm.org&gt;<br>Enviadas: Segunda-feira, 7 de Abril de 2008 14:51:35<br>Assunto: Re: [Cascavel-pm] Maneira melhor para escrever e reduzir trecho de código.<br><br>Seg, 2008-04-07 às 10:36 -0700, Daniel ® Antunes escreveu:<br>&gt;&nbsp; &nbsp;  Olá amigos da lista, boa tarde...<br>&gt;&nbsp; &nbsp;  Gostaria de saber se há a possibilidade de escrever estas linhas<br>&gt; de forma sintética :<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  if ($sup eq 'ABC'){<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;{book}=new
 Sup::ABC($xml,Sup::ABC::METHOD_A);<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  elsif ($sup eq 'D'){<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;{book}=new Sup::D($xml,Sup::D::METHOD_A);<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  elsif ($sup eq 'EF'){<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;{book}=new Sup::EF($xml,Sup::EF::METHOD_A);<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  elsif ($sup eq 'GHIJK'){<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;{book}=new Sup::GHIJK($xml,Sup::GHIJK::METHOD_A);<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }<br><br><br>{<br>&nbsp;  my $package = 'Sup::'.$sup;<br>&nbsp;  $self-&gt;{book} = $package-&gt;new($xml, $package-&gt;METHOD_A);<br>}<br><br>Algumas
 observações...<br><br>1 - *NUNCA* use a notação indireta. Sempre usa 'Module-&gt;new' no lugar de<br>'new Module'.<br>2 - O código acima pressupõe que METHOD_A é realmente um método e não<br>uma subrotina.<br><br>Se METHOD_A for realmente uma subrotina,<br><br>use UNIVERSAL qw(can);<br>...<br>{<br>&nbsp;  my $package = 'Sub::'.$sup;<br>&nbsp;  my $sub_a = $package-&gt;can('METHOD_A')<br>&nbsp; &nbsp; &nbsp; or die 'No method a';<br>&nbsp;  $self-&gt;{book} = $package-&gt;new($xml, $sub_a-&gt;());<br>}<br><br>daniel<br><br>_______________________________________________<br>Cascavel-pm mailing list<br><a ymailto="mailto:Cascavel-pm@pm.org" href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a></div><br></div></div><br>


      <hr size=1>Abra sua conta no <a href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.mail.yahoo.com/">Yahoo! Mail</a>, o único sem limite de espaço para armazenamento! 
</body></html>