[perl] Manejando HASHES

Salvador Ortiz Garcia sog@msg.com.mx
Fri, 4 Aug 2000 16:16:52 -0500 (CDT)


On Fri, 4 Aug 2000, Olivares, Cesar (CORP, Consultant) wrote:

> Qui'hubo RAZA!! o mejor dicho, C'omo est'an todos?
> En la espera de que todos estemos contentos aqu'i les va esta pregunta de
> principiantes con 'Hashes':
> 
> Estoy en un asunto donde leo un directorio; y creo una variable hash.
> 	my @Ls = `ls`;
> 	my %Filegz = ();

Ok, comentarios:

  my %Filegz;
  my @Ls = map { $Filegz{$_} = substr($_,0,-3) if /\.gz$/; $_ } <*>;


El código de arriba lee el directorio y simultaneamente crea @Ls 
con todos los archivos y el HASH %Filegz con los comprimidos, de forma
que:

  print "@Ls";   #Imprime los nombres originales de todos los archivos
  print keys %Filegz;  #Imprime los nombres de los comprimidos
  print values %Filegz #Los mismos nombres sin el '.gz'

Y si quieres hacer algo con ellos:

for(@Ls) {
    if(exists $Filegz{$_}) { #Comprimido
	print "Comprimido original: '$_', sin ext: '$Filegz{$_}'\n";
        # Usa $_ o $Filegz{$_} al gusto ...
    } else {      #Normal
        print "Normal original: '$_'\n";
        # Usa $_ al gusto ...
    }
}

Notas:

No es necesario tus "TRUE" o "FALSE" pues la mera existencia en %Filegz
basta, en estricto sentido el 'exists' en el if se puede omitir.

No uso `ls` puesto que <*> en versiones modernas de perl evita crear
un subproceso adicional, ademas `ls` me regresaria los nombres con "\n"
por lo que me ahorro un 'chomp'.


Saludos

Salvador Ortiz

-- 
El conocimiento incluído es totalmente regalado y como Perl, libre.
--------------------------------------------------------------------------


--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe perl