[SP-pm] Golf, mais complicado...

Eden Cardim edencardim em gmail.com
Quarta Maio 9 11:30:17 PDT 2007


On 5/9/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>    Gente, eu estou tentando receber dois parâmetros via name-value
> syntax, transformar isso num hash e retornar apenas o que interessa.
> Acabei escrevendo isso:
>
>    package Class;
>    sub new {
>        my $class = shift;
>        ( $driver, $options ) = do{ my %args = @_; @args{qw/Driver
> DriverOptions/}; };
>    }

Não vejo nenhum motivo pra usar do{} a não ser evitar a poluição do
escopo de new(). Fora isso, acho q a melhor maneira de fazer é essa
mesmo. Eu iria um pouco mais longe, verificando os parâmetros, usando
um módulo específico, ou implementando algo assim:

sub new {
    my $class = shift;
    my($driver, $options);
    do {
        my %args = @_;
        my %err;
        $driver = delete $args{Driver};
        confess "Driver is required..." unless defined $driver;
        # etc...
        $options = delete $args{DriverOptions};
        # etc...
        if(%args) {
            warn 'unknown options: ' . join ', ', sort keys %args;
        }
    }
}

typos em parâmetros para funções sem verificação já me deram muita dor
de cabeça no passado... :P

-- 
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática


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