[Cascavel-pm] Duvidas em passar o valor 0 (zero) para uma função.

Rod Za rodzadra em yahoo.com
Quinta Março 10 04:52:22 PST 2005


Luis, valeu meu irmão.

O "0E0" e o "0, but true" são a mesma coisa que o numero 0 (zero) *como valor e string?? E quando
seria mais indicado se utilizar essa conotacão?

Vou testar (re-escrever) o código e posto aqui o resultado.

Quanto a 'breja', cara eu sou louco para ir em um encontro nacional. O problema é que é sempre
fora de mão para mim - eu estou trabalhando ou tenho que trabalhar! :(  Que tal se os encontros
nacionais comecassem a ir para cidades menores (tipo Uberlândia, onde eu moro atualmente??? :)
seria um prazer pagar algumas (ou várias:) 'brejas'.


--- Luis Campos de Carvalho <monsieur_champs em yahoo.com.br> wrote:
> Rod Za wrote:
> > Eu não sei, sempre me confundo como o Perl interpreta o valor 0 (zero)! Me parece q na funcão
> q eu
> > descrevi o valor passado, quando zero, é sempre interpretado como se fosse FALSE (ou mesmo
> NULL) e
> > não como o número 0 (zero)!.
> 
>    É simples de entender: depois de qualquer interpolação, a string '0' 
> se torna indistinguível de undef(), automagicamente. Isto é um erro 
> comum mesmo entre os experts... ;-)
> 
>    Se você precisa mesmo interpolar uma string contendo o valor zero, o 
> melhor meio de fazer é escrever um zero que, ao ser interpretado, se 
> torne "verdadeiro". Assim, por exemplo: "0E0". Ou "0, but true". Ambos 
> serão automagicamente tratados como zero em contextos numéricos, mas 
> serão "verdadeiro" em contextos de string.
> 
>    Claro, isso não pode ser usado na interpolação de comandos SQL por 
> razões muito mais que óbvias... ;-P
> 
> > Luiz quando ao uso de PlaceHolders, a minha verdadeira funcão não é tão simples quanto a q eu
> > apresentei anteriormente, só fiz deste modo para melhor ilustrar o tipo de erro q vem
> acontecendo.
> > A verdadeira funcão faz parte de uma classe e é a seguinte:
> > 
> > <code>
> > sub user_update($%){
> >         my $self = shift;
> >         my %update = @_;
> >         my @keyArray = keys %update;
> >         my @valueArray;
> >         my $return;
> >         foreach(@keyArray){
> >                 push @valueArray, $self->{dbh}->quote($update{$_}) if defined($update{$_});
> >         }
> >         my $sql = "INSERT INTO history (`".join('`,`', em keyArray)."`) VALUES
> > (".join(',', em valueArray).")";
> >         $self->commit if($self->{dbh}->do($sql));
> > }
> > <code>
> 
>    Bom, isso é simples de reescrever. :-)
> 
>    Você está fazendo a segunda coisa mais comum quando se programa DBs 
> com perl: está construindo queries dinamicamente, com quantidade 
> variável de parâmetros.
> 
>    Para resolver o problema, deve construir o query com a quantidade 
> correta de placeholders, ao invés de passar os valores para serem 
> interpolados diretamente no SQL. Depois, pode passar o array de valores 
> a serem inseridos/modificados para o método DBD::execute() apropriado. 
> Assim:
> 
> __PERL__
> sub user_update($%){
>    my $self = shift;
>    my %update = @_;
>    my @keyArray = keys %update;
>    my @valueArray;
>    my $return;
>    #
>    # Não precisa mais usar DBI::quote() contra os valores.
>    # O mecanismo de placeholders se encarrega disso.
>    #
>    my $sql =  'INSERT INTO history ( '. join(', ', @keyArray )
>              .' ) VALUES ( ' . join( ',', '?'x em valueArray ) .')';
>    my $sth = $self->{dbh}->prepare( $sql );
>    my $result = $sth->execute( @valueArray );
>    $self->commit if $result;
> }
> __END__
> 
>    Carinha, eu *não* *testei* este código, em absoluto.
>    *Certamente* existem pequenas correções que você precisa fazer para 
> que ele execute corretamente (sintaxe, talvez alguma lógica).
> 
>    Ah! Uma última coisa: você paga a cerveja no próximo encontro 
> nacional, tá? ;-)
> 
>    Putamplexos, e bom divertimento!
> -- 
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>   Luis Campos de Carvalho is BSc in Comp Science,
>   PerlMonk [SiteDocClan], Sao Paulo PM Leader,
>   Unix Sys Admin && Certified Oracle DBA
>   http://br.geocities.com/monsieur_champs/
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> 
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
> 


		
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/ 


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