Perl için etkileşimli bir konsolu nasıl başlatabilirim?


Yanıtlar:


297

Perl hata ayıklayıcısını önemsiz bir programda kullanabilirsiniz, örneğin:

perl -de1

Alternatif olarak Alexis Sukrieh'in Perl Konsolu uygulaması var, ama ben kullanmadım.


27
Minimimal olarak kullanılabilir bir şey istiyorsanız, rlwrap eklemeyi düşünün $ rlwrap perl -d -e 1 Tarih ve tutarlı bir bilgi istemi
alacaksınız

control+ Lbu komut arayüzü altında çalışmıyor, ekranı nasıl yenileyebilirim?
Zen

1
Gezin yararıyla : Ján Sáreník'in cevabı neredeyse en iyi çözümü sunuyor gibi görünüyor (yüklemeniz gerekebilir rlwrap). Tüm üçüncü taraf REPL / konsol çözümlerinin perlconsolekurulumu da zahmetlidir ve genellikle daha fazla sınırlaması vardır.
mklement0

3
Ne yazık ki, değişkenleri perl -de1desteklemiyor gibi görünüyor myve hash'ler de herhangi bir nedenle çalışmıyor ...
Geremia

1
perlconsolebu sorunlardan muzdarip değildir.
Geremia

60

Matt Trout sadece bir REPL hakkında bir makale yazmakla kalmadı, aslında bir tane yazdı - Devel :: REPL

Biraz kullandım ve oldukça iyi çalışıyor ve aktif geliştirme aşamasında.

BTW, birisinin neden konsoldan "perl -e" kullanarak bahsettiği kişiyi değiştirdiğine dair hiçbir fikrim yok. Bu gerçekten bir REPL değil, doğru, ama fevkalade faydalı ve her zaman kullanıyorum.


Sanırım soruyu anlamadığım varsayıldı. Sanırım biraz düzenleyeceğim. ;-)
Jon Ericson

2015'in ortalarından itibaren: [sudo] cpan Devel::REPLNe OSX 10.10 (Perl 5.18.2) ne de Ubuntu 14.04 (Perl 5.18.2) üzerinde koşmak benim için işe yaramadı: Eksik modüller hakkında şikayet eden çalışma zamanı hataları alıyorum; birini takıp başka bir eksik modül bildirildikten sonra vazgeçti.
mklement0

@ mklement0 Önkoşul modülleri otomatik olarak indirmek ve oluşturmak için bir cpan ayarı vardır. Bu ayarı açmanız gerekebilir. Alternatif olarak, sıfır-yapılandırmalı cpanminus uygulaması daha iyi bir seçenek olabilir.
Denizyıldızı

@ Starfish: Teşekkürler; Gelecekteki okuyucuların zamanından tasarruf etmek için (yanıt kısa gibi görünebileceğinden): bu ayarı nasıl açarsınız?
mklement0

1
Bu arada, re.plyazar Matt Trout, birkaç alternatif listeleyen bir makale yazdı ve kendisi replyyerine şunu önerdi re.pl: shadow.cat/blog/matt-s-trout/mstpan-17
Denilson Sá Maia

36

"Psh" dediğim bir senaryo yazdım:

#! /usr/bin/perl

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

Ne yazarsanız yazın, Perl'de şunları değerlendirir:

> 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
Bu yalnızca bir satır için mi çalışır veya koşullu dallanma, döngüler, iç içe ifadeler gibi çok satırlı Perl kodunu işleyebilir mi?
David

23

Tarih istiyorsanız, rlwrap kullanın . Bu sizin ~/bin/ipsörneğiniz olabilir:

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

Ve işte böyle görünüyor:

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

4
Güzelce sarmak için şeref - okuma hattı desteği sadece tarih için değil, aynı zamanda komut satırını düzenlemek için de gereklidir. Çok hatlı destek hariç, bu iyi çalışır; Burada alternatif olarak bir takma sürümü: alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'. OSX kullanıcıları yükleyebilir rlwraparacılığı Homebrew ile brew install rlwrap.
mklement0

İfade bir listeye veya referansa değerlendirildiğinde güzel bir çıktı veren bir sürüm:rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
michau

21

Sanırım perl için bir REPL (Oku, Değerlendir, Yazdır, Döngü) arayüzü soruyorsun. Bunu yapmanın birkaç yolu var:

  • Matt Trout'un nasıl yazılacağını anlatan bir makalesi var
  • Adriano Ferreira bazı seçenekleri açıkladı
  • ve son olarak, irc.perl.org adresinden IRC'ye atlayabilir ve popüler kanalların çoğunda değerlendirme botlarından birini deneyebilirsiniz. Onlara geçtiğiniz perl parçalarını değerlendirecekler.

