[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