Antworten:
Sie können den Perl-Debugger in einem einfachen Programm verwenden, wie folgt:
perl -de1
Alternativ gibt es die Perl Console- Anwendung von Alexis Sukrieh , die ich jedoch nicht verwendet habe.
control
+ L
funktioniert unter dieser Befehlsoberfläche nicht. Wie soll ich den Bildschirm aktualisieren?
rlwrap
). Alle REPL / Konsolen-Lösungen von Drittanbietern, einschließlich perlconsole
, sind umständlich zu installieren und weisen häufig weitere Einschränkungen auf.
perl -de1
scheint es keine my
Variablen zu unterstützen , und Hashes funktionieren aus irgendeinem Grund auch nicht…
perlconsole
leidet nicht unter diesen Problemen.
Matt Trout hat nicht nur einen Artikel über eine REPL geschrieben, sondern auch einen - Devel :: REPL
Ich habe es ein bisschen benutzt und es funktioniert ziemlich gut und es befindet sich in der aktiven Entwicklung.
Übrigens habe ich keine Ahnung, warum jemand die Person, die "perl -e" erwähnt hat, von der Konsole herunter modifiziert hat. Das ist zwar nicht wirklich eine REPL, aber es ist fantastisch nützlich und ich benutze es die ganze Zeit.
[sudo] cpan Devel::REPL
hat bei mir weder unter OSX 10.10 (Perl 5.18.2) noch unter Ubuntu 14.04 (Perl 5.18.2) funktioniert: Ich erhalte Laufzeitfehler, wenn ich mich über fehlende Module beschwere. installiert ein, dann aufgegeben, nachdem ein anderes fehlendes Modul gemeldet wurde.
re.pl
Autor, schrieb einen Artikel, in dem mehrere Alternativen aufgeführt sind, und er selbst schlägt vor, reply
anstelle von re.pl
: shadow.cat/blog/matt-s-trout/mstpan-17
Ich habe ein Skript geschrieben, das ich "psh" nenne:
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Was auch immer Sie eingeben, es wird in Perl ausgewertet:
> 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 einen Verlauf wünschen, verwenden Sie rlwrap . Dies könnte Ihr ~/bin/ips
Beispiel sein:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
Und so sieht es aus:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'
. OSX-Benutzer können rlwrap
über Homebrew mit installieren brew install rlwrap
.
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
Ich denke, Sie fragen nach einer REPL-Schnittstelle (Read, Evaluate, Print, Loop) für Perl. Es gibt einige Möglichkeiten, dies zu tun:
Ich benutze die Kommandozeile als Konsole:
$ perl -e 'print "JAPH\n"'
Dann kann ich meine Bash benutzen Verlauf verwenden, um alte Befehle zurückzugewinnen. Dies bewahrt jedoch nicht den Zustand.
Dieses Formular ist am nützlichsten, wenn Sie "eine Kleinigkeit" testen möchten (z. B. bei der Beantwortung von Perl-Fragen). Oft finde ich, dass diese Befehle wörtlich in ein Shell-Skript oder Makefile geschrieben werden.
fish
brauchen Sie nicht einmal die \n
.
Es gibt keine interaktive Konsole für Perl wie Python. Sie können jedoch den Perl-Debugger verwenden, um verwandte Dinge zu debuggen. Sie aktivieren es mit der Option -d, möchten jedoch möglicherweise 'man perldebug' überprüfen, um mehr darüber zu erfahren.
Nach einigem googeln gibt es ein separates Projekt, das eine Perl-Konsole implementiert, die Sie unter finden http://www.sukria.net/perlconsole.html .
Hoffe das hilft!
Sie können jederzeit einfach in den integrierten Debugger wechseln und von dort aus Befehle ausführen.
perl -d -e 1
Es gibt zwei beliebte Perl-REPLs.
sudo apt-get install libreply-perl
. Dann kann es ausgeführt werden, indem einfach reply
ein Terminal eingegeben wird.
Ich habe perli
eine Perl-REPL erstellt , die unter Linux, MacOS und Windows ausgeführt wird .
Der Schwerpunkt liegt auf dem automatischen Drucken von Ergebnissen, der praktischen Suche nach Dokumentationen und der einfachen Überprüfung von Übereinstimmungen mit regulären Ausdrücken.
Sie können Screenshots sehen hier .
Es funktioniert eigenständig (hat keine anderen Abhängigkeiten als Perl selbst), aber die Installation von rlwrap
wird dringend empfohlen , um die Befehlszeilenbearbeitung, den dauerhaften Befehlsverlauf und die Vervollständigung von Registerkarten zu unterstützen - lesen Sie hier mehr .
Installation
Wenn Sie Node.js installiert haben:
npm install -g perli
Andernfalls:
Unix - ähnliche Plattformen: Laden Sie dieses Skript als perli
in einen Ordner im Pfad Ihres Systems und ausführbar machen mit chmod +x
.
Windows : Laden Sie dieses Skript als perli.pl
(beachten Sie die .pl
Erweiterung) in einen Ordner im Pfad Ihres Systems herunter .
Wenn es Ihnen nichts ausmacht, Perli als aufzurufen perli.pl
, sind Sie fertig.
Andernfalls erstellen Sie eine Batchdatei perli.cmd
mit demselben Namen und folgendem Inhalt : @%~dpn.pl %*
; Dies ermöglicht den Aufruf als gerecht perli
.
perldoc
von perli
REPL wie starten 'someCommand ?'
. Sieht so aus, als wäre es eine Weile nicht aktualisiert worden. Behalten Sie immer noch Perli bei?
perli
wurde seit einiger Zeit nicht mehr aktualisiert, da ich in meinem persönlichen Gebrauch keine Probleme festgestellt habe und nur wenige andere Leute es zu verwenden scheinen, aber soweit ich weiß, funktioniert es immer noch wie angekündigt.
perl -d
ist dein Freund:
% perl -de 0
re.pl von Devel :: REPL
Read-Eval-Print-Schleife:
$ perl -e'while(<>){print eval,"\n"}'
Perl hat keine Konsole, aber der Debugger kann als eine verwendet werden. Geben Sie an einer Eingabeaufforderung ein perl -de 1
. (Der Wert "1" spielt keine Rolle, es ist nur eine gültige Aussage, die nichts bewirkt.)
Es gibt auch einige Optionen für eine Perl-Shell .
Weitere Informationen finden Sie in perlfaq3 .
Sie können sich psh hier ansehen: http://gnp.github.io/psh/
Es ist eine Full-On-Shell (Sie können sie beispielsweise als Ersatz für Bash verwenden), verwendet jedoch die Perl-Syntax. So können Sie Methoden im laufenden Betrieb erstellen.
Matt Trout Übersicht listet fünf Auswahlmöglichkeiten, aus perl -de 0
ab, und er empfiehlt Reply
, wenn Erweiterbarkeit über Plugins wichtig ist, oder tinyrepl
aus Eval::WithLexicals
, für eine minimale, pure-perl - Lösung , die Readline- Unterstützung und lexikalische Ausdauer enthält.
Update: Ich habe seitdem eine herunterladbare REPL erstellt - siehe meine andere Antwort .
Im Nachhinein:
rlwrap
, die Readline-Unterstützung für jeden Befehl bietet, können Sie sie mit einem einfachen Perl-Befehl kombinieren, um eine verwendbare REPL zu erstellen , und somit auf REPL-Lösungen von Drittanbietern verzichten.
rlwrap
über Homebrew mit installieren brew install rlwrap
.rlwrap
über ihre jeweiligen Paketmanager anbieten ; zB unter Ubuntu verwenden sudo apt-get install rlwrap
.rlwrap
und einem Perl-Befehl.Was Sie mit Jáns Antwort NICHT bekommen :
Die einzige Lösung von Drittanbietern, die diese anbietet (mit nicht trivialer Installation + zusätzlichen, nicht offensichtlichen Schritten), ist psh , aber:
Es hat seit ungefähr 2,5 Jahren keine Aktivität mehr gesehen
sein Fokus ist anders, dass es zielt darauf ab , ein vollwertiges zu sein Shell - Ersatz , und so funktioniert wie eine herkömmliche Schale, was bedeutet , dass sie nicht automatisch einen Befehl als zu bewerten sind Perl - Anweisung und erfordert einen expliziten Ausgabebefehl wie print
zu Drucken Sie das Ergebnis eines Ausdrucks.
Ján Sáreníks Antwort kann auf eine Weise verbessert werden:
Wenn Sie das Data::Printer
Modul mit installieren[sudo] cpan Data::Printer
einmalig , können Sie es zur Verwendung der Funktion in die REPL laden p()
, an die Sie Listen / Arrays / Hashtabellen zur Aufzählung übergeben können.
Hier ist ein Alias iperl
mit Readline und Data::Printer
Unterstützung , den 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 zu drucken %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Wie bei Jáns Antwort wird das skalare Ergebnis eines Ausdrucks automatisch gedruckt. z.B:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Suchen Sie auch im CPAN nach ptkdb: http://search.cpan.org/search?query=ptkdb&mode=all
Sepia und PDE haben auch eigene REPLs (für GNU Emacs).
Siehe auch Stylish REPL (für GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod
Sie können es online tun (wie viele Dinge im Leben) hier:
$ rlwrap perl -d -e 1
Sie erhalten Verlauf und eine konsistente Eingabeaufforderung