<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=windows-1252"
 http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Olá Mantovani!<br>
<br>
Vc poderia me explicar melhor<br>
<br>
Daniel de Oliveira Mantovani escreveu:
<blockquote
 cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
 type="cite">
  <pre wrap="">if( $names =~ m/(?&lt;last_name&gt;\w+) and \w+ \g{last_name}/ ) {
Ele não teria que retornar "Silva Flintstone" e nem ao menos "Silva"
porque dentro do buffer "&lt;foo&gt;" está "Flinstone", logo quando você faz
o backreference  \g{last_name},
você está capturando o buffer "&lt;foo"&gt; que é "Flinstone".
  </pre>
</blockquote>
Até aqui blz!...entendi que foi armazena 'Flintstone' no buffer<br>
<br>
<blockquote
 cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
 type="cite">
  <pre wrap="">
Para o match do seu if ser verdadeiro, você precisa colocar a
backreference no lugar que faça o match, daquele jeito só daria certo
se o buffer fosse Silva.
if ( $names =~ m/(?&lt;last_name&gt;\w+) and \w+ \w+ \g{last_name}/ ) {
    say "I saw $+{last_name}";
}

  </pre>
</blockquote>
É aqui que não estou enxergando o funcionamento da coisa!<br>
Deixa ver se entendi!<br>
O primeito "\w+ " seria [espaço]Wilma[espaço]<br>
O segundo "\w+" seia [espaço]Silva[espaço]<br>
<br>
O que vc faz é tipo de um "ponteiro" para compensar a inserção de mais
uma palavra antes que seja chamado o que está armazena no buffer
\g{last_name}, que no caso é "Flintstone" ??<br>
<br>
Tipo assim, supondo que eu tivesse uma nova string:<br>
my $names = 'Fred Manoel Silva Flinstone and Wilma Manoel Silva
Flinstone';<br>
<br>
eu teria que fazer no mei if :<br>
if ( $names =~ m/(?&lt;last_name&gt;\w+) and <b>\w+ \w+ \w+</b>
\g{last_name}/ ) {<br>
    say "I saw $+{last_name}";<br>
}<br>
<br>
É isto?<br>
<br>
Abraço,<br>
Flávio<br>
<br>
<br>
<br>
<blockquote
 cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
 type="cite">
  <pre wrap="">[]'s


2010/4/25 "Flávio R. Lopes" <a class="moz-txt-link-rfc2396E" href="mailto:flavio.lopes@links.inf.br">&lt;flavio.lopes@links.inf.br&gt;</a>:
  </pre>
  <blockquote type="cite">
    <pre wrap="">Pessoal, estou tendo dificuldade em enxergar o funcionamento deste programa:

use 5.010;
my $names = 'Fred Flinstone and Wilma Flinstone';
if( $names =~ m/(?&lt;last_name&gt;\w+) and \w+ \g{last_name}/ ) {
  say "I saw $+{last_name}";
  }


Se eu alterar a variavel "$names" para:
my $names = 'Fred Silva Flinstone and Wilma Silva Flinstone';

O programa não me retorna mais o sobrenome!!

Como Perl faz esta busca?, ou seja, com o *\w* (que busca tudo) e tendo como
_delimitador_ o "and", ele não teria que me retornar "Silva Flintstone"
??...ou pelo menos "Silva" ??

Alguém pode me ajudar a enteder este código?

Abraço,
Flávio

_______________________________________________
SaoPaulo-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>

    </pre>
  </blockquote>
  <pre wrap=""><!---->


  </pre>
</blockquote>
<br>
</body>
</html>