it-swarm-id.com

Bagaimana saya bisa memulai konsol interaktif untuk Perl?

Bagaimana saya bisa memulai konsol interaktif untuk Perl, mirip dengan perintah irb untuk Ruby atau python untuk Python?

249
ibz

Anda dapat menggunakan debugger Perl pada program sepele, seperti:

Perl -de1

Atau ada Alexis Sukrieh dari Perl Console aplikasi, tapi saya belum menggunakannya.

280
Daniel Papasian

Matt Trout tidak hanya menulis artikel tentang REPL, ia juga menulis satu - Devel :: REPL

Saya sudah menggunakannya sedikit dan bekerja dengan cukup baik, dan sedang dalam pengembangan aktif.

BTW, saya tidak tahu mengapa seseorang mengubah orang yang disebutkan menggunakan "Perl -e" dari konsol. Ini sebenarnya bukan REPL, benar, tapi ini sangat berguna, dan saya menggunakannya setiap saat.

59
Dave Rolsky

Saya menulis skrip yang saya sebut "psh":

#! /usr/bin/Perl

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

Apa pun yang Anda ketikkan, ia mengevaluasi dalam 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
34
raldi

Jika Anda ingin histori, gunakan rlwrap . Ini bisa menjadi ~/bin/ips Anda misalnya:

#!/bin/sh
echo 'This is Interactive Perl Shell'
rlwrap -A -pgreen -S"Perl> " Perl -wnE'say eval()//[email protected]'

Dan seperti inilah tampilannya:

$ ips
This is Interactive Perl Shell
Perl> 2**128
3.40282366920938e+38
Perl> 
23
Ján Sáreník

Saya pikir Anda bertanya tentang antarmuka REPL (Baca, Evaluasi, Cetak, Ulangi) ke Perl. Ada beberapa cara untuk melakukan ini:

  • Matt Trout memiliki sebuah artikel yang menjelaskan cara menulisnya
  • Adriano Ferreira telah menjelaskan beberapa opsi
  • dan akhirnya, Anda dapat naik IRC di irc.Perl.org dan mencoba salah satu bot eval di banyak saluran populer. Mereka akan mengevaluasi potongan Perl yang Anda berikan kepada mereka.
20
amoore

Saya menggunakan baris perintah sebagai konsol:

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

Kemudian saya dapat menggunakan bash riwayat saya untuk mendapatkan kembali perintah lama. Namun, ini tidak melindungi negara.

Formulir ini paling berguna ketika Anda ingin menguji "satu hal kecil" (seperti saat menjawab pertanyaan Perl). Seringkali, saya menemukan perintah-perintah ini dikikis kata demi kata menjadi skrip Shell atau makefile.

19
Jon Ericson

Tidak ada konsol interaktif untuk Perl yang terpasang seperti yang dilakukan Python. Namun Anda dapat menggunakan Perl Debugger untuk melakukan debugging hal-hal terkait. Anda menyalakannya dengan opsi -d, tetapi Anda mungkin ingin memeriksa 'man perldebug' untuk mempelajarinya.

Setelah sedikit googling, ada proyek terpisah yang mengimplementasikan konsol Perl yang dapat Anda temukan di http://www.sukria.net/perlconsole.html .

Semoga ini membantu!

15
Frank Wiles

Anda selalu bisa masuk ke debugger bawaan dan menjalankan perintah dari sana.

   Perl -d -e 1
14
Clinton Pierce

Saya telah membuat perli , a Perl REPL yang berjalan pada Linux, macOS, dan Windows .

Fokusnya adalah pencetakan hasil otomatis, pencarian dokumentasi yang mudah, dan pemeriksaan mudah terhadap kecocokan ekspresi reguler.
Anda dapat melihat tangkapan layar di sini .

Ia bekerja berdiri sendiri (tidak memiliki dependensi selain Perl itu sendiri), tetapi instalasi rlwrap sangat disarankan untuk mendukung pengeditan baris perintah, riwayat perintah persisten, dan penyelesaian-tab - baca selengkapnya di sini .

Instalasi

  • Jika Anda memiliki Node.js diinstal:

    npm install -g perli
    
  • Jika tidak:

    • Unix - seperti platform: Unduh skrip ini sebagai perli ke folder di jalur sistem Anda dan membuatnya dapat dieksekusi dengan chmod +x.

    • Windows : Unduh skrip ini sebagai perli.pl (perhatikan ekstensi .pl) ke folder di jalur sistem Anda.
      Jika Anda tidak keberatan memanggil Perli sebagai perli.pl, Anda sudah siap.
      Kalau tidak, buat file batch bernama perli.cmd dalam folder yang sama dengan konten berikut: @%~dpn.pl %*; ini memungkinkan doa hanya perli.

11
mklement0

Ada dua REPL Perl yang populer.

  1. Devel :: REPL hebat.
  2. Tapi IMO Jawab lebih baik.
11
Eric Johnson

Perl -d adalah teman Anda:

