hola,

il titolo fa un pò paura ... ma è da stamani che ci lotto e vorrei vedere una luce in fondo al tunnel

Come prima cosa posto il codice, cosi potete insultarmi liberamente
codice:
sub StartIp2Name()
{
    ($fake, $fake, $fake, $fake, $fake, $currentYear, @fake) = localtime();
    $currentYear += 1900;

    # Open portalauth.log logfile
    open CPLF, "/usr/sbin/clog /var/log/portalauth.log|" || die "can't access portalauth log file\n";
    
    # Loop captive portal log file
    while (<CPLF>)
    {
        # Rimuove l'EOL dalla riga
        chomp;
        
        # Mar 27 11:25:50 firewall logportalauth[506]: LOGIN: computering, 00:a0:d1:be:4a:2e, 10.0.1.191
        ($month,$day,$time,$hostname,$process,$action,$user,$macaddress,$ip,@rest)=split;

        # Pulisce l'azione
        $action =~ s/:$//;
        
        # Verifica che la riga riguardi l'autenticazione
        next if (not $process =~ /logportalauth/);
        next if (not $action =~ /LOGIN|LOGOUT|TIMEOUT/);

        # Rimuove i : e le , dal testo
        $user =~ s/,$//;
        $ip =~ s/,$//;
        $timestamp = str2time("$currentYear/$month2dec{$month}/$day $time");
        
        # Imposta il tipo in base all'azione
        if ($action eq "LOGIN")
        {
            $type = 'start';
        }
        else
        {
            $type = 'end';
        }

        # Aggiunge l'elemento
        $authList{$ip}{$user}{$timestamp} = $type;        
    }
    
    # Close log file
    close CPLF;
    
    while (($ip, $usersRef) = each(%authList))
    {
        print "$ip:\n";
        
        while (($user, $timestampsRef) = each(%{$usersRef}))
        {
            print "\t$user\n";
            
            $timestamps = %{$timestampsRef};
            
            foreach $timestamp (sort { $a <=> $b} keys %{$timestampsRef})
            {
                print $timestamp . "\n";
                print $timestamps . "\n";
                print $timestamps{$timestamp} . "\n";
            }
        }
    }
}
Questo codice non fa altro che aprire un file che contiene delle righe di log tipo
codice:
Mar 27 16:38:32 gateway logportalauth[482]: LOGIN: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
Mar 27 16:38:36 gateway logportalauth[482]: LOGOUT: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
Mar 27 16:38:40 gateway logportalauth[482]: TIMEOUT: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
A me interessa organizzare questi dati in una gerarchia del tipo
HASH[ip] -> HASH[username] -> HASH[timestamp] -> type

"credo" che la struttura la salvi correttamente, ma come la leggo???

quello che mi esce fuori è qualcosa tipo
codice:
10.0.1.191:
        soluzioni
1238168312
1/8
detto tutto questo, premetto che il perl non lo uso da qualcosa come 6 anni e, anche quando lo usavo, avevo un cattivo rapporto

( basta notare la prima riga del codice che ho postato per capirlo )

non capisco perché nel ciclo interno, quando mi ciclo i vari timestamp, non riesco a leggere il valore associato

qualcuno resce ad illuminarmi