Jak mogę uruchomić interaktywną konsolę dla Perla?


Odpowiedzi:


297

Możesz użyć debugera Perla w trywialnym programie, na przykład:

perl -de1

Alternatywnie jest aplikacja Perla na konsoli Alexis Sukrieh , ale jej nie używałem.


27
Jeśli chcesz czegoś minimalnie użytecznego, rozważ dodanie rlwrap. $ rlwrap perl -d -e 1 Otrzymasz historię i spójny monit
albfan

control+ Lnie działa w tym interfejsie poleceń, jak powinienem odświeżyć ekran?
Zen

1
Z perspektywy czasu: odpowiedź Jána Sáreníka wydaje się być najlepszym rozwiązaniem od razu po wyjęciu z pudełka (być może trzeba będzie zainstalować rlwrap). Wszystkie rozwiązania REPL / konsoli innych firm, w tym perlconsole, są kłopotliwe w instalacji i często mają więcej ograniczeń.
mklement0

3
Niestety, perl -de1nie wydaje się wsparcia myzmiennych i skróty nie działają albo z jakiegoś powodu ...
Geremia

1
perlconsolenie cierpi z powodu tych problemów.
Geremia,

60

Matt Trout nie tylko napisał artykuł o REPL, ale napisał jeden - Devel :: REPL

Użyłem go trochę i działa dość dobrze i jest w trakcie aktywnego rozwoju.

BTW, nie mam pojęcia, dlaczego ktoś zmodyfikował osobę, która wspomniała o użyciu „perl -e” z konsoli. To nie jest tak naprawdę REPL, prawda, ale jest fantastycznie przydatne i używam go cały czas.


Myślę, że założono, że nie rozumiem pytania. Chyba go trochę zmodyfikuję. ;-)
Jon Ericson

Od połowy 2015 r .: po prostu uruchomienie [sudo] cpan Devel::REPLnie działało dla mnie, ani na OSX 10.10 (Perl 5.18.2), ani na Ubuntu 14.04 (Perl 5.18.2): dostaję błędy w czasie wykonywania narzekające na brakujące moduły; zainstalowałem jeden, a potem zrezygnowałem po zgłoszeniu kolejnego brakującego modułu.
mklement0

@ mklement0 Istnieje ustawienie cpan do automatycznego pobierania i budowania wymaganych modułów. Może być konieczne włączenie tego ustawienia. Alternatywnie, lepszym rozwiązaniem może być aplikacja cpanminus o zerowej konfiguracji .
Rozgwiazda

@Starfish: Thanks; aby zaoszczędzić czas przyszłych czytelników (ponieważ wydaje się, że odpowiedź może być krótka): jak włączyć to ustawienie?
mklement0

1
Nawiasem mówiąc, re.plautor Matt Trout napisał artykuł wymieniający kilka alternatyw, a on sam sugeruje użycie replyzamiast re.pl: shadow.cat/blog/matt-s-trout/mstpan-17
Denilson Sá Maia

36

Napisałem skrypt, który nazywam „psh”:

#! /usr/bin/perl

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

Cokolwiek wpiszesz, ocenia w Perlu:

> 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
Czy działa to tylko dla jednej linijki, czy może obsługiwać wieloliniowy kod Perla, taki jak rozgałęzienie warunkowe, pętle, instrukcje zagnieżdżone?
David

23

Jeśli chcesz historii, użyj rlwrap . Może to być ~/bin/ipsna przykład Twój :

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

A tak to wygląda:

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

4
Wyrazy uznania za miłe podsumowanie - wsparcie readline jest potrzebne nie tylko do historii, ale także do edycji wiersza poleceń. Z wyjątkiem obsługi wielu linii, działa to dobrze; oto wersja alias jako alternatywę: alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'. Użytkowników OSX można zainstalować rlwrappoprzez Homebrew z brew install rlwrap.
mklement0

Oto wersja, która daje niezły wynik, gdy wyrażenie rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
przekształca

21

Myślę, że pytasz o interfejs REPL (odczyt, ocena, drukowanie, pętla) dla perla. Można to zrobić na kilka sposobów:

  • Matt Trout ma artykuł opisujący, jak go napisać
  • Adriano Ferreira opisał kilka opcji
  • wreszcie możesz wskoczyć na IRC na irc.perl.org i wypróbować jednego z eval botów na wielu popularnych kanałach. Będą oceniać fragmenty perla, które im przekażesz.

1
Artykuł Matta Trouta jest niedostępny
lepe

1
Matt Trout ma teraz o wiele bardziej aktualną listę REPL, które poleca: shadow.cat/blog/matt-s-trout/mstpan-17
Davor Cubranic,

20

Używam wiersza polecenia jako konsoli:

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

Następnie mogę użyć mojej historii bashów, aby odzyskać stare polecenia. To jednak nie zachowuje stanu.

Ten formularz jest najbardziej przydatny, gdy chcesz przetestować „jedną małą rzecz” (na przykład odpowiadając na pytania Perla). Często okazuje się, że polecenia te są dosłownie zdrapywane do skryptu powłoki lub makefile.


1
W przypadku niektórych pocisków fishnawet nie potrzebujesz \n.
próbuje

15

Nie ma wbudowanej interaktywnej konsoli dla Perla, tak jak Python. Możesz jednak użyć Debugera Perla do debugowania powiązanych rzeczy. Włączasz ją z opcją -d, ale możesz chcieć sprawdzić „man perldebug”, aby się o tym dowiedzieć.

Po trochę googlingu, istnieje oddzielny projekt, który implementuje konsolę Perl, którą można znaleźć na http://www.sukria.net/perlconsole.html .

Mam nadzieję że to pomoże!


Dziwne, że ta odpowiedź nie otrzymała żadnych pozytywnych opinii, mimo że była wcześniejsza niż odpowiedź zaakceptowana i zawiera nieco więcej informacji. +1
Junuxx

14

Zawsze możesz po prostu wpaść do wbudowanego debuggera i uruchomić z niego polecenia.

   perl -d -e 1

13

Istnieją dwa popularne Perl REPL.

  1. Devel :: REPL jest świetny.
  2. Ale odpowiedź IMO jest lepsza.

7
+1 za polecanie Odpowiedz. Sam autor Devel :: REPL polecił Odpowiedz nad swoim własnym rozwiązaniem, gdy pytam o dobry Perl REPL (konsola) na IRC. Odpowiedź zawiera również funkcję autouzupełniania, która jest bardzo przydatna do sprawdzania dostępnych metod i atrybutów obiektu. Mogę zainstalować Odpowiedź na Ubuntu za pomocą następującego polecenia: sudo apt-get install libreply-perl. Następnie można go uruchomić, wpisując replyterminal.
Apteryx

Jak zainstalować amd run Odpowiedz? Ani strona Metacpan, ani strona Github nie zawierają instrukcji.
Philippe

12

Stworzyłem perli, Perl REPL, który działa w systemie Linux, macOS i Windows .

Koncentruje się na automatycznym drukowaniu wyników, wygodnym wyszukiwaniu dokumentacji i łatwej kontroli dopasowań wyrażeń regularnych.
Można zobaczyć zdjęcia tutaj .

Działa autonomicznie (nie ma żadnych innych zależności niż sam Perl), ale zdecydowanie zaleca się instalację,rlwrap aby wesprzeć edycję wiersza poleceń, trwałą historię poleceń i uzupełnianie tabulatorów - czytaj więcej tutaj .

Instalacja

  • Jeśli akurat masz zainstalowany Node.js:

    npm install -g perli
  • Inaczej:

    • Unix -jak platformach: Pobierz ten skrypt jako perlido folderu w ścieżce systemu i uczynić go wykonywalnym z chmod +x.

    • Windows : Pobierz ten skrypt jako perli.pl(zwróć uwagę na .plrozszerzenie) do folderu na ścieżce systemu.
      Jeśli nie masz nic przeciwko inwokowaniu Perli jako perli.pl, wszystko jest gotowe.
      W przeciwnym razie utwórz plik wsadowy o nazwie perli.cmdw tym samym folderze o następującej treści @%~dpn.pl %*:; umożliwia to wywołanie jako słuszne perli.


1
Podoba mi się, że można uruchomić perldocz perliREPL jak 'someCommand ?'. Wygląda na to, że od jakiegoś czasu nie był aktualizowany, czy nadal utrzymujesz Perli?
sdkks,

1
@sdkks: Jeśli znajdziesz problem, zgłoś go na GitHub, a ja postaram się go naprawić. perliod jakiegoś czasu nie był aktualizowany, ponieważ do mojego osobistego użytku nie natknąłem się na żadne problemy i wydaje się, że niewiele osób go używa, ale o ile wiem, nadal działa tak, jak reklamowano.
mklement0

