[Cascavel-pm] Ler arquivo - ultimas linhas

Luis Motta Campos luismottacampos em yahoo.co.uk
Sábado Setembro 1 06:55:37 PDT 2007


On Friday 31 August 2007 23:05, Nelson Ferraz wrote:
> >>> Pessoal.. tem como eu ler as 3 ultimas linhas de um arquivo?? :D
> >
> > system ("tail -3 arquivo");
>
> Rafael,
>
> Tem dois erros aí:
>
> 1) system não retorna os valores do programa externo; para ler o
> resultado você precisaria usar backticks:
>
> 	my @result = `tail -n 3 arquivo`;

  Argh. Funciona, mas é feio.
  Tente usar open para a mesma coisa:

  open my $programa, '<', '/caminho/para/programa|'
    or die $!;
  # $programa é um filehandle, leia a saída do seu programa daqui
  close $programa or die $!;

  Isso é mais elegante e permite tratar melhor os erros, e ainda permite que 
você leia a saída do programa em "parcelas" (com sysread(), por exemplo). 
Para que você quer ler a saída do programa em "prestações"? Bom, se você 
tiver uma saída muito grande, ler à prestação pode economizar MUITA 
memória...

> 2) você deve evitar usar chamadas para o sistema (system e backticks)
> quando você pode resolver seu problema em perl.

  Tem todo o meu apoio! Não existe um módulo para fazer 
seja-lá-o-que-você-quer?

> Na verdade o #2 é mais um alerta do que um erro. Você pode fazer da
> maneira como sugeriu, mas existem soluções melhores.

  Onde você leu "soluções melhores", leia "Soluções...":

  Mais baratas
  Mais simples
  Mais elegantes
  Mais fáceis de manter
  Mais fáceis de extender
  Mais rápidas
  Mais rentáveis
  
  Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


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