[SP-pm] descubrir o tipo da variavel

Luis Motta Campos luismottacampos at yahoo.co.uk
Tue Jul 13 00:34:56 PDT 2010


On 13/07/10 04:59, Lucas Moraes wrote:
> Oi gente, eu estava terminando a função para mostrar mais aconteceu
> um imprevisto, eu não sabia que a tabela hash retornava
> alertoriamente, como eu faço para deixar no padrão que eu declaro,
> exemplo:
> 
> my %hash = ( nome => 'lucas', email => 'mineiro em live.be'
> <mailto:'mineiro em live.be'>, tel => 44535664 );
> 
> gostaria que retorna-se assim:
> 
> nome - lucas email - mineiro em live.be <mailto:mineiro em live.be> tel -
> 44535664
> 
> eu estranhei retornar alertoriamente.

Lucas,

Para obter valores de um hash em uma determinada ordem, você tem de usar
as chaves que você quer naquela determinada ordem. A gente chama esta
técnica de "hash slice" (literalmente "fatia de hash"):

my %registro =
  ( nome => 'Lucas',
    email => 'mineiro em ...',
    tel => '+55 31 44535664' );

# Eu extraí para um monte de variáveis como exemplo,
# mas você poderia fazer coisas mais úteis com o registro
# sem precisar necessariamente extrair as informações antes
# de usar. Lembre-se: TIMTOWTDI

my ( $nome, $email, $telefone ) =
  @registro{ qw( nome email telefone ) };

Como eu estou lendo múltiplos valores do hash ao mesmo tempo, o Perl
entende aquilo como um "array" de informações (e me retorna uma lista de
valores). Por isso eu tenho de usar o prefixo "@" para acessar os
valores. Não é preciso se preocupar muito com isso, o Perl vai entender
e resmungar que você deveria ter usado este ou aquele símbolo, e vai
continuar fazendo o que você pensou. Apenas certifique-se de que você
"use warnings" no seu programa. ;-)

Mais uma coisa: como DBA, eu não posso deixar de notar que a sua
aproximação para armazenar telefones é péssima. Você deve lembrar que um
número de telefone não é um número, mas um conjunto de informações que a
gente armazena em uma estrutura dependente de posição:

{"+" ou "00"} {código de país} {código de localidade} {número de telefone}

Assim, para telefonar para alguém em São Paulo, você usaria

"+ 55 11 6262 2626"

e para telefonar para alguém em Londres você usaria

"+ 44 902 4567 8900"

Eu sugiro então que você "complique" a sua estrutura de dados para
armazenar telefone assim:

%telefone = { codigo_pais => 55, # Brazil
              codigo_localidade => 11, # Sampa
              telefone => 6262_2626, # número de telefone
};

E que você armazene isso no seu registro, assim:

%registro = { nome => 'Lucas',
              email => 'mineiro em ...',
              telefone => \%telefone
};

E eu recomendo que você leia sobre como usar referências, um bom
tutorial de DBI, e um pouco mais sobre o básico, por exemplo sobre a
característica de tipagem fraca de Perl.

E por favor pára de pensar como programador Java, que isso não ajuda a
programar perl. ;)

Putamplexos!
-- 
Luis Motta Campos is a DBA,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list