[Cascavel-pm] IDIOMA ERRADO [Was: expressao regular]

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Janeiro 24 08:40:10 PST 2008


Luis Motta Campos wrote:
> my $data;
> open my $file, $filename
>   and do { local $/ = undef; $data = <$file>; }
>   and close $file
>   or die $!
> ;

Bom, quando a gente está errado, tem de admitir. Eu troquei as bolas
aqui, e isso precisa ser reparado.

Este idioma está previsto para funcionar no 5.12, mas AINDA NÃO É PERL
VÁLIDO (até a versão 5.10).

O problema é que as declarações de variáveis feitas com "my()" apenas
são "vistas" pelo interpretador *depois* *que* *o* */statement/*
*termina*. Isso quer dizer que, no idioma acima, $file "não existe" até
ser tarde demais (quando o /statement/ termina, depois dos "and"s e "or
die").

Claro, o perdido aqui deveria parar de ler as especificações de
funcionalidades futuras achando que está lendo documentação. ;)

O melhor approach para isso (segundo o Abigail, do Amsterdam.pm) é

my $data = do {
  open( my $file, $filename ) or die $!;
  local $/;
  my $content = <$file>;
  close $file or die $!;
  return $content;
};

As minhas desculpas pela superposição quântica de funcionalidades.
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