[Cascavel-pm] Duvida sobre variaveis

Antonio Carlos I. Paes lists em xms.com.br
Quinta Junho 8 07:10:46 PDT 2006


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


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