Pregunta

Soy nuevo con Perl y lo estoy aprendiendo.Escribo un script que proporciona autocompletar palabras mediante tabulación como lo proporciona bash.Si la entrada no está en una matriz definida, imprime un mensaje predefinido y si la entrada está en una matriz, ejecuta el comando del sistema para el mismo.

Funciona bien según mis suposiciones, pero si ingreso solo [carácter, da errores que no puedo encontrar, por qué sucede.

Una cosa más, supongamos, escribo solo tabulador sin ningún carácter, no muestra comandos predefinidos en una matriz. Solo me indica.

Por favor guíenme y si me equivoco corríjanme.

Antes de usar scripts de shell bash, tenemos la opción -x para depurar durante el tiempo de ejecución, ¿hay alguna opción con Perl para hacer eso?

mi guión:

 #!/usr/bin/perl

 use Term::Complete;
 use List::Util 'first';

 @cmd = qw/ls uptime clear/;
 while (defined @cmd) {

     $in = Complete('prompt', @cmd);
     if (first { /$in/ } @cmd) {

         system($in);
     }
     elsif ($in eq 'exit') {

         `kill -9 $$`;
     }
     else {

         print "Use these commands: ls uptime clear";
    }
}

Error, si ingreso [:

perl tab1.pl 
prompt uptime
12:02:31 up  3:29,  2 users,  load average: 0.00, 0.00, 0.00
prompt [
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE / at tab1.pl line 8.

Br Ben

¿Fue útil?

Solución

[ es un carácter especial en expresiones regulares, debes escapar de él.

Si lee la entrada del usuario y desea buscar tal como está, puede usar \Q y \E:

/\Q$in\E/

Otros consejos

Si le gusta insertar [ como literal, debe escaparlo con Backslash (\)

De lo contrario tiene un significado especial en regular expressions

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top