Foros del Web » Programación para mayores de 30 ;) » Programación General »

Duda variables locales y globales

Estas en el tema de Duda variables locales y globales en el foro de Programación General en Foros del Web. Buenas, Tengo una duda sobre el uso de variables locales y globales. A continuación muestro el código @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PERL: Ver original sub Crear_Nuevas_Stats ...
  #1 (permalink)  
Antiguo 05/07/2010, 09:50
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Duda variables locales y globales

Buenas,

Tengo una duda sobre el uso de variables locales y globales.

A continuación muestro el código

Código PERL:
Ver original
  1. sub Crear_Nuevas_Stats {
  2.     my $answer = 0;
  3.     my $DIRECTORIO_LOGS;
  4.     my $prompt = Term::Menu->new(
  5.         beforetext      => '  '.colored("  HOSTINGS  \n",'underscore cyan'),
  6.         aftertext       => colored("\n - Selecciona el hosting donde apunta la web: ",'cyan'),
  7.         nooptiontext    => '',
  8.         toomanytries    => colored("\n [ERROR] >>> Opcion incorrecta\n", 'bold red'),
  9.         toomanytries    => colored("\n [ERROR] >>> Opcion incorrecta\n", 'bold red'),
  10.     );
  11.     do {
  12.         $answer = $prompt->menu(
  13.             HosAPA01    => ["HosAPA01", 1 ],
  14.             HosAPA02    => ["HosAPA02", 2 ],
  15.             HosIIS01    => ["HosIIS01", 3 ],
  16.             HosIIS02    => ["HosIIS02", 4 ],
  17.             HosIIS03    => ["HosIIS03", 5 ],
  18.             Salir       => ["Salir",    0 ],
  19.         );
  20.     } until ($answer);
  21.  
  22.     if ($answer eq 'HosAPA01') {
  23.         print "Cargando variables para el hosting HosAPA01\n";
  24.         $DIRECTORIO_LOGS = $HOSAPA01_STATS;
  25.         print "$DIRECTORIO_LOGS\n";
  26.         print colored(" [OK] >>> Para HosAPA01 se han encontrado los siguientes directorios:",'bold green'),"\n\n";
  27.         my @ficheros_logs = Existen_Logs();
  28.         if (@ficheros_logs) {
  29.             print colored("\n Coincidencias encontradas:", 'bold green'),"\n @ficheros_logs\n";
  30.         }
  31.     }
  32.     elsif ($answer eq 'HosAPA02') {
  33.         print "Cargando variables para el hosting HosAPA02\n";
  34.     }
  35.     elsif ($answer eq 'HosIIS01') {
  36.         print "Cargando variables para el hosting HosIIS01\n";
  37.     }
  38.     elsif ($answer eq 'HosIIS02') {
  39.         print "Cargando variables para el hosting HosIIS02\n";
  40.     }
  41.         elsif ($answer eq 'HosIIS03') {
  42.         print "Cargando variables para el hosting HosIIS03\n";
  43.     }
  44.     elsif ($answer eq 'Salir') {
  45.         print "Saliendo del programa\n";
  46.     }
  47.     print colored("\n - Pega el directorio donde estan los fichero de logs: ",'cyan');
  48.     $dir_log_name = <STDIN> ;
  49.     print "El directorio es $dir_log_name\n";
  50.     print "Ruta: $DIRECTORIO_LOGS$dir_log_name\n";
  51.  
  52. }

No consigo que última linea me muestre el valor de $DIRECTORIO_LOGS
print "Ruta: $DIRECTORIO_LOGS$dir_log_name\n";

que ha sido asignado dentro del IF (linea 24)
$DIRECTORIO_LOGS = $HOSAPA01_STATS;

He probado usando my y local pero no he conseguido el resultado esperado. Cuando llega al final del código, no tiene valor...

Podéis ayudarme?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 05/07/2010, 10:26
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Respuesta: Duda variables locales y globales

la variable DIRECTORIO_LOGS la declaras dentro del sub Crear_Nuevas_Stats y la usas dentro de ese sub, así que debería de imprimirte el valor...

estás seguro que la línea 24 se ejectura ? porque está en el condicional $answer eq 'HosAPA01'...

Y separa las variables, no queda bien

print "Ruta: $DIRECTORIO_LOGS $dir_log_name\n";

__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 05/07/2010, 15:01
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 6 meses
Puntos: 11
Respuesta: Duda variables locales y globales

Prueba con

print "Ruta: [$DIRECTORIO_LOGS][$dir_log_name]\n";

Así sabes exactamente lo que se está sacando.

Si el problema es que $DIRECTORIO_LOGS no se asigna en ningún sitio más que en la línea 24, debes comprobar que realmente se ejecuta esa línea, y $HOSAPA01_STATS tiene realmente un valor.

Cambia la línea

print "$DIRECTORIO_LOGS\n";

por

print "[$DIRECTORIO_LOGS][$HOSAPA01_STATS]\n";
__________________
JF^D Perl Programming en Español
  #4 (permalink)  
Antiguo 07/07/2010, 02:01
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Duda variables locales y globales

Conseguí que funcionase, había una paranoia rara en medio, como estaba funcionaba :)

Muchas gracias a ambos!

Etiquetas: globales, locales, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:27.