[Cascavel-pm] Duvida sobre variaveis

Igor Sutton igor.sutton em gmail.com
Quinta Junho 8 07:19:48 PDT 2006


Se você utilizar placeholders ao invés de compor sua query, o Perl fará isso
prá você.

<code>
my $stmt = $dbh->prepare(qq{INSERT INTO table VALUES (?)}) or die
$dbh->error; # acho que é este o método de erro, pode estar errado :P

my $str = "lala\nlele\nlili";
</code>

$stmt->execute($str) or die $dbh->error; # denovo.

On 6/8/06, Antonio Carlos I. Paes <lists em xms.com.br> wrote:
>
> Calma, ta ficando simples hehe
> Eu preciso de na verdade uma barra antes de cada barra, para que o mysql
> insira direito na tabela...
> Se mandar eu inserir '\\string', sera inserido na tabela '\string'...
>
> Mas nao entendi muito bem essa jogada das variaveis, eu tenho o array
> declarado la em cima:
> my ($month, $day, $hour, $hostname, $daemon, @mesg) = @ARGV;
>
> Mesmo utilizando a forma abaixo ele me da erros declaracao:
> my ($mesg = "@mesg") =~ s/\\/\\\\/;
>
> On Thursday 08 June 2006 09:57, Eden Cardim wrote:
> > On 6/8/06, Antonio Carlos I. Paes <lists em xms.com.br> wrote:
> > > Lista,
> > >
> > >         Surgiu outra duvida a respeito de variaveis,
> > >
> > > Seguindo o conselho, estou usando strict e warnings, mas ele me gera
> > > essas mensagens:
> > > "my" variable $mesg masks earlier declaration in same scope at
> > > ./syslog2db.pl line 48.
> > > "my" variable $mesg masks earlier declaration in same scope at
> > > ./syslog2db.pl line 49.
> > > Global symbol "$mesg" requires explicit package name at ./syslog2db.pl
> > > line 57.
> > > Execution of ./syslog2db.pl aborted due to compilation errors.
> > >
> > > O codigo abaixo representa essas linhas:
> > >   # $mesg
> > >   if (@mesg) {
> > >     my $mesg = "@mesg";
> > >     my $mesg =~ s/\\/\\\\/g;
> > >     my $mesg = $dsn->quote("$mesg");
> > >   }
> > >   else { return; }
> >
> > Bem, você está re-declarando o escalar $mesg 2 vezes, e não está
> > declarando o array @mesg, por isso os avisos na compilação. Use o my
> > na primeira aparição da variável apenas.
> >
> > > Pergunto: Nao ha uma forma mais facil de se definir tudo isso numa
> linha
> > > so?
> >
> > Não, mas dá pra fazer em duas:
> > my($mesg = "@mesg") =~ s/\\/\\\\/g;
> > $mesg = $dsn->quote("$mesg");
> >
> > > Como o Perl interpreta esse tipo de situacao, onde a variavel e'
> > > substituida por ela mesmo.
> >
> > Como qualquer outra linguagem, o lado direito da expressão de
> > atribuição é avaliado primeiro na pilha.
> >
> > > Obs.: Utilizei o "s/\\/\\\\/g" para "escapar" as barras (\), o quote()
> > > nao me fez isso...
> >
> > se você tirar as aspas de "$mesg", o perl não vai interpolar as barras
> > e você não vai precisar as barras e o código final vai ficar assim:
> >
> > my $mesg = $dsn->quote("@mesg");
> >
> > bem mais simples né? ;)
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>



-- 
Igor Sutton Lopes
http://www.izut.com/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20060608/c4008723/attachment.html 


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