He escrito algo de código, y no estoy seguro de qué error se trata. Estoy recibiendo el error:

Uso de valor no inicializado en la concatenación (.) o en cadena mksmksmks.pl línea 63

Mi código es el siguiente:

for(my $j = 0; $j < $num2; $j++) {
  print {$out} "$destination[$j]|$IP_one_1[$j]|$IP_one_2[$j]|$reached[$j]|$IP_two_1[$j]|$IP_two_2[$j]\n";`
}
  • y mi línea 63 es la que consiste en el bucle for
  • Es imposible decir que el valor no está inicializada a partir de lo que nos han mostrado. Utilice el Perl depurador o añadir algunos print declaraciones y examinar los valores de todas las variables contempladas en su (muy larga) literal de cadena; uno de ellos es undef.
  • Y una nota al margen: tal vez es mejor para reorganizar sus datos a partir del 5 de matrices en la matriz de hash? Va a ser mucho más que el limpiador proceso, supongo.
  • En las últimas versiones de Perl (de 5.10, creo) que la advertencia de que es mejorada por lo que le indica cuáles de los valores no está definido. Otra buena razón para actualizar 🙂
InformationsquelleAutor user1581917 | 2012-08-15

2 Comentarios

  1. 9

    Lo que significa es que uno de los elementos de cualquiera de @destination, @IP_one_1, @IP_one_2, o @reached no se ha definido (no se ha asignado un valor), o se le ha asignado un valor de undef. Usted necesita para detectar (y prevenir) los valores no definidos en la fuente, o esperar y tratar con ellos más tarde. Puesto que usted tiene warnings activada (que es una buena cosa), Perl está recordando que el código está tratando de concatenar una cadena en la que uno de los valores que se concatenan es indefinido.

    Considere el siguiente ejemplo:

    perl -wE 'my @x = (); $x[0] = "Hello "; $x[2] = "world!";  say "@x"'

    En este ejemplo, $x[0] tiene un valor, y $x[2] tiene un valor, pero $x[1] no. Cuando nos interpolar @x en un doble citado construcción, que se expandió como [element 0 (Hello )]<space>[element 1 (undef)]<space>[element 2 (world!)]. El undef elementos interpola como una cadena vacía, y arroja una advertencia. Y, por supuesto, por defecto de la matriz de interpolación inyecta un carácter de espacio entre cada elemento. Así, en el ejemplo de arriba vemos Hello <interpolation-space>(undef upgrades to empty string here)<interpolation-space>world!

    Un ejemplo de donde usted podría investigar a una o más de las matrices es de diferente tamaño total de los demás. Por ejemplo, si @IP_one_2 tiene menos elementos que los otros, o si $num2 es un valor mayor que el número de elementos en cualquiera de las matrices.

    Lugar la siguiente cerca de la parte superior de la secuencia de comandos y ejecute de nuevo:

    use diagnostics;

    Cuando yo ejecute la siguiente línea debajo de las advertencias y de diagnóstico:

    $ perl -wMdiagnostics -e '$a=$a; print "$a\n"'

    Obtengo la siguiente salida, y se obtiene algo similar si se agrega use diagnostics;… una herramienta muy útil cuando usted está aprendiendo Perl advertencias.

    Uso de sin inicializar el valor de $a en la concatenación (.) o cadena a -e
    línea 1 (#1)

    (W sin inicializar) Un valor indefinido se usa como si fuera ya
    definido. Fue interpretado como un «» o un 0, pero tal vez fue un error.
    Para suprimir esta advertencia asignar un valor definido para las variables.

    Para ayudarle a averiguar qué era indefinido, perl se trate de decirle
    el nombre de la variable (si los hubiere) que no estaba definida. En algunos casos
    no puede hacer esto, así que también le indica qué operación se utiliza el
    valor indefinido en. Nota, sin embargo, que perl optimiza su programa
    anid la operación que se muestra en la advertencia, puede no necesariamente aparecen
    literalmente en su programa. Por ejemplo, «que $foo» es generalmente
    optimizado en «eso» . $foo, y la advertencia se refieren a la
    concatenación (.) operador, incluso a pesar de que no existe . en
    tu programa.

  2. -1

    Si utiliza eq "" no le dará ningún mensaje de advertencia.

    Pero si uso eq " " (aquí se puede ver un espacio), entonces se dará este mensaje de advertencia:

    Uso de valor no inicializado en la concatenación (.) o de cadena ….

Dejar respuesta

Please enter your comment!
Please enter your name here