Wie kann ich eine interaktive Konsole für Perl starten?
-
09-06-2019 - |
Frage
Wie kann ich eine interaktive Konsole für Perl starten, ähnlich der irb
Befehl für Ruby oder python
für Python?
Lösung
Sie können das Perl-Debugger auf einem trivialen Programm verwenden, etwa so:
perl -de1
Als Alternative gibt es Alexis Sukrieh 's Perl-Konsole Anwendung, aber ich habe es nicht verwendet wird.
Andere Tipps
Nicht nur, dass Matt Trout einen Artikel über einen REPL schreiben, schrieb er tatsächlich ein - Devel :: REPL
Ich habe es ein wenig verwendet und es funktioniert ziemlich gut, und es ist unter aktiver Entwicklung.
BTW, habe ich keine Ahnung, warum jemand die Person modded nach unten, die „perl -e“ von der Konsole erwähnt werden. Das ist nicht wirklich ein REPL, wahr, aber es ist fantastisch nützlich, und ich benutze es die ganze Zeit.
Ich schrieb ein Drehbuch, das ich "PSH" nennen:
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Was auch immer Sie eingeben, wertet in 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
Wenn Sie die Geschichte möchten, verwenden Sie rlwrap . Dies könnte Ihr ~/bin/ips
zum Beispiel sein:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
Und das ist, wie es aussieht:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
Ich glaube, Sie fragen nach einem REPL (Lesen, Auswerten, Drucken, Loop) Schnittstelle Perl. Es gibt ein paar Möglichkeiten, dies zu tun:
- Matt Trout hat Artikel , der beschreibt, wie man
- Adriano Ferreira hat einige Optionen beschrieben
- und schließlich kann man im IRC-Hop bei irc.perl.org und versuchen, in vielen der beliebtesten Kanäle eine der eval-Bots aus. Sie werden bewerten Stücke von Perl, die Sie an sie weitergeben.
Ich benutze die Befehlszeile als eine Konsole:
$ perl -e 'print "JAPH\n"'
Dann kann ich meine bash Geschichte verwenden zurück alte Befehle zu erhalten. Dieser Zustand nicht erhalten, aber.
Diese Form ist besonders nützlich, wenn Sie „eine Kleinigkeit“ (wie bei der Beantwortung Perl Fragen) testen möchten. Oft ich diese Befehle wörtlich in ein Shell-Skript oder Make-Datei finden lassen abgeschabt.
Es gibt nicht eine interaktive Konsole für Perl gebaut wie Python tut. Sie können jedoch die Perl-Debugger verwenden Debuggen ähnliche Dinge zu tun. Sie schalten Sie es mit der Option -d, aber Sie könnten check out ‚Mann perldebug‘ wollen darüber zu erfahren.
Nach einem bisschen googeln, gibt es ein separates Projekt, das eine Perl-Konsole implementiert, die Sie unter
Hope, das hilft!
Sie können jederzeit fallen einfach in den integrierten Debugger und führen Befehle von dort aus.
perl -d -e 1
Es gibt zwei beliebte Perl REPLs.
1. Devel :: REPL ist groß.
2. Aber IMO Antworten besser ist.
Ich habe erstellt perli
, ein Perl REPL Das läuft auf Linux, MacOS und Windows .
Der Schwerpunkt ist die automatische Drucker, komfortable Dokumentation Lookups und einfach
Inspektion von regulären Ausdrücken übereinstimmt.
Sie können Screenshots finden Sie unter hier .
Es funktioniert Stand-alone (hat keine Abhängigkeiten außer Perl selbst), aber Installation von rlwrap
wird dringend empfohlen, , um einen Befehlszeileneditor, persistent Befehl Geschichte und Tab-Vervollständigung zu unterstützen - mehr hier .
Installation
-
Wenn Sie zufällig haben Node.js installiert:
npm install -g perli
-
Ansonsten:
-
Unix -ähnlichen Plattformen: Download dieses Skript in einen Ordner im Pfad als
perli
Ihres Systems und es ausführbar mitchmod +x
machen. -
Fenster : Laden Sie die diese Skript als
perli.pl
(man beachte die.pl
Erweiterung) in einen Ordner in Ihrem Systempfad.
Wenn Sie nichts dagegen nicht Perli alsperli.pl
Aufruf, bist du ganz eingestellt.
Andernfalls erstellen Sie eine Batch-Dateiperli.cmd
im selben Ordner mit dem folgenden Inhalt:@%~dpn.pl %*
; dies ermöglicht Aufruf als nurperli
.
-
perl -d
ist dein Freund:
% perl -de 0
re.pl von Devel :: REPL
ich immer tat:
perl -wlne'eval;print$@if$@'
Mit 5.10, habe ich umgeschaltet:
perl -wnE'say eval()//$@'
Read-eval-print Schleife:
$ perl -e'while(<>){print eval,"\n"}'
Perl nicht über eine Konsole, aber der Debugger kann als einer verwendet werden. An einer Eingabeaufforderung geben perl -de 1
. (Der Wert „1“ spielt keine Rolle, es ist nur eine gültige Aussage, die nichts tut.)
Es gibt auch ein paar Optionen für einen Perl Shell .
Weitere Informationen finden Sie perlfaq3 .
Sie könnten psh schauen Sie in hier: http://gnp.github.io/psh/
Es ist ein voll auf Schale (Sie es als Ersatz für Bash zum Beispiel verwenden können), verwendet aber Perl Syntax .. so dass Sie Methoden on the fly usw. erstellen können.
Unter Debian / Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Aktualisieren:Seitdem habe ich eine herunterladbare REPL erstellt – siehe meine andere Antwort.
Im Nachhinein:
- Der Lösungen von Drittanbietern Zu den vorhandenen Antworten gehören entweder Die Installation ist umständlich und/oder funktioniert nicht ohne nicht triviale, nicht offensichtliche zusätzliche Schritte - Einige Lösungen scheinen zumindest zur Hälfte aufgegeben zu sein.
- Eine verwendbare REPL benötigt die Readline-Bibliothek für Tastaturunterstützung und Verlaufsunterstützung für die Befehlszeilenbearbeitung – Sicherstellen, dass dies ein Problempunkt für viele Lösungen von Drittanbietern ist.
- Wenn Sie CLI installieren
rlwrap
, das Readline-Unterstützung für jeden Befehl bietet, können Sie es mit einem einfachen Perl-Befehl kombinieren, um eine verwendbare REPL zu erstellen, und kommen so ohne REPL-Lösungen von Drittanbietern aus.- Unter OSX können Sie installieren
rlwrap
über Homebrew mitbrew install rlwrap
. - Linux-Distributionen sollten anbieten
rlwrap
über ihre jeweiligen Paketmanager;z. B. unter Ubuntu verwendensudo apt-get install rlwrap
. - Sehen Ján Sáreníks Antwort für die genannte Kombination von
rlwrap
und ein Perl-Befehl.
- Unter OSX können Sie installieren
Was Sie NICHT bekommen mit Jáns Antwort:
- automatische Vervollständigung
- Möglichkeit zur Eingabe mehrzeiliger Anweisungen
Die einzige Drittanbieterlösung, die dies bietet (mit nicht trivialer Installation + zusätzlichen, nicht offensichtlichen Schritten), ist psh, Aber:
Es hat seit etwa 2,5 Jahren keine Aktivität mehr gesehen
Sein Schwerpunkt ist insofern anders, als er darauf abzielt, vollwertig zu sein Shell-Ersatz, und funktioniert somit wie eine herkömmliche Shell, was bedeutet, dass sie einen Befehl nicht automatisch als a auswertet Perl -Anweisung und erfordert einen expliziten Ausgabebefehl wie z
print
um das Ergebnis eines Ausdrucks auszugeben.
Ján Sáreníks Antwort kann auf eine Weise verbessert werden:
- Standardmäßig ist es Gibt Arrays/Listen/Hashtabellen aus als Skalare, d. h. druckt nur ihre Elementanzahl, wohingegen es praktisch wäre, stattdessen ihre Elemente aufzuzählen.
Wenn Sie das installieren Data::Printer
Modul mit [sudo] cpan Data::Printer
Als einmaliger Vorgang können Sie es zur Verwendung in die REPL laden p()
Funktion, an die Sie Listen/Arrays/Hashtabellen zur Aufzählung übergeben können.
Hier ist ein Alias genannt iperl
mit readline und Data::Printer
Unterstützung, die Sie in die Initialisierungsdatei Ihrer POSIX-ähnlichen Shell einfügen können (z. B. ~/.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()//$@'\'
Sie können dann beispielsweise Folgendes tun, um alle Umgebungsvariablen über die Hashtabelle auszudrucken %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Wie bei Jáns Antwort, dem Skalar Ergebnis eines Ausdrucks ist automatisch gedruckt;z.B.:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Matt Trout Überblick listet fünf Auswahlmöglichkeiten, von perl -de 0
ab, und er empfiehlt Reply
, wenn Erweiterbarkeit über Plugins ist wichtig, oder tinyrepl
von Eval::WithLexicals
, für eine minimale, pure-perl-Lösung, die readline- Unterstützung und lexikalische Persistenz enthält.
Auch sucht ptkdb auf CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
Sepia und PDE haben auch eigene REPLs (für GNU Emacs).
Siehe auch Stilvolle REPL (für GNU Emacs) http: //blog.jrock. wir / articles / Stylish% 20REPL.pod