[Cascavel-pm] Res: Maneira melhor para escrever e reduzir trecho de código.
Daniel ® Antunes
danielrantunes em yahoo.com.br
Segunda Abril 7 11:04:22 PDT 2008
Na verdade o METHOD_A é uma constante do módulo que aponta para um método da operadora em questão.
Tipo :
use constant METHOD_A 'getRGInfo';
Minha intenção é de "tentar" manter um padrão nestes módulos pq são/serão muitos.
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 ?
Novamente obrigado.
Daniel ® Antunes
profissional de informática
gnu/linux user #238553
----- Mensagem original ----
De: Daniel Ruoso <daniel em ruoso.com>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Segunda-feira, 7 de Abril de 2008 14:51:35
Assunto: Re: [Cascavel-pm] Maneira melhor para escrever e reduzir trecho de código.
Seg, 2008-04-07 às 10:36 -0700, Daniel ® Antunes escreveu:
> Olá amigos da lista, boa tarde...
> Gostaria de saber se há a possibilidade de escrever estas linhas
> de forma sintética :
> if ($sup eq 'ABC'){
> $self->{book}=new Sup::ABC($xml,Sup::ABC::METHOD_A);
> }
> elsif ($sup eq 'D'){
> $self->{book}=new Sup::D($xml,Sup::D::METHOD_A);
> }
> elsif ($sup eq 'EF'){
> $self->{book}=new Sup::EF($xml,Sup::EF::METHOD_A);
> }
> elsif ($sup eq 'GHIJK'){
> $self->{book}=new Sup::GHIJK($xml,Sup::GHIJK::METHOD_A);
> }
{
my $package = 'Sup::'.$sup;
$self->{book} = $package->new($xml, $package->METHOD_A);
}
Algumas observações...
1 - *NUNCA* use a notação indireta. Sempre usa 'Module->new' no lugar de
'new Module'.
2 - O código acima pressupõe que METHOD_A é realmente um método e não
uma subrotina.
Se METHOD_A for realmente uma subrotina,
use UNIVERSAL qw(can);
...
{
my $package = 'Sub::'.$sup;
my $sub_a = $package->can('METHOD_A')
or die 'No method a';
$self->{book} = $package->new($xml, $sub_a->());
}
daniel
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20080407/122fb0b8/attachment.html
Mais detalhes sobre a lista de discussão Cascavel-pm