[Cascavel-pm] uso de eval com Win32::Console
Alceu R. de Freitas Jr.
glasswalk3r em yahoo.com.br
Quinta Junho 30 14:05:00 PDT 2005
Olá monges,
Eu fiz um programa para rodar no console e gostaria de
tornar configurável as cores usadas no mesmo. Para
isso eu criei um arquivo de configuração aonde o
usuário poderia escolher cores como:
# BLACK
# BLUE
Isso vai acabar parando numa chave de um hash.
Posteriormente eu queria fazer algo como:
$chatconfig{char_color} =
'$FG_'.$chatconfig{char_color};
$chatconfig{bg_color} = '$BG_'.$chatconfig{bg_color};
já que $FG_BLUE é uma variável importada do módulo
Win32::Console que me devolve um número. Como eu
preciso utilizar o número para configurar a cor do
terminal:
my $console = new Win32::Console(STD_OUTPUT_HANDLE);
$console->Attr( $chatconfig{char_color} |
$chatconfig{bg_color} );
para obter o valor da variável do pacote
Win32::Console eu utilizei o eval:
sub color_code {
my $var = shift;
return ( eval "$var" );
}
$chatconfig{char_color} = color_code(
$chatconfig{char_color} );
mas isso não funciona da forma que eu gostaria:
Variable "$FG_BLUE" is not imported at (eval
7)[chat.pl:424] line 2.
eval '$FG_BLUE
;' called at chat.pl line 424
main::color_code('$FG_BLUE') called at chat.pl
line 41
main::(chat.pl:43): $chatconfig{bg_color} =
'$BG_'.$chatconfig{bg_color};
DB<2> x $chatconfig{char_color}
0 undef
O interessante é que um teste rápido na linha de
comando me retorna justamente o que eu quero:
C:\>perl -MWin32::Console -e "$test = 'BLUE'; $new =
'$FG_'.$test
; $new2 = eval ( $new.'' ); print $new2"
1
Aonde estou errando?
Obrigado!
[]'s
Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r em yahoo.com.br
http://www.imortais.cjb.net
-----------------------------------------------------------------------
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1
_______________________________________________________
Yahoo! Acesso Grátis - Internet rápida e grátis.
Instale o discador agora! http://br.acesso.yahoo.com/
Mais detalhes sobre a lista de discussão Cascavel-pm