Bienvenido a los foros de Perl en Español, ramiromd.
El problema de la línea 6 son las comillas invertidas.
Verás, las comillas invertidas, en Perl, tienen la misión de crear un entorno shell y ejecutar en él el comando que esté entre ellas.
Ahora, repasa la línea 6:
* estás mandando ejecutar en el sistema (por medio de las comillas invertidas) el comando
sudo /sbin/iwconfig eth1 | grep -i 'Managed'* Al
resultado de la ejecución (lo que se haya recibido por la salida estándar del comando), lo vas a ejecutar con la función system(), que va a hacer lo mismo que las comillas invertidas (crear un shell, etc. etc.)
Es decir... que estás ejecutando dos veces. Una el comando, y otra, el resultado del comando. Es por eso que sale un error: el shell arrancado por el system() no reconoce como un comando válido lo que el primer comando ha devuelto.
Haz esto: cambia las comillas invertidas por comillas dobles (también valdría comillas simples, pero como ya hay comillas simples en el comando, es mejor no mezclarlas -ni liarnos-).
Pero... el resultado de system() no es lo que hayamos recibido por la salida estándar del comando ejecutado, sino el estado (
status) del resultado de la ejecución (un número entero de 8 bits, normalmente.
Viendo el resto del programa, se ve que no es eso lo que quieres, sino el resultado de la ejecución del comando. Necesitamos cambiar system() por otra cosa. Por las comillas simples invertidas, por ejemplo (o por qx(), que hace lo mismo).
Quedaría así:
my $m = `sudo /sbin/iwconfig eth1 | grep -i 'Managed'`;Aprender C y Bash es una gran ventaja para ti, porque Perl hereda muchas de sus propiedades (muchas, muchas). Pero te animo a que profundices un poco más en su rica sintaxis. Por ejemplo, la línea siguiente
printf ("La salida fue: %s \n", $m);en Perl se escribe así:
print "La salida fue: $m \n";y en los últimos dos años (con Perl v5.10):
say "La salida fue: $m";Otro detalle, que está en tus comentarios... las variables '$' no son de un tipo "
string", sino que son escalares, es decir, almacenan un solo valor, que, en este caso, es una cadena de texto. Pero puede que a la línea siguiente sean un número en punto flotante. La cuestión es que sea un solo valor.
En cuanto a libros, del estilo de
Kernighan, quizás sea el
Programming Perl, de
Larry Wall, pero su contenido es, básicamente, lo mismo que si haces
man perlsyn.
En español, hay pocos libros de Perl. Casi toda la documentación está en inglés, aunque unos pocos estamos trabajando para que eso cambie.
Puede servirte, para empezar, este mensaje sobre
Por dónde empezar, que tiene enlaces a lugares interesantes para el que comienza y quiere ser programador de Perl.