Perl - me estoy volvio loco, no me gusta conmsultar nada a hasta antes de buscar solucion

 
Vista:
Imágen de perfil de Sandro
Val: 10
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

me estoy volvio loco, no me gusta conmsultar nada a hasta antes de buscar solucion

Publicado por Sandro (3 intervenciones) el 01/05/2017 23:25:02
me estoy volvió loco, no me gusta consultar nada a hasta antes de buscar solución.

muchas cosas me pasan como este ejemplo, parece que me metieron un maldición.

algunas otras arreglos funcionan, pero en estas lineas por mas que busque algún punto o coma, no hayo la solución, parece maldición.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
    use strict;
    use warnings;
    use 5.010;
 
	my	$userId	=1;
	my	$mundo="aa";
	my	@KeyCampos=("`Id_Ville`","`Mundo`");
	my	@Values=("$userId","$mundo");
	my $i=0;
	foreach my $i (0 .. $#KeyCampos) {
		say "$i - $KeyCampos[$i] - $Values[$i]";
	}
	a(@KeyCampos,@Values);
 
sub a {
	my	@KeyCampos							=	$_[0]	;
	my	@Values								=	$_[1]	;
 
 
	foreach my $i (0 .. $#KeyCampos) {
		say "$i - $KeyCampos[$i] - $Values[$i]";
	}
}

resultado que me da a mi

1
2
3
0 - `Id_Ville` - 1
1 - `Mundo` - aa
0 - `Id_Ville` - `Mundo`

donde están las otras ocurrencias, le quite todos los tabuladores y no funciona

hay en esta sociedad, que se apiade y me ayude

gracias

inicialmente creí y vi que los arreglos estaban mal, ya que los manejaba por for, antes de entrar a la subrutina están y entrando están mal, que estoy haciendo mal.

no me deja subir el empacado, saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Sandro
Val: 10
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

me estoy volvio loco, no me gusta conmsultar nada a hasta antes de buscar solucion

Publicado por Sandro (3 intervenciones) el 03/05/2017 16:19:49
que no es lo mismo por referencia que de esta forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
    use strict;
    use warnings;
    use 5.010;
 
	my	$userId	=1;
	my	$mundo="aa";
	my	@KeyCampos=("`Id_Ville`","`Mundo`");
	my	@Values=("$userId","$mundo");
	my $i=0;
	foreach my $i (0 .. $#KeyCampos) {
		say "$i - $KeyCampos[$i] - $Values[$i]";
	}
	a(@KeyCampos,@Values);
 
sub a (my @KeyCampos, my @Values){
 
 
	foreach my $i (0 .. $#KeyCampos) {
		say "$i - $KeyCampos[$i] - $Values[$i]";
	}
}

resultado aunque marca errores funciona

1
2
3
4
5
6
7
8
9
Php/Prueba/perl/prueba.pl
Prototype after '@' for main::a : my@KeyCampos,my@Values at Php/Prueba/perl/prueba.pl line 16.
Illegal character in prototype for main::a : my@KeyCampos,my@Values at Php/Prueba/perl/prueba.pl line 16.
main::a() called too early to check prototype at Php/Prueba/perl/prueba.pl line 14.
0 - `Id_Ville` - 1
1 - `Mundo` - aa
0 - `Id_Ville` - 1
1 - `Mundo` - aa
sandro@debian:~$
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Sandro
Val: 10
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

me estoy volvio loco, no me gusta conmsultar nada a hasta antes de buscar solucion

Publicado por Sandro (3 intervenciones) el 03/05/2017 19:20:46
ahora me dice que la subrutina no existe, cuando la llamo de otra subrutina,

al no pasar los parametros de esa forma, no sirve este lenguaje

voy a tener que hacer el programa en otro lenguaje

que porqueria, ya intente pasar de un programa perl a otro perl, pero no puedo pasar arreglos, por que tengo que convinar string + arreglo + arreglo + string no hayo la forma de pasar y que respete los parametros en el order que se pudieron, he intentado pasar los arrglo todo seguido para despues hacer un split, los parametros pero se salta algunos parametros

pero en fin una porqueria, los lenguajes de 3 generacion eran mejores asi como la musica de los 70's 80's poco 90's era mucho mejor que ahora
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joaquin
Val: 56
Oro
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

me estoy volvio loco, no me gusta conmsultar nada a hasta antes de buscar solucion

Publicado por Joaquin (31 intervenciones) el 21/11/2017 21:12:35
En Perl pasa lo mismo que en C y en otros lenguajes: no puedes pasar dos arrays porque la subrutina que recibe todos los valores no sabe cuál es el último valor del primer array y cuál es el primer valor del segundo array.

La solución es pasar los arrays "por referencia":

1
a(\@KeyCampos, \@Values);

Y en la subrutina, recibir esos valores en dos variables escalares, que podemos desreferenciar:

1
2
3
sub a {
	my	@KeyCampos	=	@{ $_[0] };
	my	@Values		=	@{ $_[1] };

o también usamos los valores escalares de forma directa, como referencias a los array, por lo que deberemos usar el operador de desreferencia '->'

1
2
3
4
5
6
7
8
9
sub a {
	my	$KeyCampos_ref		=	$_[0];
	my	$Values_ref		=	$_[1];
 
	foreach my $i (0 .. $#$KeyCampos_ref) {
 
		say "$i - $KeyCampos_ref->[$i] - $Values->ref[$i]";
 
	}
(Se recomienda poner la notación "_ref" para saber que esa variable escalar almacena una referencia, pero es solo eso: notación").

Sobre el mensaje que sigue, decir que hasta la versión v5.20, Perl no disponía de llamadas a subrutinas basadas en "firmas", por lo que no se podían meter los nombres de las variables dentro de una definición de subrutina en la parte de declaración de parámetros. A partir de v5.22, y sobre todo v5.26, la situación ha mejorado mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar