Prueba con esto:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
my $name;
my $param;
my $components;
open CONFIG
, '<kk.txt' or die;
while (<CONFIG>){
next if /^\#/;
if (m/^\[(\S+)\]/) {
$name= $1;
}
elsif (m/^(\S+)/) {
my ($field, $value) = split('=',$_, 2
);
chop($value);
$param->{$field} = $value;
}
else {
next if $name eq "";
push(@{$components}, { name
=> $name, param
=> $param});
$name = $param = undef;
}
}
use Data
::Dumper;
print Dumper
$components;
print $components->[0]->{param
}->{KPIS
}, "\n";
__END__Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La salida es:
- Código: Seleccionar todo
$VAR1 = [
{
'name' => 'paths',
'param' => {
'INDEX' => '1',
'KPIS' => '\'([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\',$DATE=$1,$REQUEST=$2,$USER=$3',
'DIR_BBDD' => '../bbdd/cae/bbdd_*'
}
},
{
'name' => 'TR',
'param' => {
'COMANDO' => '\'"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"\'',
'DIR_BBDD' => '../bbdd/tr'
}
}
];
'([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3
Como ves, sí que se almacena el valor correcto. Otra cosa es lo que te cuenta Data::Dumper. Piensa que Data::Dumper, cuando muestra '\\t' te quiere decir que está guardando dos caracteres: el '\' y el 't'. Si solo mostrara '\t' podríamos confundirlo con un único carácter, el del tabulador horizontal.
Al hacer el último
print, sale el valor real.
Otra cosa... para leer ficheros de configuración de ese tipo, ese problema ya está resuelto
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
use Config
::IniFiles;
my $cfg = Config
::IniFiles->new( -file
=> 'kk.txt' );
foreach my $seccion ($cfg->Sections()) {
print "$seccion\n";
foreach my $parametro ($cfg->Parameters($seccion)) {
print "\t", $parametro, " = ", $cfg->val($seccion, $parametro), "\n";
}
}
__END__Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La salida es:
- Código: Seleccionar todo
paths
INDEX = 1
DIR_BBDD = ../bbdd/cae/bbdd_*
KPIS = '([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3
TR
DIR_BBDD = ../bbdd/tr
COMANDO = '"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"'
PORTAL
DIR_BBDD = ../bbdd/portal
COMANDO = '"scp logcollector:/Informatica/ftp_core_r9/logs/portal/currentProject_".$report{fecha_file_remoto}."* ../bbdd/portal/currentProject.portal.gz"'