7

Zawsze robiłem:

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

W wersji 5.10 zmieniłem na:

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

(rlwrap jest opcjonalny)



6

re.pl z Devel :: REPL



4

Perl nie ma konsoli, ale debugger może być używany jako jeden. W wierszu polecenia wpisz perl -de 1. (Wartość „1” nie ma znaczenia, to tylko prawidłowe stwierdzenie, które nic nie robi.)

Istnieje również kilka opcji dla powłoki Perla .

Aby uzyskać więcej informacji, przeczytaj perlfaq3 .


4

Możesz zajrzeć do psh tutaj: http://gnp.github.io/psh/

Jest pełny w powłoce (możesz go użyć na przykład zamiast basha), ale używa składni perla .. więc możesz tworzyć metody w locie itp.


3

W obszarze Debian / Ubuntu:

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

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

3

Przegląd Matta Trouta wymienia pięć opcji, perl -de 0począwszy od tego , i zaleca Reply, jeśli rozszerzalność za pomocą wtyczek jest ważna, lub tinyreplod Eval::WithLexicals, dla minimalnego, czysto perlowego rozwiązania, które obejmuje wsparcie readline i trwałość leksykalną.


2

Aktualizacja: Od tego czasu stworzyłem REPL do pobrania - patrz moja inna odpowiedź .

Z perspektywy czasu:

  • Rozwiązania innych firm wymienione wśród istniejących odpowiedzi są albo kłopotliwe w instalacji i / lub nie działają bez trywialnych, nieoczywistych dodatkowych kroków - niektóre rozwiązania wydają się być co najmniej w połowie zaniechane.
  • Użyteczna REPL potrzebuje biblioteki readline do obsługi klawiatury wiersza poleceń i obsługi historii - zapewniając to kłopot dla wielu rozwiązań innych firm.
  • Jeśli zainstalujesz CLI rlwrap, który zapewnia obsługę readline dla dowolnej komendy, możesz połączyć ją z prostą komendą Perla, aby utworzyć użyteczną REPL , a tym samym zrezygnować z rozwiązań REPL innych firm.
    • Na OSX można zainstalować rlwrappoprzez Homebrew z brew install rlwrap.
    • Dystrybucje systemu Linux powinny oferować rlwrapza pośrednictwem odpowiednich menedżerów pakietów; np. na Ubuntu, użyj sudo apt-get install rlwrap.
    • Zobacz odpowiedź Jána Sáreníka dla wspomnianej kombinacji rlwrappolecenia Perl.

Czego NIE otrzymujesz z odpowiedzią Jána:

  • automatyczne uzupełnianie
  • możliwość wprowadzania instrukcji wieloliniowych

Jedynym rozwiązaniem oferowanym przez inne firmy (z nietrywialną instalacją + dodatkowymi, nieoczywistymi krokami) jest psh , ale:

  • nie widziała aktywności od około 2,5 roku

  • Skupia różni się tym, że ma być pełnoprawnym wymiana powłoki , a tym samym działa jak tradycyjny skorupy, co oznacza, że nie automatycznie ocenić polecenia jako Perl rachunku i wymaga wyraźnej komendy wyjściowe, takie jak printna wypisz wynik wyrażenia.


Odpowiedź Jána Sáreníka można poprawić w jeden sposób:

  • Domyślnie drukuje tablice / listy / tablice skrótów jako skalary , tzn. Drukuje tylko liczbę elementów , podczas gdy przydatne byłoby wyliczenie ich elementów.

Jeśli Data::Printermoduł zostanie zainstalowany [sudo] cpan Data::Printerjako jednorazowa operacja, można załadować go do REPL w celu użycia p()funkcji, do której można przekazać listy / tablice / tablice skrótów do wyliczenia.

Oto alias o nazwie iperlreadline i Data::Printerwsparciu , który możesz umieścić w pliku inicjującym powłoki podobnym do POSIX (np. ~/.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()//$@'\'

Na przykład możesz wykonać następujące czynności, aby wydrukować wszystkie zmienne środowiskowe za pomocą tablicy hashtable %ENV:

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

Podobnie jak w przypadku odpowiedzi Jána, skalarny wynik wyrażenia jest automatycznie drukowany; na przykład:

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


0

Sepia i PDE mają również własne REPL (dla GNU Emacs).



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.