• Publicidad

Vaciar una variable matriz o array en Perl

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

Vaciar una variable matriz o array en Perl

Notapor Skull118 » 2013-05-20 14:59 @666

Buenas tardes, maestros de Perl, tengo una duda. ¿Cómo hago para limpiar una variable como esta?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while($x<100){
  2.    my @var1=push(@var1,$valor);
  3. }
  4.  
  5. # aquí hago lo que tengo que hacer
  6.  
  7. # Y aquí necesito borrar la variable algo así como "" o bien volver a setearla con nada
  8.  
  9. my @var1="";
  10.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


De antemano, muchas gracias.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Publicidad

Re: Vaciar una variable matriz o array en Perl

Notapor explorer » 2013-05-20 15:15 @677

No tienes que hacer nada... fíjate que estás declarando la variable @var1 dentro del contexto del while() (con el my()), por lo que, a continuación del bucle, ya no será conocida.

Otra cosa es que quieras que esa variable sea conocida en todo el programa. En ese caso, deberás declararla fuera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @var1;                         # declaración de la variable
  2.  
  3. while ($x<100) {
  4.    push(@var1,$valor);            # guardamos en @var1 el valor de $valor
  5.    $x++;
  6. }
  7.  
  8. undef @var1;                      # indefinimos la variable (la limpiamos)
Coloreado en 0.001 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

Re: Vaciar una variable matriz o array en Perl

Notapor Skull118 » 2013-05-20 17:16 @761

Muchas gracias, explorer, ¡¡ya pude realizar lo que necesitaba, maestro!! Éxitos en todo lo que realices.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Vaciar una variable matriz o array en Perl

Notapor Skull118 » 2013-05-20 17:29 @770

explorer, ¿cómo hago para eliminar elementos de una matriz que cumplan con ciertos parámetros? Suponiendo que tengo una matriz que contiene fechas, llamada @f, la cual recorro con un foreach, pero esta variable posee infinidad de fechas, razón por la cual necesito ir depurándola (por así decirlo), mientras se vaya encontrando cierto parámetro.

Trataré de explicarme en lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $x = 0;
  2. while ( $x < @f ) {
  3.     foreach (@f) {
  4.         print($_);
  5.         if ($_ =~ /\Q"01/ 01 / 2013 "\E/){
  6.           ##AQUÍ NECESITARÍA BORRAR EL DATO QUE YA ENCONTRÓ, POR ASÍ DECIRLO
  7.           ##Algo así como "ELIMINAR DE @f TODAS LAS LÍNEAS, APARTADOS O REGISTROS (no sé cómo se definiría en un <span style="font-style: italic">array</span>) TODO LO QUE CONTENGA 01/01/2013"
  8.          }
  9.     }
  10. }
  11.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Muchas gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Vaciar una variable matriz o array en Perl

Notapor explorer » 2013-05-20 18:23 @807

Con un grep() (filtrado) se hace muy fácil:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @f = grep(!m{01/01/2013}, @f);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en perldoc -f grep

Prueba:
Código: Seleccionar todo
perl -E '@f = qw(a b c 01/01/2013 d); @f = grep(!m{01/01/2013}, @f); say "@f"'
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

Re: Vaciar una variable matriz o array en Perl

Notapor Skull118 » 2013-05-21 09:34 @440

explorer, una pregunta: si deseo poner dos expresiones regulares dentro del grep, ¿puedo hacerlo? o bien ¿puedo poner algo así?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @f = grep(!m{01/01/2013}, @f) && grep(!m{"PEPITO"}, @f);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De antemano, muchas gracias, explorer.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Vaciar una variable matriz o array en Perl

Notapor explorer » 2013-05-21 14:59 @666

Se puede meter en la misma expresión, claro:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@f = grep { !m{01/01/2013}  and  !m{PEPITO} } @f;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

De todas maneras... si las expresiones que estás buscando son exactas a los valores que pueden estar dentro del array, pues entonces no necesitas usar expresiones regulares. Con una simple comparación de cadenas de caracteres, te vale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@f = grep { $_ ne '01/01/2013'  and  $_ ne 'PEPITO' } @f;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El operador 'ne' significa 'distinto', así que la expresión quiere decir "si el elemento de @f es distinto de '01/01/2013' y, además, es distinto de 'PEPITO', pues déjalo en @f".
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 41 invitados