Página 1 de 1

Hashes anidados

NotaPublicado: 2008-12-04 09:53 @453
por Sombrerero_Loco
He decido modificar la pregunta porque no llevaba a ningún lugar.
Pero en vez de aquello, tengo esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Query que queremos que se ejecute, actualmente coge todos los valores que nos interesan y preparamos la conexión
# Hay que cambiar el número de la primera parte de la select con el valor del fichero de control
# donde el número debe de ir $sinc: desactivado para debug---------------------------------------------------->>|::::::::::|
my $sql1 = qq(select service_name, datetime, severity, end_datetime from OPC_SERVICE_LOG where DATETIME between 1227692768 AND $flag_mon_file );
my $sth = $dbh->prepare($sql1) or die "No he podido ejecutar la sentencia\n";

# Preparamos la select entre el tiempo del fichero de control y el tiempo local de la máquina
# my($SERVICE_NAME);
$sth->execute();

# Realizamos el fetch de cada línea de la select y si no tiene tiempo de finalización, lo ponemos a 0, que significa
# que sigue vigente la caída de servicio (hay que definir esto)
while (($service_name,$datetime, $severity, $end_datetime) = $sth->fetchrow_array) {
    if (!$end_datetime) {
        $end_datetime = $datetime
    }
    $serv_status{$service_name}{$severity} = $serv_status{$service_name}{$severity} + ($end_datetime - $datetime);
}

# SOLO PARA DEBUG, IMPRIME TODO LO QUE ME DEVUELVE EL HASH
foreach $service ( keys %serv_status ) {
    print "Servicio $service: \n";
    foreach $severity ( keys %{$serv_status{$service}} ) {
        print "\tSEVERIDAD: $severity VALOR: $serv_status{$service}{$severity}\n";
    }
}

########################################################
#SISTEMA DE "MARCA DE AGUA" Y CRITICIDADES POR SERVICIO#
########################################################

foreach $id (keys (%serv_status)) {
    print "Servicio $id\n";
    foreach $control(@warning) {
        $srvtable{$service_name}{'warning'} = $final{$service_name}{'warning'} + $serv_status{$service_name}{$severity}
    }
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Esto último en sistema de marca de agua, como veis estoy equiparando un valor en el hash
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$srvtable{$service_name}{'warning'}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
a su mismo valor MÁS un valor de otro hash -->
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$final{$service_name}{'warning'} + $serv_status{$service_name}{$severity}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La cuestión, se me queda el PC frito, se tira procesando la vida... y me pregunto ¿es una burrada lo que estoy haciendo? Si no, ¿cómo debo de hacerlo?, porque quiero que me asigne ese valor de ese hash como valor de la key del otro...

¡Gracias!

NotaPublicado: 2008-12-04 14:38 @651
por explorer
Hay errores en la última parte, en el último bucle foreach():
* No usas para nada la variable $id, salvo imprimirle
* No usas para nada la variable $control
* No está claro de dónde viene el valor de $service_name
* No está claro de dónde viene el valor de $severity