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

Jak mogę uruchomić interaktywną konsolę dla Perla, podobną do komendy irb dla Rubiego lub python dla Pythona?

Author: user2864740, 2008-09-16

22 answers

Możesz użyć debuggera Perla w trywialnym programie, tak:

perl -de1

Alternatywnie jest Alexis Sukrieh 'S Perl Console aplikacja, ale nie używałem go.

 259
Author: Daniel Papasian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-08 22:13:39

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

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

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

 56
Author: Dave Rolsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:16:11

Napisałem skrypt, który nazywam "psh":

#! /usr/bin/perl

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

Cokolwiek wpiszesz, ewaluuje 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
 34
Author: raldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 19:44:29

Używam wiersza poleceń jako konsoli:

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

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

Ten formularz jest najbardziej przydatny, gdy chcesz przetestować " jedną małą rzecz "(np. odpowiadając na pytania Perla). Często stwierdzam, że te polecenia są zeskrobywane dosłownie do skryptu powłoki lub pliku makefile.

 19
Author: Jon Ericson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 17:59:11

Myślę, że pytasz o interfejs REPL (Read, Evaluate, Print, Loop) do Perla. Jest na to kilka sposobów:

  • Matt Trout ma Artykuł , który opisuje, jak napisać jeden
  • Adriano Ferreira opisał kilka opcji
  • i wreszcie można wskoczyć na IRC na irc.perl.org i wypróbuj jeden z botów eval w wielu popularnych kanałach. Będą oceniać kawałki Perla, które im przekazujesz.
 19
Author: amoore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 13:45:33

Jeśli chcesz historii, użyj rlwrap . To może być Twoje ~/bin/ips na przykład:

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

I tak to wygląda:

$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl> 
 17
Author: Ján Sáreník,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-03 14:07:39

Nie ma interaktywnej konsoli dla Perla zbudowanej tak, jak robi to Python. Można jednak użyć debuggera Perla do debugowania powiązanych rzeczy. Włączasz go za pomocą opcji-d, ale możesz chcieć sprawdzić 'man perldebug', aby się o tym dowiedzieć.

Po odrobinie googlowania istnieje osobny projekt, który implementuje konsolę Perla, którą można znaleźć na http://www.sukria.net/perlconsole.html .

Mam nadzieję, że to pomoże!

 15
Author: Frank Wiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-09 01:32:06

Zawsze możesz po prostu wpaść do wbudowanego debuggera i uruchomić stamtąd polecenia.

   perl -d -e 1
 14
Author: Clinton Pierce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 15:37:59

Istnieją dwie popularne repliki Perla.
1. Devel:: REPL jest świetny.
2. Ale IMO Odpowiedz jest lepsza.

 9
Author: Eric Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 18:49:29

I ' ve created perli, a PERL REPL , który działa na Linux, OS X i Windows .

Jego głównym celem jest automatyczne drukowanie wyników, wygodne wyszukiwanie dokumentacji i łatwe kontrola zgodności wyrażeń regularnych.
Możesz zobaczyć zrzuty ekranu tutaj .

Działa autonomicznie (nie ma innych zależności niż sam Perl), ale instalacja rlwrap jest zalecane , aby wspierać wiersz poleceń edycja, trwała historia poleceń i uzupełnianie zakładek-przeczytaj więcej tutaj .

Instalacja

  • Jeśli zdarzy ci się mieć węzeł.zainstalowane js:

    npm install -g perli
    
  • Inaczej:

    • Unix-podobne platformy: Pobierz ten skrypt jako perli do folderu w ścieżce systemu i wykonywalny za pomocą chmod +x.

    • Windows : Pobierz ten skrypt jako perli.pl (zwróć uwagę na rozszerzenie .pl) do folderu w ścieżce systemu.
      Jeśli nie masz nic przeciwko powołaniu Perli jako perli.pl, jesteś gotowy.
      W przeciwnym razie Utwórz plik wsadowy o nazwie perli.cmd w tym samym folderze o następującej zawartości: @%~dpn.pl %*; umożliwia to wywołanie jako tylko perli.

 9
Author: mklement0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 14:22:40

perl -d jest twoim przyjacielem:

% perl -de 0
 6
Author: Brian Phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 15:37:37

Re.pl from Devel:: REPL

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 07:45:32

