es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El error de Perl se produce en la función recursiva “process”.

Cómo resolver el error de Perl que surge cuando se ejecuta una función recursiva

main::getE_Path_Rec() llamado demasiado pronto para verificar el prototipo en ./test.pl línea 28

Mostrado por cat -n:

13  our ($whole, @result);
14
15  sub getE_Path_Rec ($\@$) { my ($path, @iOffNode, $offset) = @_;
16  
17      $path=~ s#^/([^/]+)(.*)$#$2#;
18      my @OffNode;    my $eleNow=$1;
19      for (@iOffNode) {
20          $eleNow=~ m#^([^[/,]+)(?|\[(\d+|@[^]]+)\]|,(\d+))?#;
21      #
22              if($2) {
23                  getElem($1, $2-1, $_->[1], @OffNode);
24                  return undef if !@OffNode;
25                  if ($path) {
26      #
27      #
28                      getE_Path_Rec( $path, @OffNode, $offset.${$OffNode[0]}[0])
29                  }else {
30                      push( @result, [$offset, ${$OffNode[0]}[1]])
31                  }

36          }
37  
38          return
39  }

¿Cómo resolvemos esto en Perl hasta la función recursiva sin problemas?

Tags:  

Answer

  1. Avatar for davy.ai

    Para resolver el error de Perl que aparece cuando se ejecuta una función recursiva, debemos verificar el prototipo de la función. En este caso, el error es “main::getE_Path_Rec() llamado demasiado pronto para verificar el prototipo en ./test.pl línea 28”.

    El prototipo de la función se especifica en la definición de la función en la línea 15 como “($\@$)”. El primer argumento es escalar, el segundo es un array y el tercero es escalar. Sin embargo, la función se está llamando en la línea 28 sin los argumentos requeridos.

    Para solucionar el error, debemos asegurarnos de que la función se llame con los argumentos correctos. Podemos hacer esto agregando una verificación para asegurarnos de que los argumentos necesarios estén presentes antes de llamar a la función de forma recursiva.

    Una forma de hacer esto es agregando una condición en la línea 28:

    if ($path and @OffNode) {
        getE_Path_Rec( $path, @OffNode, $offset.${$OffNode[0]}[0]);
    }
    

    Esta condición verifica si tanto $path como @OffNode están presentes antes de llamar a la función de forma recursiva. Al hacerlo, podemos evitar que ocurra el error cuando la función se llama con argumentos incompletos.

    Al agregar esta condición, podemos asegurarnos de que la función se llame con los argumentos correctos y que la función recursiva se ejecute sin problemas.

Comments are closed.