% Perl -de 0
6
Brian Phillips

re.pl dari Devel :: REPL

6
Johny

Baca-eval-print loop:

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

Saya selalu melakukannya:

Perl -wlne'eval;[email protected][email protected]'

Dengan 5.10, saya telah beralih ke:

Perl -wnE'say eval()//[email protected]'
5
ysth

Anda dapat melihat psh di sini: http://gnp.github.io/psh/

Ini penuh pada Shell (Anda dapat menggunakannya sebagai pengganti bash misalnya), tetapi menggunakan sintaks Perl .. sehingga Anda dapat membuat metode dengan cepat dll.

4
shelfoo

Perl tidak memiliki konsol tetapi debugger dapat digunakan sebagai satu. Pada Prompt perintah, ketik Perl -de 1. (Nilai "1" tidak masalah, itu hanya pernyataan valid yang tidak melakukan apa-apa.)

Ada juga beberapa opsi untuk Perl Shell .

Untuk informasi lebih lanjut baca perlfaq .

4
Michael Carman

Di bawah Debian/Ubuntu:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
3
gavenkoa

Pembaruan: Saya sejak itu membuat REPL yang dapat diunduh _ - lihat jawaban saya yang lain .

Dengan manfaat tinjau balik:

  • Solusi pihak ketiga yang disebutkan di antara jawaban yang ada adalah rumit untuk dipasang dan/atau tidak bekerja tanpa non -trivial, langkah-langkah tambahan yang tidak jelas - beberapa solusi tampaknya setidaknya setengah ditinggalkan.
  • REPLyang dapat digunakan _ membutuhkan perpustakaan readline untuk dukungan papan ketik pengeditan baris perintah dan dukungan riwayat - memastikan ini adalah tempat masalah bagi banyak solusi pihak ketiga.
  • Jika Anda menginstal CLI rlwrap, yang menyediakan dukungan readline untuk perintah apa pun, Anda dapat menggabungkannya dengan perintah Perl sederhana untuk membuat REPL yang dapat digunakan , dan dengan demikian membuat lakukan tanpa solusi REPL pihak ketiga.
    • Pada OSX, Anda dapat menginstal rlwrap via Homebrew dengan _brew install rlwrap_.
    • Distro Linux harus menawarkan rlwrap melalui manajer paket masing-masing; mis., di Ubuntu, gunakan _Sudo apt-get install rlwrap_.
    • Lihat jawaban Ján Sáreník untuk kombinasi kata dari rlwrap dan perintah Perl.

Apa yang TIDAK Anda dapatkan dengan jawaban Ján:

  • pelengkapan otomatis
  • kemampuan untuk memasukkan pernyataan multi-baris

Satu-satunya solusi pihak ketiga yang menawarkan ini (dengan instalasi non-sepele + tambahan, langkah-langkah tidak jelas), adalah psh, tetapi:

  • belum terlihat aktivitas dalam sekitar 2,5 tahun

  • fokusnya berbeda dalam hal ini bertujuan untuk menjadi pengganti Shell penuh , dan dengan demikian berfungsi seperti Shell tradisional, yang berarti ia tidak secara otomatis mengevaluasi perintah sebagai Pernyataan Perl , dan membutuhkan perintah output eksplisit seperti print untuk mencetak hasil ekspresi.


jawaban Ján Sáreník dapat ditingkatkan dengan satu cara:

  • Secara default, ini mencetak array/daftar/hashtable sebagai skalar , yaitu, hanya mencetak jumlah elemen , sedangkan itu akan berguna untuk menghitung elemen mereka sebagai gantinya.

Jika Anda memasang modul Data::Printer dengan _[Sudo] cpan Data::Printer_ sebagai operasi satu kali, Anda dapat memuatnya ke dalam REPL untuk penggunaan fungsi p(), di mana Anda dapat meneruskan daftar/array/hashtables untuk enumerasi.

Berikut ini adalah alias bernama iperl dengan readline dan _Data::Printer_ dukungan , yang dapat Anda masukkan dalam file inisialisasi Shell seperti POSIX Anda (misalnya, _~/.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()//[email protected]'\'
_

Misalnya, Anda dapat melakukan hal berikut untuk mencetak semua variabel lingkungan melalui hashtable _%ENV_:

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

Seperti halnya jawaban Ján, hasil skalar dari ekspresi adalah secara otomatis dicetak; misalnya.:

_iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714
_
2
mklement0

--- Matt Trout ikhtisar mencantumkan lima pilihan, dari _Perl -de 0_ dan seterusnya, dan ia merekomendasikan Reply , jika ekstensibilitas melalui plugin itu penting, atau tinyrepl dari Eval::WithLexicals , untuk solusi minimal, murni-Perl yang mencakup dukungan readline dan ketekunan leksikal.

1
Davor Cubranic

Sepia dan PDE juga memiliki REPL sendiri (untuk GNU Emacs).

0
Johny

Lihat juga Gaya REPL (untuk GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

0
Johny
0
runrig