سؤال

أنا جديد مع لغة Perl وأتعلمها.أكتب نصًا يوفر الإكمال التلقائي للكلمات عن طريق علامة التبويب كما يوفرها bash.إذا لم يكن الإدخال في صفيف محدد، فإنه يطبع رسالة محددة مسبقًا وإذا كان الإدخال في صفيف، فسيتم تشغيل أمر النظام لنفسه.

إنه يعمل بشكل جيد وفقًا لافتراضاتي ولكن إذا قمت بإدخال [ حرف فقط، فإنه يعطي أخطاء لا يمكنني العثور على سبب حدوثها.

هناك شيء آخر، لنفترض أنني أكتب علامة التبويب فقط بدون أي حرف، ولا تظهر الأوامر المحددة مسبقًا في المصفوفة. إنها تطالب فقط.

أرجو إرشادي وإذا كنت مخطئا فصححوني.

قبل أن أستخدم نصوص bash Shell حيث لدينا خيار -x لتصحيح الأخطاء أثناء وقت التشغيل، هل هناك أي خيار مع 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 بن

هل كانت مفيدة؟

المحلول

[ هي شخصية خاصة في regex، عليك الهروب منها.

إذا قرأت المدخلات من المستخدم، وتريد البحث كما هو، يمكنك استخدام \Q و \E:

/\Q$in\E/

نصائح أخرى

إذا كنت ترغب في إدراج [ بالمعنى الحرفي يجب عليك الهروب منه بخط مائل عكسي (\)

وإلا فإنه له معنى خاص في regular expressions

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top