1
Matt Trout'un
lepe

1
Matt Trout şimdi tavsiye ettiği REPL'lerin çok daha güncel bir listesine sahip: shadow.cat/blog/matt-s-trout/mstpan-17
Davor Cubranic

20

Komut satırını konsol olarak kullanıyorum:

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

Sonra eski komutları geri almak için bash geçmişimi kullanabilirim. Ancak bu durumu korumaz.

Bu form en çok "küçük bir şeyi" test etmek istediğinizde yararlıdır (Perl sorularını yanıtlarken olduğu gibi). Genellikle, bu komutların bir kabuk betiği veya makefile kelimesi kelimesine kazındığını görüyorum.


1
Bazı mermilerle, fishihtiyacın bile yok \n.
trysis

15

Python'da olduğu gibi yerleşik Perl için etkileşimli bir konsol yoktur. Bununla birlikte Perl Hata Ayıklayıcı'yı hata ayıklama ile ilgili şeyler yapmak için kullanabilirsiniz. -D seçeneğiyle açarsınız, ancak bunu öğrenmek için 'man perldebug'a göz atmak isteyebilirsiniz.

Biraz googling yaptıktan sonra, bulabileceğiniz Perl konsolunu uygulayan ayrı bir proje var. http://www.sukria.net/perlconsole.html .

Bu yardımcı olur umarım!


Kabul edilen cevaptan daha erken olmasına ve biraz daha fazla bilgi sağlamasına rağmen, bu cevabın herhangi bir oy almamış olması garip. +1
Junuxx

14

Her zaman yerleşik hata ayıklayıcıya düşebilir ve oradan komutları çalıştırabilirsiniz.

   perl -d -e 1

13

İki popüler Perl REPL var.

  1. Devel :: REPL harika.
  2. Ancak IMO Yanıtı daha iyidir.

7
Yanıtlama önerisi için +1. Devel :: REPL'nin yazarı kendisi IRC'de iyi bir Perl REPL (konsol) hakkında soru sorduğumda kendi çözümünü yanıtla. Yanıt ayrıca, bir nesnenin kullanılabilir yöntemlerini ve niteliklerini incelemek için çok kullanışlı olan otomatik tamamlama ile birlikte gelir. Aşağıdaki komutla Ubuntu Cevap yükleyebilir: sudo apt-get install libreply-perl. Sonra sadece replybir terminalde yazarak çalıştırılabilir .
Apteryx

Amd run Cevap nasıl kurulur? Ne Metacpan ne de Github sayfası talimat vermez.
Philippe

12

Linux, macOS ve Windows üzerinde çalışan perlibir Perl REPL oluşturdum .

Odak noktası otomatik sonuç yazdırma, uygun belge aramaları ve düzenli ifade eşleşmelerinin kolay denetimi.
Ekran görüntülerini burada görebilirsiniz .

