[Cascavel-pm] Várias Variações de Variáveis...

Flavio S. Glock fglock em gmail.com
Quarta Junho 20 09:15:37 PDT 2007


Em 20/06/07, Alceu Rodrigues de Freitas
Junior<glasswalk3r em hotmail.com> escreveu:
>
>  > Date: Wed, 20 Jun 2007 11:45:26 -0300
> > From: fglock em gmail.com
> >
> > O propósito das variáveis léxicas é justamente esconder informação.
> > Desfazer isso é bastante complicado.
> >
> > Para o kp6 (compilador de Perl 6 em Perl 6), eu precisei de um módulo
> > que permitisse a manipulação de variáveis que estão dentro de
> > closures.
> > O resultado ficou feio mas funciona:
> >
> http://svn.pugscode.org/pugs/v6/v6-KindaPerl6/lib/KindaPerl6/Perl5/Pad.pm
>
> Peguei o assunto bem atrasado... mas porque você quer tentar manipular
> variáveis dentro de closures?

Por exemplo, quando o compilador encontra um BEGIN:

 {
  my $a = 1;
  BEGIN { $a = $a + 1 }
 }

Para executar o BEGIN (o BEGIN executa durante a compilação), é necessário:

- criar uma closure para armazenar a variável $a;
- criar uma outra closure dentro desta, para armazenar a soma e atribuição;
- executar o BEGIN - dentro do ambiente em que foi criado;
- quando o BEGIN termina de executar, todas as alterações que o BEGIN
tenha feito em quaisquer variáveis devem ser registradas - aqui é um
dos lugares em que a introspecção é necessária.

Quer dizer, o programa que é realmente compilado fica assim:

 {
  my $a;
  $a = 1;    # isso desaparece depois da otimização
  $a = 2;    # "efeitos colaterais" do BEGIN
 }

> > Estou a procura de idéias de como limpar este código.
> > Preciso que uma característica seja mantida: deve ser escrito em Perl
> > puro - sem usar módulos do CPAN.
>
> Você quiser dizer não utilizando módulos com bindings para outras
> linguagens, como C?

Sim, puro Perl.

> Outra dúvida: o Champs comentou sobre introspecção, mas Perl precisa disso?
> Posso estar com conceitos errados, mas a manipulação da tabela de símbolos
> já não atende isso?

Não, a tabela de símbolos só serve para variáveis globais.
As variáveis "my" são guardadas em uma estrutura diferente.

- Flavio S. Glock


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