[SP-pm] Substituicoes balanceadas

Gabriel Vieira gabriel.vieira em gmail.com
Terça Abril 18 15:18:58 PDT 2006


Legal :D

+ legivel hehe

abraços,

Gabriel Vieira

- Membro Sociedade Perl Brasil
http://www.perl.org.br/
- dsgX Network Solutions
http://www.dsgX.org/
----- Original Message ----- 
From: "Roberto Maluhy Junior" <maluhy em gmail.com>
To: <saopaulo-pm em mail.pm.org>
Sent: Tuesday, April 18, 2006 3:32 PM
Subject: Re: [SP-pm] Substituicoes balanceadas


Ola Gabriel,

Mais uma senhora gambiarra para salvar minha vida. Gratia!
Eu fiquei quebrando a cabeca com o bixo e tambem acho que consegui uma
solucao, melhor, gambiarrinha, que parece funcionar...ai vai:
------
$begin = "<BEGIN>";
$end = "<END>";
$achave = "<ABRE___CHAVE>";
$fchave = "<FECHA___CHAVE>";
1 while ($var =~ s/\{([^{}]*)\}/&substituicao/egsm);
sub substituicao {
  $match = "$achave$1$fchave";
  $match =~ s/\$([^\$]*)\$/$begin$1$end/g;
  return $match;
}
$var =~ s/\$([^\$]*)\$/$begin$1$end/g;
$var =~ s/$achave/\{/g;
$var =~ s/$fchave/\}/g;
------
Obrigado por mais estas dicas importantes implicitas no seu codigo.

Abracos,
Roberto

