<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>
Oi Flávio,<br><br>Comentários abaixo...<br><br>> Date: Wed, 20 Jun 2007 13:15:37 -0300<br>> From: fglock@gmail.com<br>><br>> Por exemplo, quando o compilador encontra um BEGIN:<br>> <br>> {<br>> my $a = 1;<br>> BEGIN { $a = $a + 1 }<br>> }<br>> <br>> Para executar o BEGIN (o BEGIN executa durante a compilação), é necessário:<br>> <br>> - criar uma closure para armazenar a variável $a;<br>> - criar uma outra closure dentro desta, para armazenar a soma e atribuição;<br>> - executar o BEGIN - dentro do ambiente em que foi criado;<br>> - quando o BEGIN termina de executar, todas as alterações que o BEGIN<br>> tenha feito em quaisquer variáveis devem ser registradas - aqui é um<br>> dos lugares em que a introspecção é necessária.<br><br>Seu exemplo é bem simples, talvez não seja o melhor para mostrar o que você precisa. Eu pensei, para esse caso, que você simplesmente poderia usar uma variável global.<br><br>> Não, a tabela de símbolos só serve para variáveis globais.<br>> As variáveis "my" são guardadas em uma estrutura diferente.<br><br>Então... qual o problema de, dentro do bloco BEGIN, computar o necessário e manipular a tabela de símbolos para armazenar esse resultado numa variável global?<br><br>Talvez eu esteja perguntando demais, mas com esse exemplo que você deu eu não consigo imaginar a necessidade de torcer o programa para pegar o valor da variável léxica.<br><br>[]'s<br>Alceu<br><br /><hr />Make every IM count. Download Windows Live Messenger and join the i'm Initiative now. It's free. <a href='http://im.live.com/messenger/im/home/?source=TAGWL_June07' target='_new'>Make it count!</a></body>
</html>