• Publicidad

Pasar texto de un archivo a comando en system RESUELTO

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Pasar texto de un archivo a comando en system RESUELTO

Notapor Dleandro » 2011-01-21 18:14 @801

Hola, soy nuevo en el foro, y estoy aprendiendo a programar en Perl desde principios de este mes (enero).

Escribo porque vengo desde hace varios días leyendo por Internet tutoriales sobre Perl y sigo sin despejar mi duda que pasa por:

Quiero abrir un fichero, leer lo que está escrito e ir pasando cada línea de ese fichero a la consola como si fuera un comando.

Hasta ahora lo que he escrito, sin el resultado esperado, es lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (DATOS,"archivo");
  2.  
  3. #Agrego cada línea de éste en la matriz.
  4. @registros=<DATOS>;
  5.  
  6.  
  7. foreach $dato (@registros)
  8. {
  9.  system ("ls",$dato);
  10. }
  11. # Cierro el fichero abierto
  12. close (DATOS);
  13.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

En la variable $dato es donde veo el mayor problema ya que system() no me reconoce el texto leído como un comando.

¿Es lo ideal para este caso usar system()? ¿Es mejor fgets o foreach() para esta ocasión?.

Quiero aclarar que quiero que system() ejecute dos comandos, es decir, "ls" primero y después lo que aparece en el archivo.

Espero alguna respuesta y desde ya, ¡¡gracias!!
Última edición por Dleandro el 2011-01-21 20:37 @900, editado 1 vez en total
Dleandro
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-01-21 17:44 @781

Publicidad

Re: Pasar texto de un archivo a comando en system

Notapor explorer » 2011-01-21 18:38 @818

Bienvenido a los foros de Perl en Español, Dleandro.

fgets() no existe como función incorporada en Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perldoc -f fgets
No documentation for perl function `fgets' found
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


system() sí que se usa para ejecutar comandos en el sistema, pero no es el único. También están qx() y exec(), además de las comillas invertidas (que son lo mismo que qx()).

De tu código, no veo problemas, salvo que yo quitaría el carácter de fin de línea de las líneas que he leído. Y si se trata de ejecutar el comando "ls" primero, y luego, el comando leído, entonces necesito hacer dos system(), o respetar la sintaxis del entorno de comandos en donde me encuentro, para la ejecución de más de un comando.

Como veo que estás ejecutando "ls", suponemos que estás en un sistema operativo Linux/Unix. Entonces, ahí puedes ejecutar más de un comando separándolos con ';'. Quedaría así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Abrimos el archivo
  2. open (DATOS, "<archivo") or die "ERROR: No puedo abrir archivo: $!\n";
  3.  
  4. # Agrego cada línea de éste en la matriz
  5. @registros = <DATOS>;
  6.  
  7. # Quitamos los caracteres de fin de línea de todas las líneas leídas
  8. chomp(@registros);
  9.  
  10. foreach $dato (@registros) {
  11.     system ("ls; $dato");
  12. }
  13.  
  14. # Cierro el fichero abierto
  15. close (DATOS);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pasar texto de un archivo a comando en system

Notapor Dleandro » 2011-01-21 20:32 @897

Muchísimas gracias, explorer. Funciona a la perfección, lo único que cambié fue en el comando system(), lo apliqué de esta forma: system ("ls", "$dato") ya que quería que el comando "ls" se ejecutara junto a "$dato" (mi idea es aplicarlo a un programa más grande).

El código final quedaría de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Abrimos el archivo
  2.  
  3.       open (DATOS, "<archivo") or die "ERROR: No puedo abrir archivo: $!\n";
  4.    
  5.       # Agrego cada línea de éste en la matriz
  6.    
  7.       @registros = <DATOS>;
  8.    
  9.       # Quitamos los caracteres de fin de línea de todas las líneas leídas
  10.  
  11.       chomp(@registros);
  12.        
  13.       foreach $dato (@registros) {
  14.  
  15.           system ("ls", "$dato");
  16.  
  17.       }
  18.  
  19.       # Cierro el fichero abierto
  20.  
  21.       close (DATOS);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Espero seguir aprendiendo sobre Perl y seguir participando en el foro, en lo posible ayudando (en la medida que aprenda claro :D ). ¡Chau!
Dleandro
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-01-21 17:44 @781


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados