• Publicidad

Equivalencias de clase, no me sale

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

Equivalencias de clase, no me sale

Notapor bl4ckc00k1e » 2009-08-15 14:11 @633

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$registro=('pikachu','6','[email protected]');
@reg=split(":",$registro);
print "Nombre:$reg[0]\nEdad:$reg[1]\nEmail:$reg[2]\n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


me escupe en consola:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Nombre:[email protected]
Edad:
Email:
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que quiero es que me ponga:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Nombre:pikachu
Edad:6
Email:[email protected]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Qué está mal?
Última edición por explorer el 2009-08-15 14:37 @651, editado 1 vez en total
Razón: Ortografía, bloques de código
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Publicidad

Re: equivalencias de clase, no me sale

Notapor explorer » 2009-08-15 14:35 @649

Con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$registro=('pikachu','6','[email protected]');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

lo que estás haciendo es asignar una lista de valores a una variable escalar, por lo que ésta solo almacenará el último valor de la lista. Más información en perldata#List-value-constructors.
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: Equivalencias de clase, no me sale

Notapor kidd » 2009-08-15 14:44 @656

De hecho si tomas tu código y te saltas unos pasos, logras lo que quieres:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@reg = ('pikachu','6','[email protected]');
print "Nombre:$reg[0]\nEdad:$reg[1]\nEmail:$reg[2]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora, tu ejemplo valdría si tuvieras lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$registro = 'pikachu:6:[email protected]';

@reg=split(":",$registro);

print "Nombre:$reg[0]\nEdad:$reg[1]\nEmail:$reg[2]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más acerca de split en:
http://perlenespanol.com/tutoriales/fun ... html#split

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Equivalencias de clase, no me sale

Notapor bl4ckc00k1e » 2009-08-15 14:58 @665

Gracias a los dos por la información y correción. Sigo perleando.
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: Equivalencias de clase, no me sale

Notapor netsoul » 2009-08-15 15:14 @676

¡También vale referencias!. :D

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$registro = ['pikachu', '6', "pikachu\@pokemon.com"];
print "Nombre: @$registro[0]\nEdad: @$registro[1]\nEmail: @$registro[2]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Equivalencias de clase, no me sale

Notapor bl4ckc00k1e » 2009-08-15 15:36 @691

netsoul escribiste:¡También vale referencias!. :D

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$registro = ['pikachu', '6', "pikachu\@pokemon.com"];
print "Nombre: @$registro[0]\nEdad: @$registro[1]\nEmail: @$registro[2]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo veía antes lioso, pero por lo que veo, a la constante $registro, le has dado el valor de un arreglo con @$registro. Muy curioso, Perl: tiene mil salidas.
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: Equivalencias de clase, no me sale

Notapor netsoul » 2009-08-15 15:49 @700

Mmmm... a ver... $registro no es una constante, sino una variable escalar. Las constantes se declaran con use constant(si no me equivoco):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use constant PI => 4 * atan2(1, 1);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Lo que hice con $registro (con corchetes) fue declarar un array anónimo, para después apuntar a su valor con @$. ;)
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Equivalencias de clase, no me sale

Notapor explorer » 2009-08-15 17:44 @781

Eso requiere una explicación: @$registro[0], en realidad, es @{$registro}[0].

Es decir: $registro contiene una referencia a un arreglo anónimo. Con @{} conseguimos acceder a ese arreglo. Y finalmente, con [0] accedemos al primer elemento.

Pero, atención: estamos haciendo algo "no normal". Resulta que por efecto del '@', @$registro es TODO el arreglo (todos los valores). Luego solo nos quedamos con uno (el [0]). Pero lo estamos repitiendo 3 veces. No es eficiente. Es legal, pero no es del todo 'correcto'.

Es lo mismo que si tuviéramos
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @arreglo = 1 .. 10;
print "@arreglo[3]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sí, estamos imprimiendo el cuarto elemento, pero en realidad, lo que hacemos es sacar una lista de valores compuestos de un solo elemento, que es el cuarto de @arreglo. Vamos, es dar una vuelta a la manzana más. Lo lógico sería print "$arreglo[3]\n";.

Así que en el caso de referencias, lo ideal sería seleccionar solo el elemento que nos interesa dentro del arreglo: $registro->[0], que es lo mismo que escribir ${$registro}[0] que es lo mismo que escribir $$registro[0] (es siempre preferible la notación con '->': es más cómoda y visual, y recuerda a la de otros lenguajes).

En este caso, Perl desreferencia el contenido de $registro, y sabe que es un elemento de un arreglo por la presencia de los corchetes del índice. Y solo devuelve ese elemento, a diferencia de la '@'.
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: Equivalencias de clase, no me sale

Notapor netsoul » 2009-08-15 18:18 @804

Ahora tengo una duda explorer porque creo que mi código tiene errores. Jugando con los pragmas y valiendo el mismo código:

Colocando use warnings, la siguiente salida es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
Using an array as a reference is deprecated at pikachu.pl
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Bueno, eso ya sabemos pero...

Ahora viene con use diagnostics, la salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
Using an array as a reference is deprecated at pikachu.pl line 9 (#1)
    (D deprecated) You tried to use an array as a reference, as in
    @foo->[23] or @$ref->[99].  Versions of perl <= 5.6.1 used to
    allow this syntax, but shouldn't have. It is now deprecated, and will be
    removed in a future version.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que aún no entiendo es: 'It is now deprecated, and will be removed in a future version'
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Equivalencias de clase, no me sale

Notapor explorer » 2009-08-15 18:25 @809

Que es algo obsoleto y que se eliminará en las siguientes versiones del intérprete, así que te avisa de que no lo uses.
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

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado