[Cascavel-pm] Maneira melhor para escrever e reduzir trecho de código.

Daniel Ruoso daniel em ruoso.com
Segunda Abril 7 10:51:35 PDT 2008


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



Mais detalhes sobre a lista de discussão Cascavel-pm