[Cascavel-pm] Sintaxe
Luis Campos de Carvalho
monsieur_champs em yahoo.com.br
Quarta Dezembro 21 12:24:53 PST 2005
--- "Alceu R. de Freitas Jr." escreveu:
> --- Luis Campos de Carvalho escreveu:
> > Opa! Cuidado! Muita hora nessa calma... ;-)
> > Posso escrever
> >
> > $DynaPack::$DynaVar
> >
> > para resolver uma variável dinâmicamente nomeada
> > dentro de um pacote dinâmicamente nomeado. Eu
> > acredito que com /strict/ isso não funciona muito
> > bem (acho que existe uma ou duas mensagens de
> > erro com palavrões especialmente para este caso...).
>
> Eu habilitei "use strict" e o seu programa realmente
> parou de funcionar. :-) Eu mexi nele e cheguei no
> resultado abaixo:
>
> #!/usr/bin/perl
> use warnings;
> use strict;
>
> {
> package PacoteA;
> my $variavel1 = 'Pacote A - Variavel 1';
> my $variavel2 = 'Ainda outra variavel';
> }
>
> {
> package PacoteB;
> my $variavel1 = 'Pacote B - Variavel 1';
> my $variavel2 = 'Outra variavel';
> }
>
> for my $pack ( qw( PacoteA PacoteB ) ){
>
> for my $var ( qw( variavel1 variavel2 ) ){
> print $pack, '::', $var, ' = "',
> ${"$pack::$var"}, '".', "\n";
> }
> }
>
> O resultado foi esse:
>
> "Use of uninitialized value in concatenation (.) or
> string at ./test2 line 20.
> Can't use string ("variavel1") as a SCALAR ref while
> "strict refs" in use at ./test2 line 20."
>
> Eu realmente não tenho certeza se declarei os
> "package"'s de forma correta. Nunca fiz isso.
>
> Eu fiquei curioso e tentei fazer outro teste:
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
> use Fcntl qw(:DEFAULT);
>
> my $package = 'Fcntl';
> my $var = 'O_CREAT';
>
> print "Test 1: \n";
> print $package, '::', $var, "\n";
> print "Test 2: \n";
> print "$package::$var\n";
> print "Test 3: \n";
> print eval "$package::$var";
>
> Tendo como resultado:
> "Test 1:
> Fcntl::O_CREAT
> Test 2:
> Use of uninitialized value in concatenation (.) or
> string at ./test line 14.
> O_CREAT
> Test 3:
> Use of uninitialized value in concatenation (.) or
> string at ./test line 16.
> 512"
>
> > Claro, eu tenho uns poucos usos para este tipo de
> > brincadeira... mas é certamente um recurso
> > interessante para o meu próximo JAPH... ;-)
>
> Acho que usar "::" não vai muito além desse uso.
Devemos muito do nosso sistema de objetos a esta sintaxe.
Claro, definição dinâmica de objetos não é para qualquer um.
Mas não despreze tanto assim... ;-)
Putamplexos!
--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle
_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html
Mais detalhes sobre a lista de discussão Cascavel-pm