2012/11/24 Aureliano Guedes <guedes_1...@hotmail.com>: > > Se não for ser muito chato, como faço para seguir a forma abaixo: > > >> 2) trocar de abordagem, fazendo seu parser ler linha a linha (sem >> modificar $/) e ir acumulando as linhas até encontrar um símbolo que >> indique nova entrada. > > seria algo do tipo: > > while (<$fh>){ > if(/primeira linha/){ > print $_; > } > elsif (/ultima linha/){ > #sair do loop > } > else { > print $_ > } > } >
Algo como (atenção, código não testado): ---------------8<--------------- my %dados = (); my $mirna; my $acumulador; while (my $linha = <$fh>) { if ( $linha =~ m{tag magica (?<mirna>\S+)} ) { $dados{$mirna} = $acumulador if $mirna; $mirna = $+{mirna}; $acumulador = q(); } else { $acumulador .= $linha; } } use DDP; p %dados; --------------->8--------------- O que isso faz (ou deveria fazer: já mencionei que não testei? Programar a essa hora da manhã não é meu forte, então favor desconsiderar qualquer besteira): 1) le o arquivo linha por linha, atribuindo o valor de cada linha a $linha (sem usar $_) 2) sempre que encontrar a tag mágica que separa entradas (estou assumindo que a tag indica um novo registro que pode ser chave do seu hash de dados: 2.1) se já estiver com um registro em memória ($mirna), bota os dados acumulados ($acumulador) dentro do hash; 2.2) atribui à $mirna o novo registro encontrado. Note que estou usando grupos nomeados na regex, fazendo (?<tag>...) em vez de apenas (...). Isso funciona a partir do 5.10.0 e me permite acessar os valores agrupados na regex por nome dentro do hash %+. No caso, acessei o grupo (?<mirna>....) fazendo $+{mirna}; 2.2) zera o acumulador. 3) se não encontrar a tag mágica, vai acumulando os dados. Dentro desse 'else' vc pode fazer coisas como "next if $linha =~ /.../" caso não queira guardar alguma linha, por exemplo. 4) Depois do while vc pode inspecionar %dados para saber se está tudo ok. Entendeu? []s -b _______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm