[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