문제

나는 새로운 펄 및 학습니다.나는 스크립트를 작성하고 제공하는 단어를 자동 완성하여 탭으로 bash 제공합니다.는 경우에 입력하지 않에서 정의 배열을,그것을 인쇄 미리 정의된 메시지를 입력하는 경우에 배열한 다음 실행 시스템에 대한 명령을 동일합니다.

그것은 잘 실행으로 당 내 가정을 하지만 만약 내가 입력 단[문자,그는 오류를 찾을 수 없습니다 왜 발생합니다.

한가지 더,가,나는 유형 단 탭없이 모든 문자,그렇지 않을 보여줍 미리 정의된 명령을 배열입니다.그것은 단지합니다.

친절하게 안내하고 경우,잘못된 저를 수정하시기 바랍니다.

기 전에 내가 사용하 bash 쉘 스크립트에서는 우리에게 있는 옵션을하는 동안 디버깅을 실행할 시간이 없는 옵션과 함께 Perl 는 그렇게 하라고 하셨을까?

내 스크립트:

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

오류,내가 입력하는 경우[:

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 벤

도움이 되었습니까?

해결책

[는 정규식의 특수 문자이며, 이탈해야합니다.

사용자의 입력을 읽고 그대로 검색하고 싶다면 \Q\E를 사용할 수 있습니다.

/\Q$in\E/
.

다른 팁

만약 당신이 좋아하는 삽입 [ 리터럴 당신은 탈출해야와 백슬래시(\)

그렇지 않으면 그것은 특별한 의미에서 regular expressions

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top