Tek başına çalışır (Perl'den başka bir bağımlılığı yoktur), ancak komut satırı düzenlemesini, kalıcı komut geçmişini ve sekme tamamlamayı desteklemek için kurulumu rlwrapşiddetle önerilir - buradan daha fazla bilgi edinin .

Kurulum

  • Node.js yüklüyse:

    npm install -g perli
  • Aksi takdirde:

    • Unix platformlarında -like: İndir Bu senaryoyu olarak perlisisteminizin yolunda bir klasöre ile çalıştırılabilir hale chmod +x.

    • Windows : Bu komut dosyasını sistem yolundaki bir klasöre perli.pl( .pluzantıyı not edin ) olarak indirin .
      Perli'yi şu şekilde çağırmanın sakıncası yoksa perli.pl, hazırsınız demektir.
      Aksi takdirde, perli.cmdaşağıdaki içerikle aynı klasörde bir toplu iş dosyası oluşturun @%~dpn.pl %*:; bu da çağrıyı mümkün kılar perli.


1
Ben başlatabilir mi perldocdan perligibi repl 'someCommand ?'. Görünüşe göre bir süredir güncellenmemiş, hala perli mi koruyorsun?
sdkks

1
@sdkks: Eğer bir sorununuz bulursanız, do GitHub üzerinde rapor ve bunu düzeltmek için çalışacağım. perlibir süredir güncellenmedi, çünkü kişisel kullanımımda herhangi bir sorunla karşılaşmadım ve birkaç kişi bunu kullanıyor gibi görünüyor, ancak bildiğim kadarıyla hala reklamı yapıldığı gibi çalışıyor.
mklement0

7

Her zaman yaptım:

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

5.10 ile geçiş yaptım:

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

(rlwrap isteğe bağlıdır)



6

Devel'den re.pl :: REPL


5

Okuma-değerlendirme-yazdırma döngüsü:

$ perl -e'while(<>){print eval,"\n"}'

4

Perl'in bir konsolu yok, ancak hata ayıklayıcı bir olarak kullanılabilir. Komut istemine yazın perl -de 1. ("1" değeri önemli değildir, yalnızca hiçbir şey yapmayan geçerli bir ifadedir.)

Ayrıca Perl kabuğu için birkaç seçenek var .

Daha fazla bilgi için perlfaq3'ü okuyun .


4

Burada psh'yi inceleyebilirsiniz: http://gnp.github.io/psh/

Kabuk dolu (örneğin bash'ın yerine kullanabilirsiniz), ancak perl sözdizimini kullanır .. böylece anında yöntemler oluşturabilirsiniz.


3

Debian / Ubuntu altında:

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

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

3

Matt Alabalık bakış listeleri beş ila seçimler perl -de 0sonrası ve o önerir Replyeklentileri aracılığıyla genişletilebilirlik önemlidir, yoksa eğer, tinyreplgelen Eval::WithLexicalsTaleb destek ve sözcük kalıcılığını içeren minimal, saf-perl çözüm için.


2

Güncelleme: O zamandan beri indirilebilir bir REPL oluşturdum - diğer cevabımı görün .

Gezin faydası ile:

  • Üçüncü taraf çözümleri mevcut yanıtlar arasında söz ya şunlardır yüklemek için hantal ve / veya önemsiz olmayan, belirgin olmayan ek adımlar olmadan işi yok - bazı çözümler gibi görünen en az yarım terk etti.
  • Kullanılabilir bir REPL, komut satırı düzenleme klavye desteği ve geçmiş desteği için readline kütüphanesine ihtiyaç duyar - bu, birçok üçüncü taraf çözümü için sorunlu bir nokta olmasını sağlar.
  • Herhangi rlwrapbir komuta readline desteği sağlayan CLI yüklerseniz , kullanılabilir bir REPL oluşturmak için basit bir Perl komutuyla birleştirebilir ve böylece üçüncü taraf REPL çözümleri olmadan bunu yapabilirsiniz.
    • OSX üzerinde, yükleyebilir rlwraparacılığıyla Homebrew ile brew install rlwrap.
    • Linux dağıtımları rlwrapilgili paket yöneticileri aracılığıyla sunmalıdır ; örneğin, Ubuntu üzerinde kullanın sudo apt-get install rlwrap.
    • Söz konusu kombinasyon rlwrapve Perl komutu için Ján Sáreník'in cevabına bakınız .

Alacağınız OLMAYAN Ne Jan'ın cevap:

  • otomatik tamamlama
  • çok satırlı ifadeler girme yeteneği

Bunları (önemsiz olmayan kurulum + ek, açık olmayan adımlar ile) sunan tek üçüncü taraf çözümü psh'dir , ancak:

  • yaklaşık 2.5 yıldır faaliyet göstermedi

  • onun odak o tam teşekküllü olmayı hedeflediği farklıdır kabuk değiştirme ve böylece otomatik olarak bir komut değerlendirmek etmediğini araçlarının geleneksel kabuk, gibi çalışır Perl açıklamada, ve bu şekilde açık bir çıkış komutu gerektirir printiçin ifadenin sonucunu yazdırır.


Ján Sáreník'in cevabı bir şekilde geliştirilebilir:

  • Varsayılan olarak, dizileri / listeleri / hashtable'ları skaler olarak yazdırır, yani yalnızca öğe sayısını yazdırır, bunun yerine öğelerini numaralandırmak yararlı olacaktır.

Eğer yüklerseniz Data::Printerile modül [sudo] cpan Data::Printerbir kerelik operasyonu olarak, sen kullanımı için repl içine yükleyebilirsiniz p()Eğer sayımı için listeleri / diziler / hashtables geçebildiği işlevin.

POSIX benzeri kabuğunuzun başlatma dosyasına (ör. ) Koyabileceğiniz readline ve support adındaiperlData::Printer bir takma ad~/.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()//$@'\'

Örneğin, tüm ortam değişkenlerini hashtable üzerinden yazdırmak için aşağıdakileri yapabilirsiniz %ENV:

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

Ján'ın cevabında olduğu gibi, bir ifadenin skaler sonucu otomatik olarak yazdırılır; Örneğin:

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


0

Sepya ve PDE'nin de kendi REPL'leri vardır (GNU Emacs için).



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.