my %IniStruct = ( qr/^MONICACTE RAIZ$/ => { qr/^DEPURACION$/ => qr/^(SI|NO)$/, qr/^DIRBASE$/ => { "EXPREG" => qr/^\/\w+[\/\w]*$/, "VALOR" => "-e ARCHIVO && -d _ && -r _", }, qr/^LOGFILE$/ => { "EXPREG" => qr/^\w+[\/\w]*$/, "VALOR" => "-e ARCHIVO && -f _ && -T _ && -r _ && -w _", }, qr/^MONICASRVADDR$/ => qr/^\d{1,3}\.\d{1,2}\.\d{1,2}\.\d{1,3}$/, qr/^CONNECTIONTIMEOUT$/ => qr/^\d{1,2}$/, qr/^MONICACTE CAT=\w+/ => { qr/^HABILITAR$/ => qr/^(SI|NO)$/, qr/^DEPURAR$/ => qr/^(SI|NO)$/, qr/^CAT=\w+ SUBCAT=\w+$/ => { qr/^HABILITAR$/ => qr/^(SI|NO)$/, qr/^DEPURAR$/ => qr/^(SI|NO)$/, }, qr/^SUBCAT=\w+ (PARAM=[\/\w]+|GPO=\w+)$/ => { qr/^SCRIPT$/ => { "EXPREG" => qr/^\/\w+[\/\w]*$/, "VALOR" => "-e ARCHIVO && -s _ && -r _ && -x _", }, qr/^ARGUMENTOS$/ => qr/.*/, qr/^EXPREG$/ => qr/.*/, }, }, }, ); my $CfgFileOb = new Config::IniFiles( -file => $ARGV[0] ); my ($RegExpRaiz, $Valor) = each(%IniStruct); foreach my $MatchingSection( grep(/$RegExpRaiz/, $CfgFileOb->Sections()) ) { print "$MatchingSection\tCoincide con regexpheader\n"; if (ref( qr($Valor) ) eq "Regexp") { print "regexp\n"; } elsif (ref( $Valor ) eq "HASH" ) { } else { } }