• Publicidad

Disparar eventos según valores de hash

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Disparar eventos según valores de hash

Notapor jimr1984 » 2018-02-14 10:04 @461

Hola, no sé si corresponde, por favor.

Tengo un problema que me gustaría solucionar también. Es referente a array y listas.

my @cola = qx( exim -bpr | grep \"<\" | awk {\'print \$4'} | cut -d \"<\" -f 2 | cut -d \">\" -f 1 | sort -n | uniq -c | sort -n);

Tengo un listado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
      1 ............
      11 ............
      16 ............
     36 [email protected]
     47 [email protected]
     92 [email protected]
    150 [email protected]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Todos los elementos se guardan en un array llamado COLA.

Lo que me interesa es poder establecer una condición utilizando el primer valor.

Es decir, mi idea es convertir el array en un arreglo hash clave/valor, por ejemplo, clave, 150; valor, '[email protected]'.

Y de esta manera podría establecer un control sobre un elemento "clave":

if "clave >= 500", realizar acción 1

Si existe otra manera más sencilla o si alguien puede guiarme, por favor, gracias.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: Disparar eventos según valores de hash

Notapor explorer » 2018-02-14 15:54 @704

Puedes, primero, hacer la estadística, y luego un bucle para recorrer los valores, y si alguno coincide con el límite, arrancar la alarma.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3.  
  4. my %vista;                                      # hace la estadística
  5.  
  6. for (qx(exim -bpr)) {                           # para todo el informe
  7.     next if !/<(.+?)>/;                         # solo nos interesan las líneas con '<' y '>' y nos quedamos con lo que contengan
  8.  
  9.     $vista{$1}++;                               # recordamos la dirección y sumamos una aparición
  10. }
  11.  
  12. while (my($direccion, $veces) = each %vista) {  # para todas las direcciones vistas
  13.     say "$veces\t$direccion";                   # mostramos $veces que aparece esa $direccion
  14.  
  15.     if ($veces >= 500) {
  16.         # disparar aquí alarma de cola llena por parte de un usuario
  17.  
  18.         ...;
  19.     }
  20. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados