[SP-pm] Substituicoes balanceadas

Luis Motta Campos monsieur_champs em yahoo.com.br
Terça Abril 18 07:09:34 PDT 2006


Gabriel Vieira wrote:
> La vai a gambiarra x))

   Gambiarra, mesmo!
   Como você vai tratar se ao invés de "abc" o texto contiver montes de 
"%P1%"??
   E, muito mais importante: depois de um certo grau de complexidade, 
como você vai conseguir indicar onde existe um '{' sem o correspondente '}'?
   É este tipo de coisa que detona a minha profissão... depois, eu fico 
5 dias para tratar todas as exceções e fazer este treco funcionar com 
limitações...
   Pelo menos uma vez, vamos resolver um problema prá valer, por favor??


> --------------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
>>


-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  Luis Motta Campos is Software Engineer, Oracle OCP/DBA, Un*x
  Sysadmin, Member of {Lisbon,São Paulo,Cascavel,Brasil,London}
  Perl Mongers and Perl Fanatic Evangelist
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

		
_______________________________________________________ 
Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. 
http://br.info.mail.yahoo.com/


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