• Publicidad

Declaración de variables y foreach

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

Declaración de variables y foreach

Notapor Darki » 2009-04-06 03:01 @167

Estoy tratando de programar un pequeño código que quiero usar en un mod de RO, pero dada mi inexperiencia no logro dar con la fórmula adecuada para ello...

Bueno, el código que yo he escrito (erróneo) es algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        $_l = $::char->{look}{body} - 1;

        if ($_l == -1) {$z = ([-1,0],[-2,0],[-2,1],[-2,2],[-1,1],[-1,2],[0,1],[0,2])}
        elsif ($_l == 0) {$z = ([-1,1],[-2,2],[-1,2],[0,1],[0,2],[1,1],[2,2],[1,2])}
        elsif ($_l == 1) {$z = ([1,0],[2,0],[1,1],[2,1],[2,2],[1,2],[0,1],[0,2])}
        elsif ($_l == 2) {$z = ([1,-1],[2,-2],[2,-1],[1,0],[2,0],[1,1],[2,1],[2,2])}
        elsif ($_l == 3) {$z = ([0,-1],[0,-2],[1,-1],[1,-2],[2,-2],[2,-1],[1,0],[2,0])}
        elsif ($_l == 4) {$z = ([-1,-1],[-2,-2],[-1,-2],[0,-1],[0,-2],[1,-1],[1,-2],[2,-2])}
        elsif ($_l == 5) {$z = ([-1,0],[-2,0],[-1,-1],[-2,-1],[-2,-2],[-1,-2],[0,-1],[0,-2])}
        else {$z = ([-1,-1],[-2,-2],[-2,-1],[-1,0],[-2,0],[-1,1],[-2,1],[-2,2])}

        foreach ($z) {
                next if (!$::field->isWalkable($::char->{pos}{x} + $z->[0], $::char->{pos}{x} + $z->[1]));

                foreach (@{$::npcsList->getItems()}) {
                        next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);

                                foreach (@{$::playersList->getItems()}) {
                                        next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);

                                        $::Macro::Data::varStack{loc} = "$::char->{pos}{x} += $z->[0] $::char->{pos}{y} += $z->[1]";
                                }
                        }
                next;
        }
        $::Macro::Data::varStack{loc} = "none";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


para comprenderlo mejor, básicamente es un código que mira la posición del personaje y devuelve una posición cercana sin obstáculos.

Quitando el hecho del código raro que tiene que ver con el programa y tal, el problema es la primera parte y el foreach; he visto códigos parecidos funcionar pero el mío parece que no tiene ganas... ^^U las variables que no están declaradas en el código es porque ya están sacadas previamente, eso no es problema. Mi problema es con la parte del if del principio asignando $z y el foreach.

