Làm cách nào để bắt đầu bảng điều khiển tương tác cho Perl?


Câu trả lời:


297

Bạn có thể sử dụng trình gỡ lỗi perl trên một chương trình tầm thường, như vậy:

perl -de1

Ngoài ra, có ứng dụng Perl Console của Alexis Sukrieh , nhưng tôi chưa sử dụng nó.


27
Nếu bạn muốn một cái gì đó tối thiểu có thể sử dụng, hãy cân nhắc để thêm rlwrap $ rlwrap perl -d -e 1 Bạn sẽ nhận được lịch sử và một dấu nhắc nhất quán
albfan

control+ Lkhông hoạt động trong giao diện lệnh này, tôi nên làm mới màn hình như thế nào?
Thiền

1
Với lợi ích của nhận thức muộn: câu trả lời của Ján Sáreník dường như cung cấp giải pháp gần như tốt nhất (bạn có thể phải cài đặt rlwrap). Tất cả các giải pháp REPL / console của bên thứ ba, bao gồm perlconsole, rất khó cài đặt và thường có nhiều hạn chế hơn.
mkuity0

3
Thật không may, perl -de1dường như không hỗ trợ mycác biến và băm cũng không hoạt động, vì một số lý do vì sao
Geremia

1
perlconsolekhông bị những vấn đề này
Geremia

60

Matt Trout không chỉ viết một bài báo về REPL, anh ấy còn thực sự viết một bài - Devel :: REPL

Tôi đã sử dụng nó một chút và nó hoạt động khá tốt, và nó đang được phát triển tích cực.

BTW, tôi không biết tại sao ai đó sửa đổi người đã đề cập bằng cách sử dụng "perl -e" từ bảng điều khiển. Đây thực sự không phải là REPL, đúng, nhưng nó rất hữu ích và tôi sử dụng nó mọi lúc.


Tôi nghĩ rằng nó đã được giả định rằng tôi đã không hiểu câu hỏi. Tôi đoán tôi sẽ chỉnh sửa nó một chút. ;-)
Jon Ericson

Vào giữa năm 2015: Việc chạy đơn giản [sudo] cpan Devel::REPLkhông hiệu quả với tôi, cả trên OSX 10.10 (Perl 5.18.2) cũng như trên Ubuntu 14.04 (Perl 5.18.2): Tôi gặp lỗi khi chạy khiếu nại về các mô-đun bị thiếu; cài đặt một, sau đó từ bỏ sau khi một mô-đun mất tích khác được báo cáo.
mkuity0 7/07/2015

@ mkuity0 Có cài đặt cpan để tự động tải xuống và xây dựng các mô-đun tiên quyết. Bạn có thể cần phải bật cài đặt đó. Ngoài ra, ứng dụng cpanminus zero-config có thể là một lựa chọn tốt hơn.
Sao biển

@ Starfish: Cảm ơn; để tiết kiệm thời gian của độc giả trong tương lai (vì có vẻ như câu trả lời có thể ngắn): làm thế nào để bạn bật cài đặt này?
mkuity0

1
Nhân tiện, Matt Trout, re.pltác giả, đã viết một bài báo liệt kê một số lựa chọn thay thế, và chính anh ta đề nghị sử dụng replythay vì re.pl: Shadow.cat/blog/matt-s-trout/mstpan-17
Denilson Sá Maia

36

Tôi đã viết một kịch bản mà tôi gọi là "psh":

#! /usr/bin/perl

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

Bất cứ điều gì bạn nhập vào, nó sẽ đánh giá trong 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

4
Điều này chỉ làm việc cho một lớp lót hoặc có thể xử lý mã Perl đa dòng như phân nhánh có điều kiện, vòng lặp, câu lệnh lồng nhau?
David

23

Nếu bạn muốn lịch sử, sử dụng rlwrap . Đây có thể là ~/bin/ipsví dụ của bạn :

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

Và đây là cách nó trông như thế nào:

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

4
Kudos để gói nó độc đáo - hỗ trợ dòng đọc không chỉ cần thiết cho lịch sử, mà còn để chỉnh sửa dòng lệnh. Ngoại trừ hỗ trợ đa dòng, điều này hoạt động tốt; đây là một phiên bản bí danh thay thế : alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'. Người dùng OSX có thể cài đặt rlwrapqua Homebrew với brew install rlwrap.
mkuity0 7/07/2015

Đây là một phiên bản cung cấp một đầu ra đẹp khi biểu thức ước lượng cho một danh sách hoặc một tham chiếu:rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
michau

21

Tôi nghĩ rằng bạn đang hỏi về giao diện REPL (Đọc, Đánh giá, In, Lặp lại) cho perl. Có một số cách để làm điều này:

  • Matt Trout có một bài viết mô tả cách viết
  • Adriano Ferreira đã mô tả một số tùy chọn
  • và cuối cùng, bạn có thể nhảy vào IRC tại irc.perl.org và thử một trong những bot eval trong nhiều kênh phổ biến. Họ sẽ đánh giá khối lượng perl mà bạn chuyển cho họ.

