[Cascavel-pm] Sistema de frete

Eden Cardim edencardim em gmail.com
Terça Janeiro 9 04:43:45 PST 2007


On 1/9/07, Wendel Scardua <wendelscardua em gmail.com> wrote:
> Só um detalhe (me chame de --pedantic -ansi :-p )
>
> Essa linha
>
> $1 if $resultado =~ /Tarifa=(.+?)\&erro/;
>
> Porque que ela foi escrita assim ? Tipo, o $1 alí tá jogando seu valor para
> o limbo.
>
> Eu sugiro escrever apenas:
>
> $resultado =~ /Tarifa=(.+?)\&erro/;

Bem notado, eu sugiro mais ainda: siga as práticas recomendadas do
perl, a não ser que tenha um bom motivo para fazer o contrário:

<non-tested code>
#!/usr/bin/perl

use strict;
use warnings; #enquanto ainda há tempo ;)

use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
use LWP::Simple;

# nunca imprima o cabeçalho manualmente, salvo por um bom motivo
print header;

# bons comentários++
#################
# Linhas dos correios
#41017 = Encomenda Normal
#40010 = Sedex
#40290 = Sedex Hoje
#40215 = Sedex 10
#40045 = Sedex a Cobrar
###############

# melhor ainda seria utilizar constantes:
use constant {
    ENCOMENDA         => 41017,
    SEDEX                    => 40010,
    SEDEX_HJ               => 40290,
    SEDEX_10               => 40215,
    SEDEX_A_COBRAR => 40045
};

#números não precisam de aspas, muito menos aspas duplas
#my $servico = 41017;
#my $peso = 1.10;

#aspas duplas impactuam o desempenho do seu programa, evite usá-las,
sempre que possível
#my $cep_origem = '19180-470';
#my $cep_destino = '09180-000';

my $baseurl = 'http://www.correios.com.br/encomendas/precos/calculo.cfm';

# legibilidade++
my %query = (
    servico         => ENCOMENDA,
    CepOrigem  => '19180-470',
    CepDestino  => '09180-000',
    Peso            => 1.10
);

# preguiça++
my $url = $baseurl . '?' . join '&', map { "$_=$query{$_}" } keys %query;

# variáveis não precisam ser interpoladas
my $resultado = get($url);
if($resultado =~ /Tarifa=(.+?)\&erro/) {
    # a string abaixo já esclarece o conteúdo de $1
    print 'Valor: R$ ' . sprintf '%.2f', $1;
} else {
    print 'erro'; #ou algo do gênero
}
</non-tested code>



-- 
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática
--
"you seem to think that 'close enough' is close enough...
please learn to be 'literal' around programming."
merlyn - on irc.freenode.net#perl


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