ฉันจะเริ่มต้นคอนโซลการโต้ตอบสำหรับ Perl คล้ายกับirbคำสั่งสำหรับ Ruby หรือpythonPython ได้อย่างไร
ฉันจะเริ่มต้นคอนโซลการโต้ตอบสำหรับ Perl คล้ายกับirbคำสั่งสำหรับ Ruby หรือpythonPython ได้อย่างไร
คำตอบ:
คุณสามารถใช้โปรแกรมดีบักเกอร์ perl กับโปรแกรมเบ็ดเตล็ดได้ดังนี้:
perl -de1
นอกจากนี้ยังมีแอพพลิเคชั่นPerl ConsoleของAlexis Sukriehแต่ฉันไม่ได้ใช้
control+ Lไม่ทำงานภายใต้อินเตอร์เฟสคำสั่งนี้ฉันจะรีเฟรชหน้าจอได้อย่างไร
rlwrap) โซลูชัน REPL / console ของ บริษัท อื่นทั้งหมดรวมถึงperlconsoleมีปัญหาในการติดตั้งและมักจะมีข้อ จำกัด มากกว่า
perl -de1ไม่ดีที่ดูเหมือนจะไม่สนับสนุนmyตัวแปรและแฮชก็ใช้งานไม่ได้ด้วยเหตุผลบางอย่าง ...
perlconsoleไม่ต้องทนทุกข์ทรมานจากปัญหาเหล่านี้
Matt Trout ไม่เพียง แต่เขียนบทความเกี่ยวกับ REPL เท่านั้นเขายังเขียนหนึ่ง - Devel :: REPL
ฉันใช้มันไปสักหน่อยและใช้งานได้ดีและอยู่ในระหว่างการพัฒนา
BTW ฉันไม่รู้ว่าทำไมมีคนดัดแปลงคนที่พูดถึงการใช้ "perl -e" จากคอนโซล นี่ไม่ใช่ REPL จริง ๆ แต่มีประโยชน์น่าอัศจรรย์และฉันใช้มันตลอดเวลา
[sudo] cpan Devel::REPLเดียวไม่ได้ผลสำหรับฉันทั้งใน OSX 10.10 (Perl 5.18.2) และ Ubuntu 14.04 (Perl 5.18.2): ฉันได้รับข้อผิดพลาดรันไทม์ที่บ่นเกี่ยวกับโมดูลที่หายไป; ติดตั้งแล้วยกเลิกหลังจากที่โมดูลที่หายไปอีกรายงาน
re.plผู้เขียนเขียนบทความรายการหลายทางเลือกและเขาแนะนำให้ใช้replyแทนre.pl: shadow.cat/blog/matt-s-trout/mstpan-17
ฉันเขียนสคริปต์ที่ฉันเรียกว่า "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>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'นี่เป็นรุ่นนามแฝงเป็นทางเลือก: ผู้ใช้สามารถติดตั้ง OSX rlwrapผ่านHomebrewbrew install rlwrapกับ
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
ฉันคิดว่าคุณกำลังถามเกี่ยวกับอินเตอร์เฟซ REPL (อ่าน, ประเมิน, พิมพ์, วน) ไปยัง Perl มีสองสามวิธีในการทำสิ่งนี้:
ฉันใช้บรรทัดคำสั่งเป็นคอนโซล:
$ perl -e 'print "JAPH\n"'
จากนั้นฉันสามารถใช้ประวัติทุบตีของฉันเพื่อเรียกคืนคำสั่งเก่า อย่างไรก็ตามสิ่งนี้ไม่ได้รักษาสถานะไว้
แบบฟอร์มนี้มีประโยชน์มากที่สุดเมื่อคุณต้องการทดสอบ "สิ่งเล็กน้อย" (เช่นเมื่อตอบคำถาม Perl) บ่อยครั้งที่ฉันพบว่าคำสั่งเหล่านี้ทำให้คำต่อคำถูกคัดลอกลงในเชลล์สคริปต์หรือ makefile
fish \n
ไม่มีคอนโซลแบบโต้ตอบสำหรับ Perl ในตัวเหมือน Python อย่างไรก็ตามคุณสามารถใช้ Perl Debugger เพื่อทำการดีบั๊กที่เกี่ยวข้อง คุณเปิดใช้งานด้วยตัวเลือก -d แต่คุณอาจต้องการตรวจสอบ 'man perldebug' เพื่อเรียนรู้เกี่ยวกับมัน
หลังจาก googling นิดหน่อยมีโครงการแยกต่างหากที่ใช้คอนโซล Perl ซึ่งคุณสามารถหาได้ http://www.sukria.net/perlconsole.html
หวังว่านี่จะช่วยได้!
คุณสามารถวางลงในดีบักเกอร์ในตัวและเรียกใช้คำสั่งจากที่นั่นได้ตลอดเวลา
perl -d -e 1
Perl REPLs ยอดนิยมสองรายการ
sudo apt-get install libreply-perlตอบกลับด้วยคำสั่งต่อไปนี้: จากนั้นมันสามารถเรียกใช้เพียงพิมพ์replyในเทอร์มินัล
ฉันได้สร้างperliเป็นPerl REPLที่ทำงานบนลินุกซ์, MacOS และ Windows
โฟกัสคือการพิมพ์ผลลัพธ์อัตโนมัติค้นหาเอกสารที่สะดวกและตรวจสอบการจับคู่นิพจน์ทั่วไปได้ง่าย
คุณสามารถดูภาพหน้าจอที่นี่
มันทำงานแบบสแตนด์อะโลน (ไม่มีการอ้างอิงอื่น ๆ กว่า Perl ตัวเอง) แต่การติดตั้งrlwrapขอแนะนำเพื่อให้การสนับสนุนการแก้ไขบรรทัดคำสั่งประวัติคำสั่งถาวรและแท็บเสร็จ - อ่านรายละเอียดเพิ่มเติมที่นี่
การติดตั้ง
หากคุณติดตั้ง Node.js:
npm install -g perliมิฉะนั้น:
Unixเหมือนแพลตฟอร์ม: ดาวน์โหลดสคริปต์นี้เป็นไปยังโฟลเดอร์ในเส้นทางของระบบของคุณและทำให้มันปฏิบัติการด้วยperlichmod +x
Windows : ดาวน์โหลดสคริปต์นี้เป็นperli.pl(จดบันทึก.plส่วนขยาย) ไปยังโฟลเดอร์ในเส้นทางของระบบของคุณ
หากคุณไม่สนใจการเรียกใช้ Perli perli.plคุณก็พร้อมแล้ว
มิฉะนั้นให้สร้างแบตช์ไฟล์ชื่อperli.cmdในโฟลเดอร์เดียวกันที่มีเนื้อหาดังต่อไปนี้: @%~dpn.pl %*; perliนี้จะช่วยให้การภาวนาเป็นเพียงแค่
perldocจากperliREPL 'someCommand ?'เช่น ดูเหมือนว่ายังไม่ได้รับการปรับปรุงในขณะที่คุณยังคงรักษามาตรฐาน?
perliยังไม่ได้รับการอัปเดตในขณะที่เนื่องจากการใช้งานส่วนตัวของฉันฉันไม่ได้เจอปัญหาใด ๆ และดูเหมือนว่ามีคนไม่กี่คนที่ใช้มัน แต่เท่าที่ฉันรู้มันก็ยังทำงานได้ตามที่โฆษณาไว้
ฉันมักจะทำ:
rlwrap perl -wlne'eval;print$@if$@'
ด้วย 5.10 ฉันได้เปลี่ยนเป็น:
rlwrap perl -wnE'say eval()//$@'
(rlwrap เป็นตัวเลือก)
perl -d เป็นเพื่อนของคุณ:
% perl -de 0
re.pl จาก Devel :: REPL
วนรอบการอ่าน -eval-print:
$ perl -e'while(<>){print eval,"\n"}'
Perl ไม่มีคอนโซล แต่ตัวดีบั๊กสามารถใช้เป็นหนึ่งได้ perl -de 1ที่พร้อมรับคำสั่งพิมพ์ (ค่า "1" ไม่สำคัญมันเป็นเพียงคำสั่งที่ถูกต้องที่ไม่ทำอะไรเลย)
นอกจากนี้ยังมีคู่ของตัวเลือกสำหรับการเป็นเปลือก Perl
คุณสามารถดู psh ได้ที่นี่: http://gnp.github.io/psh/
มันเป็นแบบเต็มบนเชลล์ (คุณสามารถใช้มันแทนการทุบตี) แต่ใช้ไวยากรณ์ Perl .. เพื่อให้คุณสามารถสร้างวิธีการได้ทันที
ภายใต้ Debian / Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
ภาพรวมของ Matt Trout แสดงรายการตัวเลือกห้าตัวเลือกจากนั้นperl -de 0เป็นต้นไปและเขาแนะนำReplyว่าถ้าการขยายผ่านทางปลั๊กอินเป็นสิ่งสำคัญหรือtinyreplจากEval::WithLexicalsวิธีการแก้ปัญหา perl บริสุทธิ์ที่น้อยที่สุดซึ่งรวมถึงการสนับสนุน readline และการคงอยู่ของคำศัพท์
ปรับปรุง: ฉันได้ตั้งแต่สร้าง REPL ดาวน์โหลด - ดูคำตอบอื่น ๆ ของฉัน
ด้วยประโยชน์ของการเข้าใจถึงปัญหาหลังเหตุการณ์:
rlwrapซึ่งให้การสนับสนุน readline กับคำสั่งใด ๆ คุณสามารถรวมกับคำสั่ง Perl ง่าย ๆ เพื่อสร้าง REPL ที่ใช้งานได้และทำให้ทำโดยไม่ต้องใช้โซลูชั่น REPL ของ บริษัท อื่น
rlwrapผ่านHomebrewbrew install rlwrapกับrlwrapผ่านทางผู้จัดการแพ็คเกจของตน เช่นบน Ubuntu sudo apt-get install rlwrapใช้rlwrapและคำสั่ง Perlสิ่งที่คุณไม่ได้จากคำตอบของJán:
โซลูชันบุคคลที่สามเท่านั้นที่นำเสนอสิ่งเหล่านี้ (ด้วยการติดตั้งแบบไม่สำคัญ + ขั้นตอนเพิ่มเติมที่ไม่ชัดเจน) คือpshแต่:
มันไม่ได้เห็นกิจกรรมในรอบ 2.5 ปี
มุ่งเน้นที่จะแตกต่างกันในการที่จะมีวัตถุประสงค์เพื่อเป็นที่เต็มเปี่ยมทดแทนเปลือกและทำให้การทำงานเช่นเปลือกแบบดั้งเดิมซึ่งหมายถึงว่ามันไม่ได้ประเมินคำสั่งเป็นโดยอัตโนมัติPerlคำสั่งและต้องใช้คำสั่งการส่งออกอย่างชัดเจนเช่นprintการ พิมพ์ผลลัพธ์ของนิพจน์
คำตอบของJánSáreníkสามารถปรับปรุงได้ในทางเดียว:
หากคุณติดตั้งData::Printerโมดูลด้วย[sudo] cpan Data::Printerการดำเนินการเพียงครั้งเดียวคุณสามารถโหลดลงใน REPL สำหรับการใช้งานp()ฟังก์ชั่นซึ่งคุณสามารถส่งรายการ / อาร์เรย์ / แฮชเทเบิลสำหรับการแจงนับ
นี่คือชื่อแทนที่iperlมีชื่อว่าreadline และData::Printerการสนับสนุนซึ่งคุณสามารถใส่ในไฟล์เริ่มต้นของเชลล์คล้าย 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()//$@'\'
ตัวอย่างเช่นคุณสามารถทำสิ่งต่อไปนี้เพื่อพิมพ์ตัวแปรสภาพแวดล้อมทั้งหมดผ่าน hashtable %ENV:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
เช่นเดียวกับคำตอบของJANผลลัพธ์สเกลาร์ของนิพจน์จะถูกพิมพ์โดยอัตโนมัติ เช่น:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
ค้นหา 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
คุณสามารถทำมันออนไลน์ (เช่นหลายสิ่งในชีวิต) ที่นี่:
$ rlwrap perl -d -e 1คุณจะได้รับประวัติและพร้อมท์ที่สอดคล้องกัน