a partir de alguma versão recente (5.12 ?) introduziu os named groups. Vc acessa atraves do hash %+ que é uma variavel especial "amarrada" a ultima expressão regular daquele bloco de codigo.<div><br></div><div>criar variaveis é perigoso. se vc tem algo como</div>

<div><br></div><div>$password</div><div><br></div><div>não vai querer isso sobreescrito por</div><div><br></div><div>/(?<password>.+)/</div><div><br></div><div>por isso vc acessa $+{password} o quanto antes, pois a proxima operação de match vai resetar a variavel<br>

<br><div class="gmail_quote">2012/11/26 Nicole <span dir="ltr"><<a href="mailto:bionica2007-perl@yahoo.com" target="_blank">bionica2007-perl@yahoo.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div style="font-size:12pt;font-family:times new roman,new york,times,serif"><div>Oi a todos,<br><br>aproveitando a paciência infinita do Breno...<br><br></div><div>Poderias esclarecer como funciona isto:<br> (?<tag>...) </div>

<div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">e o que acontece então aqui:<br></div><div class="im"><div>"valores agrupados na regex por nome dentro do hash %+. No caso,<br>

acessei o grupo (?<mirna>....) fazendo $+{mirna};"</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif"><br></div></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

Criaste um hash de nome %+ ????
 <br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">É uma variável reservada?</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

Qual o valor que assume $mirna aqui?</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">Na primeira vez que entra no if, $mirna está vazio, não? Como pode ser key do hash %dados assim?</div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

[]'s</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">Nicole Scherer<br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:times new roman,new york,times,serif">

<br></div><div><br></div>  <div style="font-family:times new roman,new york,times,serif;font-size:12pt"> <div style="font-family:times new roman,new york,times,serif;font-size:12pt"> <div dir="ltr"> <font face="Arial"> <hr size="1">

  <b><span style="font-weight:bold">De:</span></b> breno <<a href="mailto:breno@rio.pm.org" target="_blank">breno@rio.pm.org</a>><br> <b><span style="font-weight:bold">Para:</span></b> Perl Mongers Rio de Janeiro <<a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a>> <br>

 <b><span style="font-weight:bold">Enviadas:</span></b> Sábado, 24 de Novembro de 2012 9:45<br> <b><span style="font-weight:bold">Assunto:</span></b> Re: [Rio-pm]
 Comparação de arquivos<br> </font> </div><div><div class="h5"> <br>2012/11/24 Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>>:<br>><br>> Se não for ser muito chato, como faço para seguir a forma abaixo:<br>

><br>><br>>> 2) trocar de abordagem, fazendo seu parser ler linha a linha (sem<br>>> modificar $/) e ir acumulando as linhas até encontrar um símbolo que<br>>> indique nova entrada.<br>><br>> seria algo do tipo:<br>

><br>> while (<$fh>){<br>> if(/primeira linha/){<br>> print $_;<br>> }<br>> elsif (/ultima linha/){<br>> #sair do loop<br>> }<br>> else {<br>> print $_<br>> }<br>> }<br>><br><br>

Algo como (atenção, código não testado):<br><br>---------------8<---------------<br>my %dados = ();<br>my $mirna;<br>my $acumulador;<br><br>while (my $linha = <$fh>) {<br>   if ( $linha =~ m{tag
 magica (?<mirna>\S+)} ) {<br>      $dados{$mirna} = $acumulador if $mirna;<br>      $mirna = $+{mirna};<br>      $acumulador = q();<br>   }<br>   else {<br>      $acumulador .= $linha;<br>   }<br>}<br><br>use DDP; p %dados;<br>

<br>--------------->8---------------<br><br>O que isso faz (ou deveria fazer: já mencionei que não testei?<br>Programar a essa hora da manhã não é meu forte, então favor<br>desconsiderar qualquer besteira):<br><br>1) le o arquivo linha por linha, atribuindo o valor de cada linha a<br>

$linha (sem usar $_)<br>2) sempre que encontrar a tag mágica que separa entradas (estou<br>assumindo que a tag indica um novo registro que pode ser chave do seu<br>hash de dados:<br>2.1) se já estiver com um registro em memória ($mirna), bota os dados<br>

acumulados ($acumulador) dentro do hash;<br>2.2) atribui à $mirna o novo registro encontrado. Note que
 estou<br>usando grupos nomeados na regex, fazendo (?<tag>...) em vez de apenas<br>(...). Isso funciona a partir do 5.10.0 e me permite acessar os<br>valores agrupados na regex por nome dentro do hash %+. No caso,<br>

acessei o grupo (?<mirna>....) fazendo $+{mirna};<br>2.2) zera o acumulador.<br>3) se não encontrar a tag mágica, vai acumulando os dados. Dentro<br>desse 'else' vc pode fazer coisas como "next if $linha =~ /.../" caso<br>

não queira guardar alguma linha, por exemplo.<br>4) Depois do while vc pode inspecionar %dados para saber se está tudo ok.<br><br><br>Entendeu?<br><br>[]s<br><br>-b<br>_______________________________________________<br>Rio-pm mailing list<br>

<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br><br><br> </div></div></div> </div>

  </div></div><br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br>

<br><a href="http://pacman.blog.br">http://pacman.blog.br</a><br>
</div>