1
Điều Matt Trout đã được xuống vì một số năm trước đây, bạn có thể tìm thấy nó ở đây: web.archive.org/web/20100212100032/http://chainsawblues.vox.com/...
Lepe

1
Matt Trout hiện có một danh sách các REPL cập nhật hơn rất nhiều mà anh ấy đề xuất: Shadow.cat/blog/matt-s-trout/mstpan-17
Davor Cubranic

20

Tôi sử dụng dòng lệnh như một bàn điều khiển:

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

Sau đó, tôi có thể sử dụng lịch sử bash của mình để lấy lại các lệnh cũ. Điều này không bảo tồn nhà nước, tuy nhiên.

Hình thức này hữu ích nhất khi bạn muốn kiểm tra "một điều nhỏ" (như khi trả lời các câu hỏi của Perl). Thông thường, tôi thấy các lệnh này được ghi nguyên văn thành tập lệnh shell hoặc makefile.


1
Với một số vỏ, như fish, bạn thậm chí không cần \n.
phân tích

15

Không có bảng điều khiển tương tác cho Perl được tích hợp như Python. Tuy nhiên, bạn có thể sử dụng Trình gỡ lỗi Perl để gỡ lỗi những thứ liên quan. Bạn bật nó với tùy chọn -d, nhưng bạn có thể muốn kiểm tra 'man perldebug' để tìm hiểu về nó.

Sau một chút loay hoay, có một dự án riêng thực hiện bảng điều khiển Perl mà bạn có thể tìm thấy tại http://www.sukria.net/perlconsole.html .

Hi vọng điêu nay co ich!


Điều kỳ lạ là câu trả lời này không nhận được bất kỳ sự ủng hộ nào, mặc dù nó sớm hơn câu trả lời được chấp nhận và cũng cung cấp thêm một chút thông tin. +1
Junuxx

14

Bạn luôn có thể thả vào trình gỡ lỗi tích hợp và chạy các lệnh từ đó.

   perl -d -e 1

13

Có hai REPL phổ biến.

  1. Devel :: REPL thật tuyệt.
  2. Nhưng IMO Trả lời là tốt hơn.

7
+1 để đề xuất Trả lời. Bản thân tác giả của Devel :: REPL đã đề nghị Trả lời về giải pháp của chính mình khi tôi hỏi về một REPL (bảng điều khiển) tốt trên IRC. Trả lời cũng đi kèm với tự động hoàn thành rất tiện dụng để kiểm tra các phương thức và thuộc tính có sẵn của một đối tượng. Tôi có thể cài đặt Trả lời trên Ubuntu bằng lệnh sau : sudo apt-get install libreply-perl. Sau đó, nó có thể được chạy đơn giản chỉ cần gõ replytrong một thiết bị đầu cuối.
Apterx

Làm thế nào để bạn cài đặt amd chạy Trả lời? Cả Metacpan và trang Github đều không cung cấp hướng dẫn.
Philippe

12

Tôi đã tạo perli, một REPL Perl chạy trên Linux, macOS và Windows .

Trọng tâm của nó là in kết quả tự động, tra cứu tài liệu thuận tiện và kiểm tra dễ dàng các kết quả khớp biểu thức chính quy.
Bạn có thể xem ảnh chụp màn hình ở đây .

Nó hoạt động độc lập (không có phụ thuộc nào ngoài bản thân Perl), nhưng cài đặt rlwrapđược khuyến nghị mạnh mẽ để hỗ trợ chỉnh sửa dòng lệnh, lịch sử lệnh liên tục và hoàn thành tab - đọc thêm tại đây .

Cài đặt

  • Nếu bạn tình cờ cài đặt Node.js:

    npm install -g perli
  • Nếu không thì:

    • Các nền tảng giống như Unix : Tải xuống tập lệnh này dưới dạng perlithư mục trong đường dẫn hệ thống của bạn và làm cho nó có thể thực thi được chmod +x.

    • Windows : Tải xuống tập lệnh này dưới dạng perli.pl(lưu ý .plphần mở rộng) vào một thư mục trong đường dẫn hệ thống của bạn.
      Nếu bạn không phiền gọi Perli như perli.pl, bạn đã sẵn sàng.
      Nếu không, hãy tạo một tệp bó có tên perli.cmdtrong cùng thư mục với nội dung sau : @%~dpn.pl %*; Điều này cho phép gọi như chỉ perli.


1
Tôi thích nó có thể khởi chạy perldoctừ perliREPL như thế nào 'someCommand ?'. Có vẻ như nó chưa được cập nhật trong một thời gian, bạn vẫn đang duy trì perli chứ?
sdkks

1
@sdkks: Nếu bạn tìm thấy một vấn đề, hãy báo cáo nó trên GitHub và tôi sẽ cố gắng khắc phục nó. perliđã không được cập nhật trong một thời gian, bởi vì trong sử dụng cá nhân của tôi, tôi đã không gặp phải bất kỳ vấn đề nào, và rất ít người khác dường như sử dụng nó, nhưng, theo như tôi biết, nó vẫn hoạt động như quảng cáo.
mkuity0

