[SP-pm] Transformar 'path directory' em hash

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Junho 14 00:00:08 PDT 2007


On Jun 13, 2007, at 7:05 PM, Solli Honorio wrote:
> Pessoal,
>
> Tem alguma sugestão, quem sabe um Golf, para transformar um path, / 
> var/log/syslog por exemplo, em um hash {var}{log}{syslog}, sem ser  
> via uma função recursiva ?
>

   Solli,

   Segundo o D. Knuth, toda função recursiva pode ser transformada  
numa função iterativa com o uso de uma pilha. (e eu acho que alguém  
antes dele disse a mesma coisa, talvez tenha sido o E. Dijkstra...

   De qualquer forma, você pode usar um eval:

   sub path2hashref {
     my $path = shift;
     my $hash;
     $hash = eval '$hash->' . (join '', map "{$_}", split qr{/},  
$path ) . ' = q{.};';
     die if $@; # propaga o erro, quem chamou isto que se vire ;-)
     return $hash;
   }

   Mas eu não ia gostar nada de manter um programa de computador com  
uma coisa destas nele... use o módulo do Igor, que é mais simples de  
manter... ;-)

   Substitua "eval" por "print" e você vai ver que eu estou criando o  
código para o hash "on-the-fly".
   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




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