سؤال

كيف يمكنني تشغيل وحدة تحكم تفاعلية لـ Perl، على غرار irb أمر لروبي أو python لبيثون؟

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

المحلول

يمكنك استخدام مصحح أخطاء Perl في برنامج بسيط، مثل:

perl -de1

بدلا من ذلك هناك الكسيس سكريةوحدة تحكم بيرل التطبيق ولكنني لم أستخدمه

نصائح أخرى

لم يكتب مات تراوت مقالًا عن REPL فحسب، بل كتب مقالًا بالفعل - ديفل::REPL

لقد استخدمته قليلاً ويعمل بشكل جيد إلى حد ما، وهو قيد التطوير النشط.

راجع للشغل، ليس لدي أي فكرة عن سبب قيام شخص ما بتعديل الشخص الذي ذكر استخدام "Perl -e" من وحدة التحكم.هذا ليس REPL حقًا، ولكنه مفيد بشكل خيالي، وأنا أستخدمه طوال الوقت.

لقد كتبت نصًا أسميه "psh":

#! /usr/bin/perl

while (<>) {
  chomp;
  my $result = eval;
  print "$_ = $result\n";
}

أيًا كان ما تكتبه، فسيتم تقييمه في لغة Perl:

> gmtime(2**30)
gmtime(2**30) = Sat Jan 10 13:37:04 2004

> $x = 'foo'
$x = 'foo' = foo

> $x =~ s/o/a/g
$x =~ s/o/a/g = 2

> $x
$x = faa

إذا كنت تريد التاريخ، استخدم rlwrap.هذا يمكن أن يكون الخاص بك ~/bin/ips على سبيل المثال:

#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'

وهذه هي الطريقة التي يبدو بها الأمر:

$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl> 

أعتقد أنك تسأل عن واجهة REPL (القراءة والتقييم والطباعة والتكرار) لـ Perl.هناك بضعة طرق لفعل هذا:

  • مات تراوت لديه مقالة الذي يصف كيفية كتابة واحدة
  • أدريانو فيريرا وقد وصف بعض الخيارات
  • وأخيرًا، يمكنك الانتقال إلى IRC على irc.perl.org وتجربة أحد روبوتات التقييم في العديد من القنوات الشهيرة.سيقومون بتقييم أجزاء من لغة Perl التي تمررها إليهم.

أستخدم سطر الأوامر كوحدة تحكم:

$ perl -e 'print "JAPH\n"'

ثم يمكنني استخدام بلدي سحق التاريخ لاستعادة الأوامر القديمة.لكن هذا لا يحافظ على الدولة.

يكون هذا النموذج مفيدًا للغاية عندما تريد اختبار "شيء واحد صغير" (مثل الإجابة على أسئلة Perl).في كثير من الأحيان، أجد أن هذه الأوامر يتم حذفها حرفيًا في برنامج نصي أو ملف تعريفي.

لا توجد وحدة تحكم تفاعلية مدمجة لـ Perl مثل Python.ومع ذلك، يمكنك استخدام Perl Debugger للقيام بتصحيح الأخطاء ذات الصلة.يمكنك تشغيله باستخدام الخيار -d، ولكن قد ترغب في الاطلاع على "man perldebug" للتعرف عليه.

بعد قليل من البحث على Google، يوجد مشروع منفصل يقوم بتنفيذ وحدة تحكم Perl والتي يمكنك العثور عليها http://www.sukria.net/perlconsole.html.

أتمنى أن يساعدك هذا!

يمكنك دائمًا الدخول إلى مصحح الأخطاء المدمج وتشغيل الأوامر من هناك.

   perl -d -e 1

هناك نوعان من إصدارات Perl REPLs المشهورة.
1. ديفل::REPL عظيم.
2.لكن المنظمة البحرية الدولية رد أفضل.

لقد خلقت perli, ، أ بيرل REPL الذي يعمل على لينكس، ماك، وويندوز.

ينصب تركيزه على طباعة النتائج التلقائية ، وبحث الوثائق المريحة ، وفحص سهلة لمباريات التعبير المنتظم.
يمكنك رؤية لقطات الشاشة هنا.

إنها تعمل قائمة بذاتها (ليس له تبعيات غير بيرل نفسها)، ولكن تركيب rlwrap ينصح بشدة وذلك لدعم تحرير سطر الأوامر، وسجل الأوامر المستمر، وإكمال علامات التبويب - اقرأ المزيد هنا.

تثبيت

  • إذا كان لديك Node.js مثبتًا:

    npm install -g perli
    
  • خلاف ذلك:

    • يونكس-مثل المنصات:تحميل هذا البرنامج النصي مثل perli إلى مجلد في مسار نظامك وجعله قابلاً للتنفيذ باستخدام chmod +x.

    • شبابيك:تحميل هذا البرنامج النصي مثل perli.pl (لاحظ ال .pl ملحق) إلى مجلد في مسار النظام الخاص بك.
      إذا كنت لا تمانع في استدعاء Perli كـ perli.pl, ، أنت جاهز تمامًا.
      خلاف ذلك، قم بإنشاء ملف دفعي اسمه perli.cmd في نفس المجلد بالمحتوى التالي: @%~dpn.pl %*;وهذا يسمح بالاستدعاء أيضًا perli.

perl -d هو صديقك:

% perl -de 0

re.pl من Devel::REPL

دايما افعل:

perl -wlne'eval;print$@if$@'

مع الإصدار 5.10، قمت بالتحويل إلى:

