Frage

Wie kann ich eine interaktive Konsole für Perl starten, ähnlich der irb Befehl für Ruby oder python für Python?

War es hilfreich?

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 http://www.sukria.net/perlconsole.html .

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 mit chmod +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 als perli.pl Aufruf, bist du ganz eingestellt.
      Andernfalls erstellen Sie eine Batch-Datei perli.cmd im selben Ordner mit dem folgenden Inhalt: @%~dpn.pl %*; dies ermöglicht Aufruf als nur perli.

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 mit brew install rlwrap.
    • Linux-Distributionen sollten anbieten rlwrap über ihre jeweiligen Paketmanager;z. B. unter Ubuntu verwenden sudo apt-get install rlwrap.
    • Sehen Ján Sáreníks Antwort für die genannte Kombination von rlwrap und ein Perl-Befehl.

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.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top