7

Tôi đã luôn luôn làm:

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

Với 5.10, tôi đã chuyển sang:

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

(rlwrap là tùy chọn)



6

re.pl từ Devel :: REPL



4

Perl không có bàn điều khiển nhưng trình gỡ lỗi có thể được sử dụng như một bàn điều khiển. Tại một dấu nhắc lệnh, gõ perl -de 1. (Giá trị "1" không thành vấn đề, đó chỉ là một tuyên bố hợp lệ không có gì.)

Ngoài ra còn có một vài tùy chọn cho vỏ Perl .

Để biết thêm thông tin đọc perlfaq3 .


4

Bạn có thể xem psh tại đây: http://gnp.github.io/psh/

Đó là một shell đầy đủ (ví dụ bạn có thể sử dụng nó để thay thế bash), nhưng sử dụng cú pháp perl .. để bạn có thể tạo các phương thức một cách nhanh chóng, v.v.


3

Trong Debian / Ubuntu:

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

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

3

Tổng quan của Matt Trout liệt kê năm lựa chọn, từ đó perl -de 0trở đi, và ông khuyến nghị Reply, nếu khả năng mở rộng thông qua các plugin là quan trọng, hoặc tinyrepltừ Eval::WithLexicalsmột giải pháp tối thiểu, thuần túy bao gồm hỗ trợ đọc và kiên trì từ vựng.


2

Cập nhật: Tôi đã tạo một REPL có thể tải xuống - xem câu trả lời khác của tôi .

Với lợi ích của nhận thức muộn màng:

  • Các giải pháp của bên thứ ba được đề cập trong số các câu trả lời hiện có là khó cài đặt và / hoặc không hoạt động nếu không có các bước bổ sung không tầm thường, không rõ ràng - một số giải pháp dường như bị bỏ rơi ít nhất một nửa.
  • Một REPL có thể sử dụng cần thư viện readline để hỗ trợ bàn phím chỉnh sửa dòng lệnh và hỗ trợ lịch sử - đảm bảo đây là một điểm rắc rối cho nhiều giải pháp của bên thứ ba.
  • Nếu bạn cài đặt CLI rlwrap, cung cấp hỗ trợ đọc cho bất kỳ lệnh nào, bạn có thể kết hợp nó với lệnh Perl đơn giản để tạo REPL có thể sử dụng và do đó không cần giải pháp REPL của bên thứ ba.
    • Trên OSX, bạn có thể cài đặt rlwrapqua Homebrew với brew install rlwrap.
    • Các bản phân phối Linux nên cung cấp rlwrapthông qua các trình quản lý gói tương ứng của chúng; ví dụ, trên Ubuntu, sử dụng sudo apt-get install rlwrap.
    • Xem câu trả lời của Ján Sáreník để biết sự kết hợp rlwrapvà lệnh Perl đã nói.

Những gì bạn KHÔNG nhận được với câu trả lời của Ján:

  • tự động hoàn thành
  • khả năng nhập báo cáo đa dòng

Giải pháp bên thứ ba duy nhất cung cấp các giải pháp này (với cài đặt không tầm thường + các bước bổ sung, không rõ ràng), là psh , nhưng:

  • nó đã không thấy hoạt động trong khoảng 2,5 năm

  • Trọng tâm của nó là khác nhau ở chỗ nó nhằm mục đích là một full-fledged thay thế vỏ , và do đó hoạt động như một lớp vỏ truyền thống, có nghĩa là nó không tự động đánh giá một lệnh như một Perl tuyên bố, và yêu cầu một lệnh đầu ra rõ ràng như printđể in kết quả của một biểu thức.


Câu trả lời của Ján Sáreník có thể được cải thiện theo một cách:

  • Theo mặc định, nó in các mảng / danh sách / hashtables dưới dạng vô hướng , tức là chỉ in số phần tử của chúng , trong khi đó sẽ rất hữu ích khi liệt kê các phần tử của chúng thay vào đó.

Nếu bạn cài đặt Data::Printermô-đun với [sudo] cpan Data::Printerhoạt động một lần, bạn có thể tải nó vào REPL để sử dụngp() chức năng, để bạn có thể chuyển danh sách / mảng / hashtables để liệt kê.

Đây là một bí danh có tên là iperlreadline và Data::Printerhỗ trợ , bạn có thể đặt tệp khởi tạo của shell giống POSIX của mình (ví dụ ~/.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()//$@'\'

Ví dụ: sau đó bạn có thể thực hiện các thao tác sau để in tất cả các biến môi trường thông qua hashtable %ENV:

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

Như với câu trả lời của Ján, kết quả vô hướng của một biểu thức được tự động in; ví dụ:

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


0

Sepia và PDE cũng có REPL riêng (đối với GNU Emacs).



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.