[SP-pm] Variavel somente leitura

Lorn lorn.br em gmail.com
Segunda Abril 28 08:55:38 PDT 2008


Ele não seria uma pessoa melhor, se usasse OO no codigo dele? :P Parece que
a solucão para esse problema é OO, até o codigo que o Luiz mandou  é meio
que uma gambiarra para usar get/set em linguagem funcional :)

Lucas,
use Moose;

2008/4/28 Solli Honorio <shonorio em gmail.com>:

> O detalhe é como vc 'ativa' e 'desativa' a alteração da variável. Eu
> pensei em algo como a criação de um objeto e aí vc controlaria no 'setter'
> (talvez via o caller) quem poderia alterar ou não.
>
> Mas mesmo assim isto parece meio estranho, pois a minha dúvida com relação
> a este problema é se vc não quer que alguém externo as tuas rotinas façam
> esta alteração, ou se é as tuas rotinas mesmo (o que não faz o menor sentido
> pra mim, já que neste contexto vc está programando e pode definir que tipo
> de ação cada rotina executará).
>
> Solli M. Honório
>
> 2008/4/28 Lucas Mateus <lucasmateus.oliveira em gmail.com>:
>
> > Achei esse barato aki, o que acham ?
> >
> > my $host = 'localhost';
> >
> > Internals::SvREADONLY($host => 1);  # lock $host
> > print eval { $host = '10.1.1.1' } ?  "O valor de \$host foi alterado\n"
> > :  "O valor de \$host nao pode ser alterado\n";
> >
> > Internals::SvREADONLY($host => 0);  # unlock $host
> > print eval { $host = '10.1.1.1' } ?  "O valor de \$host foi alterado\n"
> > :  "O valor de \$host nao pode ser alterado\n";
> >
> >
> >
> >
> > 2008/4/28 Luis Motta Campos <luismottacampos em yahoo.co.uk>:
> >
> > Lucas Mateus wrote:
> > > > ## Variavel Global
> > > > my $host = 'localhost';
> > > >
> > > > &func_01;
> > > > &func_02;
> > > > &func_03;
> > > >
> > > > sub func_01 {
> > > >      # aqui não posso sobrescrever $host
> > > > }
> > > >
> > > > sub func_02 {
> > > >      # aqui não posso sobrescrever $host
> > > > }
> > > >
> > > > sub func_03 {
> > > >      # aqui eu devo sobrescrever $host
> > > > }
> > > >
> > > >
> > > > Conforme o exemplo acima, tenho uma váriavel que não pode ser
> > > alterada
> > > > exceto por uma função. Como garantir que isso aconteça, ja que para
> > > esse
> > > > caso não posso utilizar *"use constant"* ?
> > >
> > > O que você está procurando são closures.
> > >
> > > {
> > >  my $host;
> > >
> > >  sub set_host {
> > >    $host = shift;
> > >  }
> > >
> > >  sub get_host {
> > >    return $host;
> > >  }
> > > }
> > >
> > > sub pode_ler_host {
> > >  # recupera a função que dá acesso ao valor de host
> > >  my $host_accessor = shift;
> > >  my $host = $host_accessor->(); # pega $host
> > >  # usa $host
> > > }
> > >
> > > sub pode_escrever_host {
> > >  my $host_accessor = shift;
> > >  my $host = 'localhost';
> > >  $host_accessor->( $host );
> > > }
> > >
> > > sub pode_ler_e_escrever_host {
> > >  my ( $host_getter, $host_setter ) = @_;
> > >  # pega host:
> > >  my $host = $host_getter->();
> > >  $host =~ s/o/a/g; # altera
> > >  $host_setter->( $host );
> > > }
> > >
> > > E aí, pode passar os métodos que acha que o cara pode usar:
> > >
> > > pode_ler_host( \&get_host );
> > > pode_escrever_host( \&set_host );
> > > pode_ler_e_escrever_host( \&get_host, \&set_host );
> > >
> > > Isso, mais pacotes (para você poder importar os métodos dentro dos
> > > pacotes das pessoas que querem ler das tuas variáveis) é o que você
> > > pode
> > > disponibilizar como interface.
> > >
> > > Lembre-se de que isso não é segurança, é apenas separação.
> > >
> > > Se você quer segurança, precisa do Safe::World, e restringir que
> > > bytecodes os programas que você vai rodar podem ou não podem usar.
> > >
> > > Espero que isso te ajude.
> > > Putamplexos!
> > > --
> > > Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
> > > Perl fanatic evangelist, and amateur {cook, photographer}
> > >
> > > _______________________________________________
> > > SaoPaulo-pm mailing list
> > > SaoPaulo-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > >
> >
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
>
>
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Lindolfo "Lorn" Rodrigues
- www.slackwarezine.com.br
- http://lornlab.org
- http://sao-paulo.pm.org
use Catalyst;
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20080428/a9803bf1/attachment-0001.html 


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