On 4/18/06, Gabriel Vieira <gabriel.vieira em gmail.com> wrote:
> La vai a gambiarra x))
>
> --------------8<-------------
> my $var = "abc abc \$abc\$ abc \$abc\$\$abc\$ \$abc\{\$abc\{abc\}\$ 
> abc\}\$
> abc";
> print &organiza($var);
>
> sub organiza{
>  my $var = &substitui(shift);
>  sub substitui{
>          my $shift = shift;
>          $shift =~ 
> s/\{((\w|\s|\$|\%)+)\}/"%P1%".&substitui($1)."%P2%"/xegg
> while <$shift =~ /\{([^\$]+)\}/>;
>          $shift =~ s/\$(.+?)\$/<BEGIN>$1<END>/g;
>          return $shift;
>  }
>  $var =~ s/%P1%/{/g;
>  $var =~ s/%P2%/}/g;
>  return $var;
> }
> -------------->8------------
>
> Bom... funciona ne :D heheh
>
> Abraços,
>
> Gabriel Vieira
>
> - Membro Sociedade Perl Brasil
> http://www.perl.org.br/
> - dsgX Network Solutions
> http://www.dsgX.org/
> ----- Original Message -----
> From: "Roberto Maluhy Junior" <maluhy em gmail.com>
> To: <saopaulo-pm em mail.pm.org>
> Sent: Monday, April 17, 2006 5:01 PM
> Subject: Re: [SP-pm] Substituicoes balanceadas
>
>
> Ola Novamente,
>
> Estou com alguma, para não dizer muita, dificuldade com uma
> substituição balanceada e caso vocês possam me ajudar, ficarei muito
> grato.
>
> O problema é o seguinte:
> Suponha $a = "abc abc \$abc\$ abc \$abc\$\$abc\$ \$abc\{\$abc
> \{abc\}\$ abc\}\$ abc";
>
> Gostaria de detectar, ou melhor, substituir "inicios" e "finais" de
> $'s por <BEGIN> e <END>, respectivamente, mas com uma condição de
> hierarquia baseada na presença de chaves, assim, $a ficaria:
> abc abc <BEGIN>abc<END> abc <BEGIN>abc<END><BEGIN>abc<END>
> <BEGIN>abc\{<BEGIN>abc \{abc\}<END> abc\}<END> abc
>
> Isso quer dizer que os $'s dentro de chaves não têm nada a ver com os
> que estão fora das chaves, e ainda pode haver múltiplas chaves uma
> dentro da outra; ou seja, é proibido ocorrer <BEGIN> ... \{  ...
> <END>.
>
> Como faço isso? Não sei nem por onde começar.
>
> Abraços,
> Roberto
>
> On 2/8/06, Wendel Scardua <wendelscardua em gmail.com> wrote:
> > Pra mim o "python" é só pra "disfarçar" (salvei o código em x.pl , e
> > rodei via "perl x.pl" )
> >
> > [spoiler? sei lá]
> >
> > Aquele "open s,etcetera..." na verdade está executando uma
> > substituição ( s,foo,bar, ) e o resultado da substituição (suponho q
> > seja 0, pois houve 0 substituições) é o 1º parâmetro do open . O
> > problema é que não vejo o segundo parâmetro... ou será que pode com 1
> > só ? vou ver a documentação... rs... :-)
> >
> > [/spoiler? sei lá]
> >
> > On 2/8/06, Gabriel Vieira <gabriel.vieira em gmail.com> wrote:
> > > Ele deu socos no teclado e saiu isso hehe
> > >
> > > tb nao consegui rodar.. talvez pelo 'phynton' ali.. mas tb nao tive
> > > paciencia de analisar o codigo...
> > >
> > > Abraços
> > > ----- Original Message -----
> > > From: "Wendel Scardua" <wendelscardua em gmail.com>
> > > To: <saopaulo-pm em mail.pm.org>
> > > Sent: Wednesday, February 08, 2006 3:42 PM
> > > Subject: Re: [SP-pm] Substituicoes balanceadas
> > >
> > >
> > > Ué... eu rodei o script mas não aconteceu nada :-(
> > > O q eu fiz de errado ?
> > >
> > > obs: é que eu não tô com tempo (e talvez nem tenha capacidade
> > > necessária) pra fazer um "parsing mental" desse script aí... 0 é um
> > > handle válido !? estou vendo um open sem arquivo a ser aberto ?
> > >
> > > obs2: eu chuto que seja um japh, pelo conteúdo do @#, mas nem
> > > lembrava/sabia de um array @#...
> > >
> > > On 2/8/06, Marco Lima <marco.lima em e-via.com.br> wrote:
> > > > Qual eh a trapaça ? e esse naum seria o objetivo !!
> > > >
> > > > Ou seja ... o objetivo naum eh trapacear !!
> > > >
> > > > open s,">#\!/usr/bin/python";;$#=$/;seek s,"m/^j.a.p.h.!$/";:print
> > > > s"#\!/usr/bin/perl",+0;;$_=(<0>)[-2];$/=q*(\w)*;
> > > > @#=(36.32.32.44.101.114.99,107.104.97.32,114.108.80.101,32.101.114.116,104.110.111.97,32.115.116.74.117.32.32.36,);
> > > > $_=join '',eval("$_");*#=*_;$#=~s*^\$(.+)\$$*$1*;print ~~ reverse 
> > > > join
> > > > '
> > > > ',map{s$\$/\$/$\$2\$1$g&&$#}split(' ',$#);
> > > >
> > > > *<=-))
> > > >
> > > > [  ]'s
> > > >
> > > > --
> > > >
> > > > Marco Lima
> > > > J. A. P. H.
> > > >
> > > > marco.lima em e-via.com.br
> > > > mago em rio.pm.org
> > > > mago em cpan.org
> > > >
> > > > Sociedade Perl do Brasil   |   http://www.perl.org.br
> > > > Perl Monks                 |   http://www.perlmonks.org
> > > > Brasil Perl Mongers        |   http://brasil.pm.org
> > > >
> > > > Register Linux User #355235
> > > > Slackware Linux, for the subgenius
> > > >
> > > > "Ninguém é tão grande que não possa aprender, e nem tão pequeno que
> > > > não possa ensinar"
> > > > _______________________________________________
> > > > SaoPaulo-pm mailing list
> > > > SaoPaulo-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > > >
> > >
> > >
> > > --
> > > []s
> > > Wendel
> > > --
> > > "Or think of Perl as a bigger hammer.  It lets you treat everything
> > > like a nail,
> > > and get away with it most of the time.  But sometimes not."
> > > -- Larry Wall
> > > _______________________________________________
> > > SaoPaulo-pm mailing list
> > > SaoPaulo-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > >
> > > _______________________________________________
> > > SaoPaulo-pm mailing list
> > > SaoPaulo-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > >
> >
> >
> > --
> > []s
> > Wendel
> > --
> > "Or think of Perl as a bigger hammer.  It lets you treat everything
> > like a nail,
> > and get away with it most of the time.  But sometimes not."
> > -- Larry Wall
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
>
>
> --
> Roberto Maluhy Jr
>
> Casa Editorial Maluhy & Co.
> http://www.casamaluhy.com
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


--
Roberto Maluhy Jr

Casa Editorial Maluhy & Co.
http://www.casamaluhy.com
_______________________________________________
SaoPaulo-pm mailing list
SaoPaulo-pm em pm.org
http://mail.pm.org/mailman/listinfo/saopaulo-pm 



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