• Publicidad

Uso de funciones en hash y vector

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

Uso de funciones en hash y vector

Notapor Eowyn » 2011-10-18 05:01 @250

Hola,

necesito ayuda para un proyecto:

Quiero conseguir sacar los valores de una tabla hash según su clave. Dicha tabla consta de dos campos: la clave y la información, que en mi caso es un vector.

Algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %cumpleaños = (Enero, (Javier, Ana, Eduardo))
                 (Febrero, (Mikel, Jon, Ainhoa, Lourdes))
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sabiendo la clave "Febrero", por ejemplo, quiero que me devuelva el vector (Mikel, Jon, Ainhoa, Lourdes).

La otra duda es respecto a ese vector. Por lo que sé hay una variable en Perl, especial, que sirve de último indice de un vector cuyo número de componentes no sabemos. La variable es la siguiente: $#variable. El caso es que, supongo que es una tontería, pero en mi Ubuntu los comentarios se escriben tras la almohadilla y por tanto, al escribir $#variable, escribe $ pero a partir de # lo deja como comentario. Y bueno, ni idea de cómo cambiar éso. :(

Les agradezco la ayuda de antemano.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Publicidad

Re: Uso de funciones en hash y vector

Notapor explorer » 2011-10-18 07:17 @345

Eowyn escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %cumpleaños = (Enero, (Javier, Ana, Eduardo))
                 (Febrero, (Mikel, Jon, Ainhoa, Lourdes))
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sabiendo la clave "Febrero", por ejemplo, quiero que me devuelva el vector (Mikel, Jon, Ainhoa, Lourdes).
Se escribe así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %cumpleaños = (
    Enero   => [ 'Javier', 'Ana', 'Eduardo' ],
    Febrero => [ 'Mikel', 'Jon', 'Ainhoa', 'Lourdes' ],
)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
o así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %cumpleaños = (
    Enero   => [ qw(Javier Ana Eduardo) ],
    Febrero => [ qw(Mikel Jon Ainhoa Lourdes) ],
)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es decir, se trata de un hash que contiene arrays, como valores.

Para obtener los valores de 'Enero', hacemos:

my @cumpleaños_en_Enero = @{ $cumpleaños{Enero} };


Eowyn escribiste:La otra duda es respecto a ese vector. Por lo que sé hay una variable en Perl, especial, que sirve de último indice de un vector cuyo número de componentes no sabemos. La variable es la siguiente: $#variable. El caso es que, supongo que es una tontería, pero en mi Ubuntu los comentarios se escriben tras la almohadilla y por tanto, al escribir $#variable, escribe $ pero a partir de # lo deja como comentario.
$#variable hace referencia al último índice de un array @variable. Ejemplo: si tenemos

@array = ( 1, 4, 6, 8 );

$#array valdrá 3 (los índices empiezan en 0).

Otra cosa es acceder al último valor. Puedes hacerlo de estas dos maneras:

print $array[$#array];
print $array[-1];

Tu eliges la que te parezca más clara. Para mí, la más clara es usando el índice -1 :)

En cuanto a que dices que escribes en Ubuntu es lo mismo que decir que escribes en Windows: no se puede escribir en un sistema operativo, sino que, en realidad, estás usando un editor de textos. ¿Cuál? Lo recomendable es usar un editor de textos que sepa colorear bien el código Perl. Yo suelo usar Kate (en KDE) o gedit (en Gnome) o joe o vim (en la terminal), pero hay muchos más.

De todas maneras, esto solo es 'colorear'. A Perl no le importa nada de qué color lo veamos.

Lo que importa es lo que se escriba. No cómo se escriba.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Uso de funciones en hash y vector

Notapor Eowyn » 2011-10-20 03:56 @205

Muchísimas gracias por la ayuda. La verdad, no sé porqué puse Ubuntu a secas, ¡ja,ja! Yo utilizo también vim. Probaré con el "-1", porque como ya explicaba, la almohadilla me da muchos problemas. Gracias de nuevo, para los que aún no sabemos prácticamente nada de Perl este foro es una gran ayuda :D
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Uso de funciones en hash y vector

Notapor explorer » 2011-10-20 06:12 @300

Es posible que vim no se haya enterado de que está cargando un programa Perl, y por eso lo colorea de forma distinta.

En mi vimrc.local, yo tengo esto:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. if has("autocmd") && exists("+omnifunc")       
  2.   autocmd Filetype *                
  3.   \  if &omnifunc == "" |       
  4.   \      setlocal omnifunc=syntaxcomplete#Complete | 
  5.   \  endif               
  6. endif 
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Uso de funciones en hash y vector

Notapor Eowyn » 2011-10-31 06:18 @304

Gracias por la ayuda.

La cuestión es que yo debo comparar índices, quería hacer ésto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. indice1<=$#array
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero no puedo, así que he supuesto ésto, pero no me convence:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. indice<=-1
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Estaría bien así?
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Uso de funciones en hash y vector

Notapor explorer » 2011-10-31 10:02 @460

En buena parte de los casos, con Perl no es necesario comparar índices. De hecho, yo ya no recuerdo cuándo fue la última vez que lo hice.

Sí que puedes comparar
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($indice1 <= $#array) {
    ...
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahí estas comparando una variable escalar, su valor, con el valor del último índice de @array.

En cambio, con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($indice <= -1) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

solo estás preguntando si $indice es menor igual que -1.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Uso de funciones en hash y vector

Notapor Eowyn » 2011-11-09 05:46 @282

Parece ser que debo utilizar "nano". Es entonces que para hacer la opción que me indica ($indice < $#array) a partir de la almohadilla el texto me sale como comentario y no sé cómo arreglar éso. Gracias por su paciencia.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Uso de funciones en hash y vector

Notapor explorer » 2011-11-09 10:22 @473

No importa el color que salga. Lo importante es lo que se escriba. Aunque salga de otro color, perl lo entenderá.

Que nano no entienda lo que escribes, no es culpa tuya, sino de nano.

(Ergo, la solución es no usar nano, sino otro editor.)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
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 1 invitado

cron