perl -wnE'say eval()//$@'

حلقة تقييم القراءة والطباعة:

$ perl -e'while(<>){print eval,"\n"}'

لا تحتوي لغة Perl على وحدة تحكم ولكن يمكن استخدام مصحح الأخطاء كوحدة تحكم.في موجه الأوامر، اكتب perl -de 1.(القيمة "1" غير مهمة، إنها مجرد عبارة صالحة لا تفعل شيئًا.)

هناك أيضًا خياران لـ قذيفة بيرل.

لمزيد من المعلومات اقرأ بيرلفاق3.

يمكنك البحث في psh هنا: http://gnp.github.io/psh/

إنها كاملة على الصدفة (يمكنك استخدامها بدلاً من bash على سبيل المثال)، ولكنها تستخدم بناء جملة Perl..حتى تتمكن من إنشاء طرق سريعة وما إلى ذلك.

تحت ديبيان/أوبونتو:

$ sudo apt-get install libdevel-repl-perl
$ re.pl

$ sudo apt-get install libapp-repl-perl
$ iperl

تحديث:لقد قمت منذ ذلك الحين بإنشاء REPL قابل للتنزيل - انظر إجابتي الأخرى.

مع الاستفادة من الإدراك المتأخر:

  • ال حلول الطرف الثالث المذكورة بين الإجابات الموجودة إما مرهقة التثبيت و/أو لا تعمل بدون خطوات إضافية غير تافهة وغير واضحة - يبدو أن بعض الحلول نصف مهجورة على الأقل.
  • يحتاج REPL القابل للاستخدام إلى مكتبة readline لدعم لوحة المفاتيح لتحرير سطر الأوامر ودعم السجل - التأكد من أن هذا يمثل نقطة ضعف للعديد من حلول الجهات الخارجية.
  • إذا قمت بتثبيت CLI rlwrap, ، الذي يوفر دعمًا للقراءة لأي أمر، يمكنك دمجه مع أمر Perl بسيط لإنشاء REPL قابل للاستخدام, ، وبالتالي الاستغناء عن حلول REPL التابعة لجهات خارجية.
    • على OSX، يمكنك تثبيت rlwrap عبر البيرة المنزلية مع brew install rlwrap.
    • ينبغي أن تقدم توزيعات لينكس rlwrap عبر مديري الحزم الخاصين بهم؛على سبيل المثال، على أوبونتو، استخدم sudo apt-get install rlwrap.
    • يرى إجابة جان سارينيك للجمع المذكور من rlwrap وأمر بيرل.

ما لا تحصل عليه مع إجابة جان:

  • الإكمال التلقائي
  • القدرة على إدخال بيانات متعددة الأسطر

الحل الوحيد من الطرف الثالث الذي يقدم هذه (مع التثبيت غير التافه + الخطوات الإضافية وغير الواضحة)، هو psh, ، لكن:

  • لم تشهد نشاطًا منذ حوالي 2.5 عام

  • تركيزها مختلف من حيث أنها تهدف إلى أن تكون كاملة استبدال القشرة, ، وبالتالي يعمل مثل الصدفة التقليدية، مما يعني أنه لا يقوم تلقائيًا بتقييم الأمر على أنه أمر بيرل بيان، ويتطلب أمر إخراج صريح مثل print لطباعة نتيجة التعبير.


إجابة جان سارينيك يمكن تحسينها بطريقة واحدة:

  • افتراضيا، فإنه طباعة المصفوفات/القوائم/جداول التجزئة كـ العددية, ، أي، يطبع فقط بهم عدد العناصر, ، في حين أنه سيكون من السهل تعداد عناصرها بدلاً من ذلك.

إذا قمت بتثبيت Data::Printer وحدة مع [sudo] cpan Data::Printer كعملية لمرة واحدة، يمكنك تحميلها في REPL لاستخدامها p() وظيفة، والتي يمكنك تمرير القوائم/المصفوفات/جداول التجزئة للتعداد.

هنا الاسم المستعار المسمى iperl مع خط القراءة و Data::Printer يدعم, ، والتي يمكنك وضعها في ملف تهيئة Shell الذي يشبه POSIX (على سبيل المثال، ~/.bashrc):

alias iperl='rlwrap -A -S "iperl> " perl -MData::Printer -wnE '\''BEGIN { say "# Use `p @<arrayOrList>` or `p %<hashTable>` to print arrays/lists/hashtables; e.g.: `p %ENV`"; } say eval()//$@'\'

على سبيل المثال، يمكنك بعد ذلك القيام بما يلي لطباعة كافة متغيرات البيئة عبر التجزئة %ENV:

$ iperl        # start the REPL
iperl> p %ENV  # print key-value pairs in hashtable %ENV

كما هو الحال مع إجابة جان، فإن العددية نتيجة التعبير هي تلقائيا مطبوعة؛على سبيل المثال:

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714

مات تروت ملخص يسرد خمسة اختيارات، من perl -de 0 فصاعدا، ويوصي Reply, ، إذا كانت القابلية للتوسعة عبر المكونات الإضافية مهمة، أو tinyrepl من Eval::WithLexicals, ، للحصول على حل بسيط وبيرل خالص يتضمن دعم القراءة والمثابرة المعجمية.

ابحث أيضًا عن ptkdb على CPAN:http://search.cpan.org/search?query=ptkdb&mode=all

تمتلك Sepia وPDE أيضًا REPLs (لـ GNU Emacs).

انظر أيضًا REPL الأنيق (لـ GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

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