[Cascavel-pm] Descartar Linha arquivo

Nelson Ferraz nferraz em gmail.com
Quarta Abril 28 06:59:43 PDT 2010


>         open(FILE,"<$ar") or die "Can't create file\n";
>         my $linha =<FILE>;    -----> descarta
>         $linha=<FILE>;        -----> descarta
>         $linha =<FILE>;        -----> descarta
>         $linha=<FILE>;      -----> descarta
>         while (<FILE>)
>          {
>                 my ( $t1, $t2, $t3) =( split /\s/ )[1, 2, 3];
>           }
>
>         close (FILE);

Esta é uma maneira correta de se fazer -- não é particularmente
elegante, mas é correta. (E não conheco um idioma mais apropriado).

Se o arquivo for pequeno, e você puder colocá-lo como uma array, você
pode simplesmente usar o slice apropriado.

for (@file[3..$#file]) {
   # ...
}

Você pode tratar um arquivo como um array sem colocá-lo inteiro na
memória, usando o Tie::File. Mas suspeito que seja menos eficiente do
que simplesmente saltar as linhas iniciais.

> OBS: Esse jeito de abrir arquivo esta correto?? é o jeito mais eficiente??

É melhor usar o open com três parâmetros, que cria uma variável léxica
ao invés de um filehandle global:

    open my $fh, '<', "$ar" or die "Can't read file\n";
    while ( <$fh> ) {
        # ...
    }
    close $fh;

Imagine se qualquer módulo que você usa tivesse a bela idéia de usar o
filehandle <FILE>, que é global... este é o problema que o open com
três parâmetros procura evitar.


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