¿Alguien sabe cómo debería asignar $z para que funcionara? Porque en el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $z ( [0,0], [0,1],[1,0],[0,-1],[-1,0], [-1,1],[1,1],[1,-1],[-1,-1],[0,2],[2,0],[0,-2],[-2,0] ) {
#...
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sí que funciona y no sé qué hacer... :/

PD: espero no haberme equivocado de subforo. :oops:
Darki
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-06 01:58 @124

Publicidad

Notapor explorer » 2009-04-06 08:13 @384

Sí, ya lo veo...

Al poner $z, estás indicando que es un escalar. Si intentas poner
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $z = ([-1,0],[-2,0],[-2,1],[-2,2],[-1,1],[-1,2],[0,1],[0,2]);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

en realidad estás almacenando en ese escalar el último [0,2], ya que los paréntesis no hacen nada, solo agrupan visualmente los elementos que separamos con las comas. Así que solo tenemos una lista de valores, que al asignarla a un escalar, solo se queda con el último de ellos.

Una opción es usar un arreglo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @z = ([-1,0],[-2,0],[-2,1],[-2,2],[-1,1],[-1,2],[0,1],[0,2]);

use Data::Dumper;
print Dumper \@z;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
$VAR1 = [
          [
            -1,
            0
          ],
          [
            -2,
            0
          ],
          [
            -2,
            1
          ],
          [
            -2,
            2
          ],
          [
            -1,
            1
          ],
          [
            -1,
            2
          ],
          [
            0,
            1
          ],
          [
            0,
            2
          ]
        ];
que es justo lo que queremos: un arreglo de arreglos de dos componentes cada uno de ellos.

A la hora del foreach, recorre los valores de @z, y el acceso a cada uno de ellos será algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $z (@z) {
    print "Coordenadas: ", $z->[0], "-", $z->[1], "\n";
}
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Darki » 2009-04-06 09:44 @447

Pero sin embargo en el siguiente código sí que funciona usando una variable de esas en lugar de un array:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
   foreach my $z ( [0,0], [0,1],[1,0],[0,-1],[-1,0], [-1,1],[1,1],[1,-1],[-1,-1],[0,2],[2,0],[0,-2],[-2,0] ) {
      next if !$field->isWalkable($pos->{x} + $z->[0], $pos->{y} + $z->[1]);
      $pos->{x} += $z->[0];
      $pos->{y} += $z->[1];
      return 1;
   }
   return 0;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Por eso no entiendo por qué tengo que hacerlo distinto en el otro, no sé.
Darki
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-06 01:58 @124

Notapor explorer » 2009-04-06 10:14 @468

Pues porque lo que le pasas a foreach es una lista de valores. Y cada uno de esos valores ingresa en $z en cada bucle.

De la primera forma, solo estás asignando un valor -el último par- a un escalar.
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

Notapor Darki » 2009-04-06 15:14 @676

¡Ah, claro, tonto que estoy! ^^U Muchas gracias, ahora sí que me funciona esa parte... Ahora el problema es el resto. xD

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$_l = $::char->{look}{body} - 0;

my $_skip;

if ($_l == 0) {
    @area = ([0,4],[0,3],[-1,3],[1,3],[-1,4],[1,4],[-1,5],[1,5],[0,5],[0,2],[-1,2],[1,2],[-2,2],[2,2],[-2,3],[2,3],[-2,4],[2,4],[-2,5],[2,5],[-2,6],[2,6],[-1,6],[1,6],[0,6]);
}
elsif ($_l == 1) {
    @area = ([-3,3],[-3,2],[-2,3],[-4,3],[-3,4],[-2,2],[-3,1],[-1,3],[-4,2],[-2,4],[-5,3],[-3,5],[-4,4],[-2,1],[-1,2],[-3,0],[0,3],[-4,1],[-1,4],[-5,2],[-2,5],[-6,3],[-3,6],[-5,4],[-4,5]);
}
elsif ($_l == 2) {
    @area = ([-4,0],[-3,0],[-3,-1],[-3,1],[-4,-1],[-4,1],[-5,-1],[-5,1],[-5,0],[-2,0],[-2,-1],[-2,1],[-2,-2],[-2,2],[-3,-2],[-3,2],[-4,-2],[-4,2],[-5,-2],[-5,2],[-6,-2],[-6,2],[-6,-1],[-6,1],[-6,0]);
}
elsif ($_l == 3) {
    @area = ([-3,-3],[-2,-3],[-3,-2],[-3,-4],[-4,-3],[-2,-2],[-1,-3],[-3,-1],[-2,-4],[-4,-2],[-3,-5],[-5,-3],[-4,-4],[-1,-2],[-2,-1],[0,-3],[-3,0],[-1,-4],[-4,-1],[-2,-5],[-5,-2],[-3,-6],[-6,-3],[-4,-5],[-5,-4]);
}
elsif ($_l == 4) {
    @area = ([0,-4],[0,-3],[1,-3],[1,-3],[1,-4],[-1,-4],[1,-5],[-1,-5],[0,-5],[0,-2],[1,-2],[-1,-2],[2,-2],[-2,-2],[2,-3],[-2,-3],[2,-4],[-2,-4],[2,-5],[-2,-5],[2,-6],[-2,-6],[1,-6],[-1,-6],[0,-6]);
}
elsif ($_l == 5) {
    @area = ([3,-3],[3,-2],[2,-3],[4,-3],[3,-4],[2,-2],[3,-1],[1,-3],[4,-2],[2,-4],[5,-3],[3,-5],[4,-4],[2,-1],[1,-2],[3,0],[0,-3],[4,-1],[1,-4],[5,-2],[2,-5],[6,-3],[3,-6],[5,-4],[4,-5]);
}
elsif ($_l == 6) {
    @area = ([4,0],[3,0],[3,1],[3,-1],[4,1],[4,-1],[5,1],[5,-1],[5,0],[2,0],[2,1],[2,-1],[2,2],[2,-2],[3,2],[3,-2],[4,2],[4,-2],[5,2],[5,-2],[6,2],[6,-2],[6,1],[6,-1],[6,0]);
}
else {
    @area = ([3,3],[2,3],[3,2],[3,4],[4,3],[2,2],[1,3],[3,1],[2,4],[4,2],[3,5],[5,3],[4,4],[1,2],[2,1],[0,3],[3,0],[1,4],[4,1],[2,5],[5,2],[3,6],[6,3],[4,5],[5,4]);
}

foreach my $_z (@area) {
    next if (!$::field->isWalkable($::char->{pos}{x} + $_z->[0], $::char->{pos}{x} + $_z->[1]));
    $_skip = 0;
    foreach my $_npc (@{$::npcsList->getItems()}) {
        next if ($_npc->{pos_to}{x} != $::char->{pos}{x} + $_z->[0] || $_npc->{pos_to}{y} != $::char->{pos}{x} + $_z->[1]);
        $_skip = 1;
        last;
    }
    next if ($_skip);
    foreach my $_pl (@{$::playersList->getItems()}) {
        next if ($_pl->{pos_to}{x} != $::char->{pos}{x} + $_z->[0] || $_pl->{pos_to}{y} != $::char->{pos}{x} + $_z->[1]);
        $_skip = 1;
        last;
    }
    next if ($_skip);
    my $_x = $::char->{pos}{x} + $_z->[0];
    my $_y = $::char->{pos}{y} + $_z->[1];
    $::Macro::Data::varStack{loc} = $_x ." ". $_y
}

if ($_skip == 1) {
    $::Macro::Data::varStack{loc} = "none";
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Al final lo hice más complejo (ya que los array funcionan aproveché para poner la lista completa), pero no acabo de ver el foreach. La cosa es que cuando todos los foreach dan falso (o sea, cuando llega al último par de números y no se cumple una de las tres condiciones) tendría que salir "none" en la última variable, pero por algún motivo, nunca lo hace, siempre da un par de números aunque no sean validos... Sospecho que el problema está en la asignación de $_skip, o en la forma en la que los he encadenado, pero estoy mirando el tutorial y no acabo de verle el fallo. Me siento realmente torpe... :/
Darki
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-06 01:58 @124

Notapor explorer » 2009-04-06 16:33 @731

Yo cambiaría los '||' por 'or'. Tienen menor precedencia. Y en caso de duda, pon paréntesis.

Otra cosa... hay otra forma más cómoda de escribir la primera parte del código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @areas = (
    [
        [ 0, 4],[ 0, 3],[-1, 3],[ 1, 3],[-1, 4],
        [ 1, 4],[-1, 5],[ 1, 5],[ 0, 5],[ 0, 2],
        [-1, 2],[ 1, 2],[-2, 2],[ 2, 2],[-2, 3],
        [ 2, 3],[-2, 4],[ 2, 4],[-2, 5],[ 2, 5],
        [-2, 6],[ 2, 6],[-1, 6],[ 1, 6],[ 0, 6],
    ],
    [
        [-3, 3],[-3, 2],[-2, 3],[-4, 3],[-3, 4],
        [-2, 2],[-3, 1],[-1, 3],[-4, 2],[-2, 4],
        [-5, 3],[-3, 5],[-4, 4],[-2, 1],[-1, 2],
        [-3, 0],[ 0, 3],[-4, 1],[-1, 4],[-5, 2],
        [-2, 5],[-6, 3],[-3, 6],[-5, 4],[-4, 5],
    ],
    [
        [-4, 0],[-3, 0],[-3,-1],[-3, 1],[-4,-1],
        [-4, 1],[-5,-1],[-5, 1],[-5, 0],[-2, 0],
        [-2,-1],[-2, 1],[-2,-2],[-2, 2],[-3,-2],
        [-3, 2],[-4,-2],[-4, 2],[-5,-2],[-5, 2],
        [-6,-2],[-6, 2],[-6,-1],[-6, 1],[-6, 0],
    ],
    [
        [-3,-3],[-2,-3],[-3,-2],[-3,-4],[-4,-3],
        [-2,-2],[-1,-3],[-3,-1],[-2,-4],[-4,-2],
        [-3,-5],[-5,-3],[-4,-4],[-1,-2],[-2,-1],
        [ 0,-3],[-3, 0],[-1,-4],[-4,-1],[-2,-5],
        [-5,-2],[-3,-6],[-6,-3],[-4,-5],[-5,-4],
    ],
    [
        [ 0,-4],[ 0,-3],[ 1,-3],[ 1,-3],[ 1,-4],
        [-1,-4],[ 1,-5],[-1,-5],[ 0,-5],[ 0,-2],
        [ 1,-2],[-1,-2],[ 2,-2],[-2,-2],[ 2,-3],
        [-2,-3],[ 2,-4],[-2,-4],[ 2,-5],[-2,-5],
        [ 2,-6],[-2,-6],[ 1,-6],[-1,-6],[ 0,-6],
    ],
    [
        [ 3,-3],[ 3,-2],[ 2,-3],[ 4,-3],[ 3,-4],
        [ 2,-2],[ 3,-1],[ 1,-3],[ 4,-2],[ 2,-4],
        [ 5,-3],[ 3,-5],[ 4,-4],[ 2,-1],[ 1,-2],
        [ 3, 0],[ 0,-3],[ 4,-1],[ 1,-4],[ 5,-2],
        [ 2,-5],[ 6,-3],[ 3,-6],[ 5,-4],[ 4,-5],
    ],
    [
        [ 4, 0],[ 3, 0],[ 3, 1],[ 3,-1],[ 4, 1],
        [ 4,-1],[ 5, 1],[ 5,-1],[ 5, 0],[ 2, 0],
        [ 2, 1],[ 2,-1],[ 2, 2],[ 2,-2],[ 3, 2],
        [ 3,-2],[ 4, 2],[ 4,-2],[ 5, 2],[ 5,-2],
        [ 6, 2],[ 6,-2],[ 6, 1],[ 6,-1],[ 6, 0],
    ],
    [
        [ 3, 3],[ 2, 3],[ 3, 2],[ 3, 4],[ 4, 3],
        [ 2, 2],[ 1, 3],[ 3, 1],[ 2, 4],[ 4, 2],
        [ 3, 5],[ 5, 3],[ 4, 4],[ 1, 2],[ 2, 1],
        [ 0, 3],[ 3, 0],[ 1, 4],[ 4, 1],[ 2, 5],
        [ 5, 2],[ 3, 6],[ 6, 3],[ 4, 5],[ 5, 4],
    ],
);

my $_l = 1;
my @area = @{$areas[$_l]};

#use Data::Dumper::Names;
#print Dumper \@area;
#print scalar @areas, "\n";
#print scalar @area, "\n";

foreach my $_z (@area) {
    print "$_z->[0]:$_z->[1]\n";
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Así, todas las coordenadas están reunidas en una única estructura de datos, de la que es fácil extraer información.

Incluso hasta es posible acceder directamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $_z (@{$areas[$_l]}) {
    print "$_z->[0]:$_z->[1]\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Recuerda: Data::Dumper es tu amigo.
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

Notapor Darki » 2009-04-09 21:42 @946

Muchas gracias por el consejo, lo probaré en cuanto tenga tiempo y postearé los resultados. Probablemente algún error sea en la tabla, pero aun así probablemente tú los has corregido al cambiarles el "look", así que lo revisare y probaré.

Otra vez, muchas gracias. ^^

EDITO:He estado trasteando con el código, pero no hay manera de que funcione bien. Muchas veces vuelve al punto de origen (como si el array no se leyera y por tanto cogiera sólo las coordenadas iniciales), y otras veces se va a un punto totalmente extraño a la tabla... La verdad es que esto me confunde, porque mientras buscara en cuadros dentro de los indicados aunque fuera desordenadamente vale, pero ¿en puntos de los cuales siquiera he dado coordenadas? No estoy seguro de qué ocurrirá...

El código actual, usando tu consejo, es algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
undef $::Macro::Data::varStack{loc};

my @_areas = (

[[ 0, 4],[ 0, 3],[-1, 3],[ 1, 3],[-1, 4],[ 1, 4],[-1, 5],[ 1, 5],[ 0, 5],[ 0, 2],[-1, 2],[ 1, 2],[-2, 2],[ 2, 2],[-2, 3],[ 2, 3],[-2, 4],[ 2, 4],[-2, 5],[ 2, 5],[-2, 6],[ 2, 6],[-1, 6],[ 1, 6],[ 0, 6]],

[[-3, 3],[-3, 2],[-2, 3],[-4, 3],[-3, 4],[-2, 2],[-3, 1],[-1, 3],[-4, 2],[-2, 4],[-5, 3],[-3, 5],[-4, 4],[-2, 1],[-1, 2],[-3, 0],[ 0, 3],[-4, 1],[-1, 4],[-5, 2],[-2, 5],[-6, 3],[-3, 6],[-5, 4],[-4, 5]],

[[-4, 0],[-3, 0],[-3,-1],[-3, 1],[-4,-1],[-4, 1],[-5,-1],[-5, 1],[-5, 0],[-2, 0],[-2,-1],[-2, 1],[-2,-2],[-2, 2],[-3,-2],[-3, 2],[-4,-2],[-4, 2],[-5,-2],[-5, 2],[-6,-2],[-6, 2],[-6,-1],[-6, 1],[-6, 0]],

[[-3,-3],[-2,-3],[-3,-2],[-3,-4],[-4,-3],[-2,-2],[-1,-3],[-3,-1],[-2,-4],[-4,-2],[-3,-5],[-5,-3],[-4,-4],[-1,-2],[-2,-1],[ 0,-3],[-3, 0],[-1,-4],[-4,-1],[-2,-5],[-5,-2],[-3,-6],[-6,-3],[-4,-5],[-5,-4]],

[[ 0,-4],[ 0,-3],[ 1,-3],[ 1,-3],[ 1,-4],[-1,-4],[ 1,-5],[-1,-5],[ 0,-5],[ 0,-2],[ 1,-2],[-1,-2],[ 2,-2],[-2,-2],[ 2,-3],[-2,-3],[ 2,-4],[-2,-4],[ 2,-5],[-2,-5],[ 2,-6],[-2,-6],[ 1,-6],[-1,-6],[ 0,-6]],

[[ 3,-3],[ 3,-2],[ 2,-3],[ 4,-3],[ 3,-4],[ 2,-2],[ 3,-1],[ 1,-3],[ 4,-2],[ 2,-4],[ 5,-3],[ 3,-5],[ 4,-4],[ 2,-1],[ 1,-2],[ 3, 0],[ 0,-3],[ 4,-1],[ 1,-4],[ 5,-2],[ 2,-5],[ 6,-3],[ 3,-6],[ 5,-4],[ 4,-5]],

[[ 4, 0],[ 3, 0],[ 3, 1],[ 3,-1],[ 4, 1],[ 4,-1],[ 5, 1],[ 5,-1],[ 5, 0],[ 2, 0],[ 2, 1],[ 2,-1],[ 2, 2],[ 2,-2],[ 3, 2],[ 3,-2],[ 4, 2],[ 4,-2],[ 5, 2],[ 5,-2],[ 6, 2],[ 6,-2],[ 6, 1],[ 6,-1],[ 6, 0]],

[[ 3, 3],[ 2, 3],[ 3, 2],[ 3, 4],[ 4, 3],[ 2, 2],[ 1, 3],[ 3, 1],[ 2, 4],[ 4, 2],[ 3, 5],[ 5, 3],[ 4, 4],[ 1, 2],[ 2, 1],[ 0, 3],[ 3, 0],[ 1, 4],[ 4, 1],[ 2, 5],[ 5, 2],[ 3, 6],[ 6, 3],[ 4, 5],[ 5, 4]]

);

my $_l = $::char->{look}{body};
my @_area = @{$_areas[$_l]};
my $_skip;

foreach my $_z (@_area) {
        my ($_x, $_y) = ($::char->{pos}{x} + $_z->[0], $::char->{pos}{y} + $_z->[1]);
        $_skip = 1;

        next if (!$::field->isWalkable($_x, $_y));
        $_skip = 0;
        foreach my $_npc (@{$::npcsList->getItems()}) {
                next if ($_npc->{pos_to}{x} != $_x || $_npc->{pos_to}{y} != $_y);
                $_skip = 1;
                last;
        }
        next if ($_skip);

        foreach my $_pl (@{$::playersList->getItems()}) {
                next if ($_pl->{pos_to}{x} != $_x || $_pl->{pos_to}{y} != $_y);
                $_skip = 1;
                last;
        }
        next if ($_skip);
        $::Macro::Data::varStack{loc} = $_x ." ". $_y;
        last;
}
if ($_skip) {$::Macro::Data::varStack{loc} = "none";}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Aun no he probado tu consejo sobre cambiar los "||" por "or" porque he estado liado con otras cosas y no he podido probarlo, pero puedo hacerlo en un rato. Lo que más me cabrea es que parece un código relativamente fácil y aún así, falla...

La pregunta que quería hacer esta vez es: no he incluido el Data::Dumper porque no estoy seguro de cómo funcionaría en el programa que lee estos códigos que estoy usando, ya que tiene algunas limitaciones (por ejemplo las variables tienen que ir con una determinada sintaxis para que no se pisen con otras del programa). ¿Qué hace exactamente esta función? Me he mirado un manual pero lo único que ha hecho ha sido darme dolor de cabeza. :oops:

Gracias por aguantarme con esto. xD
Darki
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-06 01:58 @124

Notapor explorer » 2009-04-10 05:28 @269

Pues entonces hay un problema de lógica por alguna parte. ¿Seguro que el control del semáforo $_skip es correcto? Veo que en un bucle se sale inmediatamente si se cumple una condición, pero a continuación no sale del bucle principal, sino que sigue con el siguiente valor.

No sé... quizás deberías hacer un sistema de trazas para comprobar que estás usando los valores correctos. Un sistema de registro como Log4Perl te podría valer para generar esa traza.

Lo que veo en la primera parte del código me parece correcta. Incluso me parece que el cambio de '||' por 'or' no afecta para nada a lo que está escrito.

El Data::Dumper se usa para verificar que estamos trabajando con la estructura de datos correcta. Solo sirve para verla, en el momento de desarrollo, pero para nada más.
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

Notapor Darki » 2009-04-10 13:47 @616

Después de comprobar y comprobar con la ayuda de otra persona parece ser que el problema está en los archivos de mapeado y no en la función, así que podemos dar por arreglado esto ya que el mapeado no es algo que yo pueda modificar. ^^U Mientras que funcione todo lo bien que pueda por mi mano, ya está bien.

En cuanto a lo del foreach() sí está bien, hay dos funciones que no tienen que salir del bucle principal, solo del bucle interno.
Darki
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-06 01:58 @124


Volver a Básico

¿Quién está conectado?

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

cron