<span style="font-family: courier new,monospace;">> 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á).<br>
<br>
Solli, aceite a afirmação: isso é necessário.<br>
<br>
<br>
<br>
> </span>Que tal usar lvalues?<br>
<br>
Eden, opnião particular, é uma boa opção.<br>
<span style="font-family: courier new,monospace;"><br>
<br>
<br>
</span>> 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 :)<br>
> Lucas,<br>
> use Moose;<br>
<span style="font-family: courier new,monospace;"><br>
Lorn, na sua opnião pq OO seria melhor opção ?<br><br><br></span><br><div class="gmail_quote">2008/4/28 Lorn <<a href="mailto:lorn.br@gmail.com">lorn.br@gmail.com</a>>:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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 :)<br><br>Lucas,<br>
use Moose;<br><br><div class="gmail_quote">2008/4/28 Solli Honorio <<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>>:<div><div></div><div class="Wj3C7c"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<span style="font-family: courier new,monospace;">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.<br>
<br>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á).<br>
<br>Solli M. Honório<br></span><br><div class="gmail_quote"><div>2008/4/28 Lucas Mateus <<a href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>>:<br></div>
<div><div></div><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Achei esse barato aki, o que acham ?<br>
<br>
my $host = 'localhost';<br>
<br>
<span>Internals</span>::SvREADONLY($host => 1); # lock $host<br>
print eval { $host = '<a href="http://10.1.1.1" target="_blank">10.1.1.1</a>' } ? "O valor de \$host foi alterado\n" : "O valor de \$host nao pode ser alterado\n";<br>
<br>
<span>Internals</span>::SvREADONLY($host => 0); # unlock $host<br>
print eval { $host = '<a href="http://10.1.1.1" target="_blank">10.1.1.1</a>' } ? "O valor de \$host foi alterado\n" : "O valor de \$host nao pode ser alterado\n";<br><br><br><br><br><div class="gmail_quote">
2008/4/28 Luis Motta Campos <<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank">luismottacampos@yahoo.co.uk</a>>:<div><div></div><div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div>Lucas Mateus wrote:<br>
> ## Variavel Global<br>
> my $host = 'localhost';<br>
><br>
> &func_01;<br>
> &func_02;<br>
> &func_03;<br>
><br>
> sub func_01 {<br>
> # aqui não posso sobrescrever $host<br>
> }<br>
><br>
> sub func_02 {<br>
> # aqui não posso sobrescrever $host<br>
> }<br>
><br>
> sub func_03 {<br>
> # aqui eu devo sobrescrever $host<br>
> }<br>
><br>
><br>
> Conforme o exemplo acima, tenho uma váriavel que não pode ser alterada<br>
> exceto por uma função. Como garantir que isso aconteça, ja que para esse<br>
</div></div>> caso não posso utilizar *"use constant"* ?<br>
<br>
O que você está procurando são closures.<br>
<br>
{<br>
my $host;<br>
<br>
sub set_host {<br>
$host = shift;<br>
}<br>
<br>
sub get_host {<br>
return $host;<br>
}<br>
}<br>
<br>
sub pode_ler_host {<br>
# recupera a função que dá acesso ao valor de host<br>
my $host_accessor = shift;<br>
my $host = $host_accessor->(); # pega $host<br>
# usa $host<br>
}<br>
<br>
sub pode_escrever_host {<br>
my $host_accessor = shift;<br>
my $host = 'localhost';<br>
$host_accessor->( $host );<br>
}<br>
<br>
sub pode_ler_e_escrever_host {<br>
my ( $host_getter, $host_setter ) = @_;<br>
# pega host:<br>
my $host = $host_getter->();<br>
$host =~ s/o/a/g; # altera<br>
$host_setter->( $host );<br>
}<br>
<br>
E aí, pode passar os métodos que acha que o cara pode usar:<br>
<br>
pode_ler_host( \&get_host );<br>
pode_escrever_host( \&set_host );<br>
pode_ler_e_escrever_host( \&get_host, \&set_host );<br>
<br>
Isso, mais pacotes (para você poder importar os métodos dentro dos<br>
pacotes das pessoas que querem ler das tuas variáveis) é o que você pode<br>
disponibilizar como interface.<br>
<br>
Lembre-se de que isso não é segurança, é apenas separação.<br>
<br>
Se você quer segurança, precisa do Safe::World, e restringir que<br>
bytecodes os programas que você vai rodar podem ou não podem usar.<br>
<br>
Espero que isso te ajude.<br>
<div><div></div><div>Putamplexos!<br>
--<br>
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,<br>
Perl fanatic evangelist, and amateur {cook, photographer}<br>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div></div></div><br>
<br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div></div></div><font color="#888888"><br><br clear="all"><br>-- <br>"o animal satisfeito dorme". - Guimarães Rosa
</font><br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div></div></div><font color="#888888"><br><br clear="all"><br>-- <br>Lindolfo "Lorn" Rodrigues<br>
- <a href="http://www.slackwarezine.com.br" target="_blank">www.slackwarezine.com.br</a><br>
- <a href="http://lornlab.org" target="_blank">http://lornlab.org</a><br>- <a href="http://sao-paulo.pm.org" target="_blank">http://sao-paulo.pm.org</a><br>use Catalyst;
</font><br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div><br>