<span style="font-family: courier new,monospace;">&gt; Mas mesmo assim isto
parece meio estranho, pois a minha dúvida com relação a este problema é
se vc &gt; não quer que alguém externo as tuas rotinas façam esta alteração,
ou se é as tuas rotinas mesmo (o &gt; que não faz o menor sentido pra mim,
já que neste contexto vc está programando e pode definir que &gt; tipo de
ação cada rotina executará).<br>
<br>
Solli, aceite a afirmação: isso é necessário.<br>
<br>
<br>
<br>
&gt; </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>&gt; 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 &gt; o Luiz mandou&nbsp;
é meio que uma gambiarra para usar get/set em linguagem funcional :)<br>
&gt; Lucas,<br>

&gt; 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 &lt;<a href="mailto:lorn.br@gmail.com">lorn.br@gmail.com</a>&gt;:<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&nbsp; é 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 &lt;<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>&gt;:<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 &#39;ativa&#39; e &#39;desativa&#39; a alteração da variável. Eu pensei em algo como a criação de um objeto e aí vc controlaria no &#39;setter&#39; (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 &lt;<a href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>&gt;:<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 = &#39;localhost&#39;;<br>
<br>
<span>Internals</span>::SvREADONLY($host =&gt; 1);&nbsp; # lock $host<br>


print eval { $host = &#39;<a href="http://10.1.1.1" target="_blank">10.1.1.1</a>&#39; } ?&nbsp; &quot;O valor de \$host foi alterado\n&quot; :&nbsp; &quot;O valor de \$host nao pode ser alterado\n&quot;;<br>
<br>
 <span>Internals</span>::SvREADONLY($host =&gt; 0);&nbsp; # unlock $host<br>
print eval { $host = &#39;<a href="http://10.1.1.1" target="_blank">10.1.1.1</a>&#39; } ?&nbsp; &quot;O valor de \$host foi alterado\n&quot; :&nbsp; &quot;O valor de \$host nao pode ser alterado\n&quot;;<br><br><br><br><br><div class="gmail_quote">



2008/4/28 Luis Motta Campos &lt;<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank">luismottacampos@yahoo.co.uk</a>&gt;:<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>
&gt; ## Variavel Global<br>
&gt; my $host = &#39;localhost&#39;;<br>
&gt;<br>
&gt; &amp;func_01;<br>
&gt; &amp;func_02;<br>
&gt; &amp;func_03;<br>
&gt;<br>
&gt; sub func_01 {<br>
&gt; &nbsp; &nbsp; &nbsp;# aqui não posso sobrescrever $host<br>
&gt; }<br>
&gt;<br>
&gt; sub func_02 {<br>
&gt; &nbsp; &nbsp; &nbsp;# aqui não posso sobrescrever $host<br>
&gt; }<br>
&gt;<br>
&gt; sub func_03 {<br>
&gt; &nbsp; &nbsp; &nbsp;# aqui eu devo sobrescrever $host<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; Conforme o exemplo acima, tenho uma váriavel que não pode ser alterada<br>
&gt; exceto por uma função. Como garantir que isso aconteça, ja que para esse<br>
</div></div>&gt; caso não posso utilizar *&quot;use constant&quot;* ?<br>
<br>
O que você está procurando são closures.<br>
<br>
{<br>
 &nbsp;my $host;<br>
<br>
 &nbsp;sub set_host {<br>
 &nbsp; &nbsp;$host = shift;<br>
 &nbsp;}<br>
<br>
 &nbsp;sub get_host {<br>
 &nbsp; &nbsp;return $host;<br>
 &nbsp;}<br>
}<br>
<br>
sub pode_ler_host {<br>
 &nbsp;# recupera a função que dá acesso ao valor de host<br>
 &nbsp;my $host_accessor = shift;<br>
 &nbsp;my $host = $host_accessor-&gt;(); # pega $host<br>
 &nbsp;# usa $host<br>
}<br>
<br>
sub pode_escrever_host {<br>
 &nbsp;my $host_accessor = shift;<br>
 &nbsp;my $host = &#39;localhost&#39;;<br>
 &nbsp;$host_accessor-&gt;( $host );<br>
}<br>
<br>
sub pode_ler_e_escrever_host {<br>
 &nbsp;my ( $host_getter, $host_setter ) = @_;<br>
 &nbsp;# pega host:<br>
 &nbsp;my $host = $host_getter-&gt;();<br>
 &nbsp;$host =~ s/o/a/g; # altera<br>
 &nbsp;$host_setter-&gt;( $host );<br>
}<br>
<br>
E aí, pode passar os métodos que acha que o cara pode usar:<br>
<br>
pode_ler_host( \&amp;get_host );<br>
pode_escrever_host( \&amp;set_host );<br>
pode_ler_e_escrever_host( \&amp;get_host, \&amp;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>&quot;o animal satisfeito dorme&quot;. - 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 &quot;Lorn&quot; 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>