Programación Web y Scripting > Perl

 Re: Fich. Unix con Perl

<< < (2/2)

cedosd:
Hola de nuevo, Avalon!.
Necesito de nuevo tu ayuda. Al pasar el programa a CGI me da error en la linea:
@contenido = <INPUT>;

con el error:
Global symbol "@contenido" requires explicit package name at ./prueba.cgi line
22.

Yo no se si es que la he definido mal o que...¿sabeis que puede ser?
Gracias de nuevo.

Avalon:
Así a bote pronto lo único que se me ocurre es que estés utilizando la claúsula use strict en tu código, con lo cuál deberías declarar el array @contenido antes de poder utilizarlo como variable.

Espero que sea eso. Si sigue dándote el error, adjunta el código completo en un mensaje e intentaré ayudarte.

Salu2,
Avalon

cedosd:
Efectivamente, estaba usando use strict, lo he quitado y me sigue pasando  lo mismo (si es que soy un novato!!!)
A ver si tu puedes:

#!/usr/bin/perl  -w
use CGI;

my $q   = new CGI;
my $rtr = $q->param ( "rtr" );
my $calle = $q->param ( "calle" );
my $mac = $q->param ( "mac" );
my $ip = $q->param ( "ip" );

print $q->header( "text/plain" );

# abres el fichero
open INPUT, "/home/oper/noc/fichero.txt");

# guardas todo el contenido del fichero en una variable
my @contenido = <INPUT>;

# cierras el fichero
close(INPUT);

# recorres los datos del fichero
foreach $linea (@contenido) {

   chop($linea);

   # se busca la lmnea que contiene el texto que nos interesa
   if ($linea =~ /b$rtr/i)
        {
      push(@nuevosdatos, $linea . "n");

      # Si se ha encontrado el texto, aqum aqadirmas las lmneas que quieres
 insertar
      push(@nuevosdatos, "}n");
      push(@nuevosdatos, "# C/ $calle n");
      push(@nuevosdatos, "  host ALO_00{ n");
      push(@nuevosdatos, "  hardware ethernet  $mac; n");
      push(@nuevosdatos, "  fixed_address $ip; n");
        }

   else {
      # se deja la lmnea como estaba
      push(@nuevosdatos, $linea . "n");
   }
}

# Ahora vuelcas los nuevos datos en el fichero, borrando los datos que cont
enma anter
#iormente

open(OUTPUT, "+< fichero.txt");

foreach $linea (@nuevosdatos) {
   print OUTPUT $linea;
}

close(OUTPUT);



Gracias de antemano, Avalon!!

Avalon:
Hola de nuevo.

La verdad es que no sabría decirte donde puede estar el problema. He estado probando el código y me funciona bién, salvo un error que es debido a un paréntesis que falta en esta línea:

# abres el fichero
open (INPUT, "/home/oper/noc/fichero.txt");

No se si el paréntesis se habrá perdido cuando has copiado el código, pero como esa línea está justo encima de la que te da el error, quizá podría estar ahí el asunto, no lo sé.

Siento no poder ser más preciso.

Salu2 y buena suerte,
Avalon

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa