ฉันจะเริ่มต้นคอนโซลการโต้ตอบสำหรับ Perl คล้ายกับirb
คำสั่งสำหรับ Ruby หรือpython
Python ได้อย่างไร
ฉันจะเริ่มต้นคอนโซลการโต้ตอบสำหรับ Perl คล้ายกับirb
คำสั่งสำหรับ Ruby หรือpython
Python ได้อย่างไร
คำตอบ:
คุณสามารถใช้โปรแกรมดีบักเกอร์ 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เหมือนแพลตฟอร์ม: ดาวน์โหลดสคริปต์นี้เป็นไปยังโฟลเดอร์ในเส้นทางของระบบของคุณและทำให้มันปฏิบัติการด้วยperli
chmod +x
Windows : ดาวน์โหลดสคริปต์นี้เป็นperli.pl
(จดบันทึก.pl
ส่วนขยาย) ไปยังโฟลเดอร์ในเส้นทางของระบบของคุณ
หากคุณไม่สนใจการเรียกใช้ Perli perli.pl
คุณก็พร้อมแล้ว
มิฉะนั้นให้สร้างแบตช์ไฟล์ชื่อperli.cmd
ในโฟลเดอร์เดียวกันที่มีเนื้อหาดังต่อไปนี้: @%~dpn.pl %*
; perli
นี้จะช่วยให้การภาวนาเป็นเพียงแค่
perldoc
จากperli
REPL '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
คุณจะได้รับประวัติและพร้อมท์ที่สอดคล้องกัน