[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