문제
나는 새로운 펄 및 학습니다.나는 스크립트를 작성하고 제공하는 단어를 자동 완성하여 탭으로 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
제휴하지 않습니다 StackOverflow