• Publicidad

No entiendo system() + @array + split()

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

No entiendo system() + @array + split()

Notapor opmeitle » 2012-07-24 21:49 @951

¡¡Buenas noches!! ¡¡va, por lo menos en Argentina lo es!! Les cuento la inquietud que tengo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. pwd
  2. /home/directorio
  3. ls
  4. archivo1 archivo2
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ls = exec("ls");
  2. my @lsarray = split(/\s+/, $ls);
  3. print "$lsarray[1]\n"; # solución esperada >> "archivo1"
  4. archivo1 archivo2 # lo que sale como No quiero
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Aguardo alguna sugerencia, me estoy iniciando en este lenguaje, unas de las primeras cosas que quiero realizar y ya me topo con algo. ¡¡Saludos!! y gracias.
opmeitle
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-03-23 22:11 @966

Publicidad

Re: No entiendo system() + @array + split()

Notapor explorer » 2012-07-25 05:59 @291

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

Dudo mucho que ese programa te haya funcionado: exec() nunca regresa. Mata el actual proceso Perl y lo sustituye por el programa que va a ejecutar.

Una posible solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ls = qx("ls");         # qx() ejecuta el comando y devuelve la salida producida
  2. my @ls = split " ", $ls;   # La opción " " es especial para split(): corta por todo lo que sea espacio
  3. print "$ls[1]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(Aquí hay un problema extremo: ¿qué pasaría si alguno de los archivos contuviera un espacio en blanco en su nombre?)

Ahora bien, si lo que quieres es tener una lista de los archivos disponibles, se puede hacer de otra manera, sin tener que ejecutar un comando externo, que a lo peor, no existe (caso de estar en Windows).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @ls = glob("*");        # expande "*" en el shell y obtiene los nombres de los archivos
  2. print "$ls[1]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en perldoc -f glob.
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: No entiendo system() + @array + split()

Notapor opmeitle » 2012-07-25 11:13 @509

explorer, gracias por tu respuesta, ¡¡ya me sirvió de mucho cada explicación del código!! Te lo agradezco.

Otra cosa ¿algún libro sobre Perl, para novato, de sugerencia?
opmeitle
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-03-23 22:11 @966

Re: No entiendo system() + @array + split()

Notapor explorer » 2012-07-25 12:00 @542

Libros de Perl hay muchos, pero muy pocos en español. Creo que Anaya Multimedia tenía alguno, hace unos años.

Cuestión de buscar por Internet, desde luego.

Yo, los libro que tengo, son de O'Reilly, en inglés. Y otros que he encontrado por la red.

Por dónde empezar.

Más información: Libros sobre Perl.
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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 18 invitados

cron