Página 1 de 1

Simplificar eliminación espacios en valores hash

NotaPublicado: 2013-11-29 08:55 @413
por danimera
Hola, ¿podría resumir esta función en Perl?

Es para eliminar los espacios al final de cada elemento de un hash

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $key(keys %$dataF){
  2.         $dataF->{$key} =~ s/\s+$//g;
  3. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Quería dentro de un map{}, o si ya hay alguna expresión algo más rápida para hacerlo o por lo menos en una sola línea de código o más automatizada...

Es que eso procesará como cien mil registros dentro de un bloque, y los hash pueden contener N número de llaves...

Re: Simplificar eliminación espacios en valores hash

NotaPublicado: 2013-11-29 10:39 @485
por explorer
Puedes aplicar un map de forma directa, porque values() devuelve los valores del hash en forma de alias, así que cualquier modificación de esos valores se traduce en la modificación de los valores del hash.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use feature 'say';
  3. use Data::Dumper;
  4.  
  5. %x = (a => "1  ", b => "a  ", c => "%    ");
  6. say Dumper \%x;
  7.  
  8. map { s/\s+$// } values %x;
  9.  
  10. say Dumper \%x;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si los valores son números, se puede cambiar la expresión regular por un sencillo "0 + $_".

Más información en perldoc -f values

Re: Simplificar eliminación espacios en valores hash

NotaPublicado: 2013-11-29 12:02 @543
por danimera
Gracias, explorer, me funcionó perfecto. Yo había intentado algo así, pero no tuve en cuenta de usar el término values() antes del hash ¡¡ Gracias !!