<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">2008/4/28 Lucas Mateus &lt;<a href="mailto:lucasmateus.oliveira@gmail.com">lucasmateus.oliveira@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;">
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 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;">

<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">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><br clear="all"><br>-- <br>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa