Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Directiva strict  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2011-11-15 05:06 @254

Perlero Nuevo
Registrado: 2009-07-13 07:29 @353
Mensajes: 60
Directiva strict
Hola a todos.

Si utiliza la directiva strict, Win32::Perms y opendir, el programa me falla.

Ejemplo:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. use strict;
  2. use Win32::Perms;
  3.  
  4. my $user = Win32::Perms->new($fichero)->Owner;
  5. print "$user\n";
  6.  
  7. opendir(DIR, $otroFichero);
  8. @array = readdir(DIR);
  9. foreach my $key (@array) {
  10. print "$key\n";
  11. }

Si elimino lo relativo a Win32::Perms, el programa funciona.

Como podéis observar, no tiene relación lo que hace Win32::Perms con lo que hace opendir(), me refiero a que no utilizan variables comunes, son dos partes completamente independientes... al menos en teoría :S.

Es sólo un ejemplo, por lo que no he inicializado variables ni nada por el estilo.

Edito: El error que me da es el siguiente:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Can´t use string ("2") as a symbol ref while "strict refs" in use at ejemplo.pl line 14

La línea 14, en este caso hace referencia a opendir().

No entiendo por qué hace referencia al valor "2" ¿¿??

Muchas gracias.

Un saludo,
Ricar.


Nota 2011-11-15 05:58 @290
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Directiva strict
A ver... con el 'strict' activado, daría el aviso de que la variable $otroFichero no está declarada antes.

Faltan líneas a ese ejemplo...

¿Puedes poner un ejemplo completo, con el menor número de líneas, en donde se repita el error?

_________________
JF^D Perl programming


Nota 2011-11-15 06:13 @301

Perlero Nuevo
Registrado: 2009-07-13 07:29 @353
Mensajes: 60
Re: Directiva strict
Ya lo había advertido.

Ejemplo completo.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.    
  2. use strict;
  3. use Win32::Perms;
  4.  
  5. my $fichero = "C:\\temp";
  6. my $otroFichero = "C:\\Perl";
  7. my $user = undef;
  8. my @array;
  9.  
  10. $user = Win32::Perms->new($fichero)->Owner;
  11. print "$user\n";
  12.      
  13. opendir(DIR, $otroFichero);
  14. @array = readdir(DIR);
  15. foreach my $key (@array) {
  16. print "$key\n";
  17. }
  18.  


Muchas gracias.

Un saludo,
Ricar.


Nota 2011-11-15 08:54 @412
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Directiva strict
Estoy sospechando que el error está, realmente, en la línea 10... al pasar el objeto del new() al Owner().

_________________
JF^D Perl programming


Nota 2011-11-15 12:25 @559

Perlero Nuevo
Registrado: 2009-07-13 07:29 @353
Mensajes: 60
Re: Directiva strict
Hola explorer.

No está ahí el error.

Si comentas todo lo relativo a Win32::Perms. El programa funciona.
Si comentas lo relativo a opendir() y descomentas lo anterior. El programa funciona.
Si vuelves a comentar lo relativo a Win32::Perms, excepto el "use Win32::Perms" y descomentas lo relativo a opendir, el programa falla.

No sé si me he explicado correctamente. Digamos que son dos programas independientes que funcionan correctamente por separado, pero si los unes...

El problema está entre Win32::Perms y opendir() pero desde que accedes al módulo (use) del primero.

Un saludo,
Ricar.


Nota 2011-11-15 15:11 @674
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Directiva strict  RESUELTO
Vale, aceptemos entonces que el tema esté en el opendir()... entonces...

1.- Lo primero, quitaría el 'DIR', y lo sustituiría por una variable local. Algo así:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. opendir(my $DIR, $otroFichero);
  2. @array = readdir($DIR);
  3. closedir $DIR;


2.- Segundo (si no funciona la primera opción), es, obligar a que use la función opendir() de Perl (quizás el módulo tiene definido su propia función opendir()). Así:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. CORE::opendir(my $DIR, $otroFichero);
  2. @array = readdir($DIR);
  3. closedir $DIR;

_________________
JF^D Perl programming


Nota 2011-11-16 03:06 @171

Perlero Nuevo
Registrado: 2009-07-13 07:29 @353
Mensajes: 60
Re: Directiva strict
Hola explorer.

La primera opción es válida. Pensaba que el error estaría en el fichero de entrada... pero como en las buenas películas, el "culpable" era otro :P.

Muchas gracias.

Un saludo,
Ricar.


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO