كيف يمكنني تشغيل وحدة تحكم تفاعلية لـ Perl؟
-
09-06-2019 - |
سؤال
كيف يمكنني تشغيل وحدة تحكم تفاعلية لـ 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
وأمر بيرل.
- على OSX، يمكنك تثبيت
ما لا تحصل عليه مع إجابة جان:
- الإكمال التلقائي
- القدرة على إدخال بيانات متعددة الأسطر
الحل الوحيد من الطرف الثالث الذي يقدم هذه (مع التثبيت غير التافه + الخطوات الإضافية وغير الواضحة)، هو 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