Perl es listo, pero no tanto como para saber el formato de tu fichero.
Hay que darle un poco de ayuda...
Supongamos que tu fichero es de la estructura que muestras: Una palabra, seguida de ':' y luego del valor.
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict;
use warnings;
my %lista;
my ( $clave, $valor );
sub informe {
open( VAR, "fichero.txt" ) or die "ERROR: No pude abrir el fichero.txt: $!\n";
while ( my $linea = <VAR> ) {
if ( ( $clave, $valor ) = $linea =~ /^(\w+):\s*(.+)\s*$/ ) {
$lista{$clave} = $valor;
}
}
close VAR;
}
informe;
foreach ( keys %lista ) {
print $_, " ", $lista{$_};
}
print $lista{Tipo};
$lista{Cantidad}++;
print $lista{Cantidad};
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
- En la línea 10 hacemos un bucle por todo el fichero y vamos leyendo una $linea cada vez
- En la 11, con la ayuda de la expresión regular extraemos la clave y el valor, que está separada por los ':'. Lo que hacemos es que nos quedamos con la primera (^) palabra ((\w+)), seguida de ':', posiblemente algún espacio en blanco (\s*) y nos quedamos con el resto ((.+)), menos los últimos ($) espacios en blanco (\s*)
- De la 20 a 22, pintamos todo lo que hemos conseguido leer del fichero
- En la 26, incrementamos el valor de Cantidad, y luego lo pintamos.
El resultado es:
Using text Syntax Highlighting
Cantidad 7 unidades
Precio 3 €
Tipo color
color
8
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Como ves, al aumentar en uno el valor de '7 unidades', Perl lo pasa de cadena de caracteres a valor numérico. Se encuentra con el 7. Lo incrementa (8) y ese es el nuevo valor de
$lista{Cantidad}. Pero NO '8 unidades'. Lo mismo le pasaría a
$lista{Precio}.