[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