Zawsze tak było:

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

Z 5.10 przesiadłem się na:

perl -wnE'say eval()//$@'
 5
Author: ysth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 10:48:08

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 poprawne stwierdzenie, które nic nie robi.)

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

Aby uzyskać więcej informacji, przeczytaj perlfaq3 .

 4
Author: Michael Carman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 15:46:40

Read-eval-Print loop:

$ perl -e'while(<>){print eval,"\n"}'
 4
Author: KIM Taegyoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 07:28:32

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

Jest to pełna powłoka (możesz jej użyć w zastępstwie Basha na przykład), ale używa składni Perla.. możesz więc tworzyć metody w locie itp.

 2
Author: shelfoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 17:03:42

Update: od tego czasu stworzyłem REPL do pobrania-zobacz moja inna odpowiedź .

Z korzyścią z perspektywy czasu:

  • rozwiązania stron trzecich wymienione wśród istniejących odpowiedzi są albo kłopotliwe w instalacji i/lub nie działają bez nietrywialnych, nieoczywistych dodatkowych kroków-niektóre rozwiązania wydają się być co najmniej w połowie porzucone.
  • użyteczny REPL wymaga biblioteki readline do edycji wiersza poleceń Obsługa klawiatury i obsługa historii - zapewnienie, że jest to problem dla wielu rozwiązań innych firm.
  • Jeśli zainstalujesz CLI rlwrap, dzięki temu można połączyć je z prostym poleceniem Perla, aby utworzyć użyteczny REPL, a tym samym poradzić sobie bez zewnętrznych rozwiązań REPL.
    • na OSX, możesz zainstalować rlwrap poprzez Homebrew z brew install rlwrap.
    • dystrybucje Linuksa powinny oferować rlwrap poprzez odpowiednie Menedżery pakietów; np. na Ubuntu użyj sudo apt-get install rlwrap.
    • Zobacz odpowiedź Jána Sáreníka dla wspomnianej kombinacji rlwrap i polecenia Perla.

Czego nie dostajesz z odpowiedzią Jána:

  • automatyczne uzupełnianie
  • możliwość wprowadzania poleceń wielowierszowych

Jedynym rozwiązaniem firm trzecich, które je oferuje (z nietrywialną instalacją + dodatkowymi, nieoczywistymi krokami), jest psh , ale:

  • Nie ma aktywności od około 2,5 roku

  • Jego skupienie jest inne, ponieważ ma być pełnowartościowym zastąpieniem powłoki , a zatem działa jak tradycyjna powłoka, co oznacza, że nie ocenia automatycznie polecenia jako instrukcji Perl i wymaga jawnego polecenia wyjściowego, takiego jak print, aby wydrukować wynik wyrażenia.


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

  • Domyślnie, to drukuje tablice / listy / Hashtable jako Skalary , np. wypisuje tylko liczbę elementów , podczas gdy wskazane byłoby wyliczenie ich elementów.

Jeśli zainstalujesz Data::Printer moduł z [sudo] cpan Data::Printer jako jednorazową operacją, można go załadować do REPL w celu użycia p() funkcja, do której możesz przekazać listy/tablice/Hashtable do wyliczenia.

Oto alias o nazwie iperl z obsługą readline i Data::Printer , który można umieścić w pliku inicjalizacyjnym powłoki podobnej 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()//$@'\'

Można np. wykonać następujące czynności, aby wydrukować wszystkie zmienne środowiskowe za pomocą hashtable %ENV:

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

Tak jak w odpowiedzi Jána, Skalar wynik wyrażenia jestautomatycznie drukowany; np.:

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714
 2
Author: mklement0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:42

Pod Debianem / Ubuntu:

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

$ sudo apt-get install libapp-repl-perl
$ iperl
 2
Author: gavenkoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-05 14:56:12

Przegląd Matta Trouta wymienia pięć opcji, począwszy od perl -de 0, i zaleca Reply, jeśli rozszerzalność za pomocą wtyczek jest ważna, lub tinyrepl z Eval::WithLexicals, dla minimalnego, czystego Perla, który obejmuje obsługę readline i trwałość leksykalną.

 1
Author: Davor Cubranic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 17:11:28
 0
Author: runrig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 15:53:20

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

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 07:47:13

Zobacz także stylowy REPL (dla GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 05:54:52