[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