Pergunta

Eu sou novo no Perl e estou aprendendo.Eu escrevo um script que fornece preenchimento automático de palavras por guia, conforme o bash fornece.Se a entrada não estiver no array definido, ele imprime uma mensagem predefinida e se a entrada estiver no array, ele executa o comando do sistema para o mesmo.

Ele funciona bem de acordo com minhas suposições, mas se eu inserir apenas [caractere, ocorrerá erros que não consigo descobrir por que isso acontece.

Mais uma coisa, suponha, eu digito apenas tab sem nenhum caractere, ele não mostra comandos predefinidos no array.É apenas prompt.

Por favor, me oriente e se eu estiver errado, corrija-me.

Antes de usar scripts bash shell, pois temos a opção -x para depurar durante o tempo de execução, existe alguma opção com Perl para fazer isso?

meu roteiro:

 #!/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";
    }
}

Erro, se eu digitar [:

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

Foi útil?

Solução

[ é um caractere especial em regex, você precisa escapar dele.

Se você ler a entrada do usuário e quiser pesquisar como está, poderá usar \Q e \E:

/\Q$in\E/

Outras dicas

se você gosta de inserir [ como literal, você deve escapar com uma barra invertida (\)

Caso contrário, tem um significado especial em regular expressions

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top