it-swarm-eu.dev

Wie starte ich eine interaktive Konsole für Perl?

Wie starte ich eine interaktive Konsole für Perl, ähnlich dem Befehl irb für Ruby oder python für Python?

249
ibz

Sie können den Perl-Debugger in einem einfachen Programm wie folgt verwenden:

Perl -de1

Alternativ gibt es Alexis Sukrieh 's Perl Console Anwendung, aber ich habe sie nicht benutzt.

280
Daniel Papasian

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 aktiver Entwicklung.

Übrigens, ich habe keine Ahnung, warum jemand die Person, die "Perl -e" erwähnt hat, von der Konsole aus modifiziert hat. Das ist nicht wirklich eine REPL, aber es ist fantastisch nützlich und ich benutze es die ganze Zeit.

59
Dave Rolsky

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
34
raldi

Wenn Sie einen Verlauf wünschen, verwenden Sie rlwrap . Dies könnte beispielsweise Ihr ~/bin/ips Sein:

#!/bin/sh
echo 'This is Interactive Perl Shell'
rlwrap -A -pgreen -S"Perl> " Perl -wnE'say eval()//[email protected]'

Und so sieht es aus:

$ ips
This is Interactive Perl Shell
Perl> 2**128
3.40282366920938e+38
Perl> 
23
Ján Sáreník

Ich denke, Sie fragen nach einer REPL (Lesen, Auswerten, Drucken, Schleifen) -Schnittstelle für Perl. Es gibt einige Möglichkeiten, dies zu tun:

  • Matt Trout hat einen Artikel , der beschreibt, wie man einen schreibt
  • Adriano Ferreira hat einige Optionen beschrieben
  • und schließlich können Sie auf IRC auf irc.Perl.org hüpfen und einen der Test-Bots in vielen der populären Kanäle ausprobieren. Sie werden die Stücke von Perl auswerten, die Sie an sie weitergeben.
20
amoore

Ich benutze die Kommandozeile als Konsole:

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

Dann kann ich mein bash Protokoll verwenden, um alte Befehle zurückzugewinnen. Der Zustand bleibt dadurch jedoch nicht erhalten.

Dieses Formular ist am nützlichsten, wenn Sie "eine Kleinigkeit" testen möchten (z. B. bei der Beantwortung von Perl-Fragen). Oft stelle ich fest, dass diese Befehle wörtlich in ein Shell-Skript oder ein Makefile geschrieben werden.

19
Jon Ericson

Es gibt keine interaktive Konsole für Perl, die wie Python) eingebaut ist. Sie können jedoch den Perl-Debugger zum Debuggen von verwandten Dingen verwenden. Sie können ihn mit der Option -d aktivieren, aber Sie können es auch Ich möchte 'man perldebug' ausprobieren, um mehr darüber zu erfahren.

Nach einigem googeln gibt es ein separates Projekt, das eine Perl-Konsole implementiert, die Sie unter http://www.sukria.net/perlconsole.html finden.

Hoffe das hilft!

15
Frank Wiles

Sie können jederzeit in den integrierten Debugger einsteigen und von dort aus Befehle ausführen.

   Perl -d -e 1
14
Clinton Pierce

Ich habe perli erstellt, ein Perl-REPL , das unter Linux, macOS und Windows .

Das Hauptaugenmerk liegt auf dem automatischen Drucken von Ergebnissen, der bequemen 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 Installation von rlwrap wird dringend empfohlen , um die Befehlszeilenbearbeitung, den dauerhaften Befehlsverlauf und die Tab-Vervollständigung zu unterstützen - lesen Sie mehr hier .

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 herunter und machen Sie ihn mit chmod +x Ausführbar.

    • Windows: Laden Sie das 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 perli.pl Aufzurufen, sind Sie bereit.
      Andernfalls erstellen Sie eine Batchdatei mit dem Namen perli.cmd Im selben Ordner mit folgendem Inhalt: @%~dpn.pl %*; Dies ermöglicht den Aufruf als nur perli.

11
mklement0

Es gibt zwei beliebte Perl-REPLs.

  1. Devel :: REPL ist großartig.
  2. Aber IMO Reply ist besser.
11
Eric Johnson

Perl -d ist dein Freund:

% Perl -de 0
6
Brian Phillips

re.pl von Devel :: REPL

6
Johny

Read-Eval-Print-Schleife:

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

Ich habe immer getan:

Perl -wlne'eval;[email protected][email protected]'

Mit 5.10 habe ich umgestellt auf:

Perl -wnE'say eval()//[email protected]'
5
ysth

Sie könnten hier in psh schauen: http://gnp.github.io/psh/

Es ist eine vollständige Shell-Version (Sie können sie beispielsweise anstelle von Bash verwenden), verwendet jedoch die Perl-Syntax.

4
shelfoo

Perl hat keine Konsole, aber der Debugger kann als eine verwendet werden. Geben Sie an einer Eingabeaufforderung Perl -de 1. (Der Wert "1" spielt keine Rolle, es ist nur eine gültige Anweisung, die nichts tut.)

Es gibt auch einige Optionen für Perl Shell .

Weitere Informationen finden Sie unter perlfaq .

4
Michael Carman

Unter Debian/Ubuntu:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
3
gavenkoa

Update: Ich habe seitdem eine herunterladbare erstellt REPL - siehe meine andere Antwort .

Im Nachhinein:

  • Die Lösungen von Drittanbietern , die in den vorhandenen Antworten erwähnt werden, sind entweder umständlich zu installieren und/oder funktionieren nicht ohne non -triviale, nicht offensichtliche zusätzliche Schritte - Einige Lösungen scheinen mindestens zur Hälfte aufgegeben zu sein.
  • A usable REPL benötigt die readline-Bibliothek für die Unterstützung der Befehlszeilen-Bearbeitungstastatur und des Verlaufs - um sicherzustellen, dass dies a ist Problemstelle für viele Lösungen von Drittanbietern.
  • Wenn Sie CLI rlwrap installieren, das Readline-Unterstützung für jeden Befehl bietet, können Sie es mit einem einfachen Perl-Befehl kombinieren, um eine verwendbare REPL , und verzichten Sie damit auf Lösungen von Drittanbietern REPL=.
    • Unter OSX können Sie rlwrap über Homebrew mit brew install rlwrap Installieren.
    • Linux-Distributionen sollten rlwrap über ihre jeweiligen Paketmanager anbieten. Verwenden Sie unter Ubuntu beispielsweise Sudo apt-get install rlwrap.
    • Siehe Ján Sáreníks Antwort für die Kombination von rlwrap und einem Perl-Befehl.

Was Sie NICHT mit Jáns Antwort bekommen :

  • auto-Vervollständigung
  • möglichkeit zur Eingabe mehrzeiliger Anweisungen

Die einzige Lösung von Drittanbietern, die diese anbietet (mit nicht trivialer Installation + zusätzlichen, nicht offensichtlichen Schritten), ist psh, aber:

  • es hat in rund 2,5 Jahren keine Aktivität gesehen

  • sein Fokus ist dahingehend unterschiedlich, dass es ein vollwertiger Shell-Ersatz sein soll und somit wie eine traditionelle Shell funktioniert, was bedeutet, dass es einen Befehl nicht automatisch als auswertet. -Perl Anweisung und erfordert einen expliziten Ausgabebefehl wie print, um das Ergebnis eines Ausdrucks auszugeben.


Ján Sáreníks Antwort kann auf eine Weise verbessert werden:

  • Standardmäßig druckt es Arrays/Listen/Hashtables als Skalare, dh es druckt nur deren Element count, wobei es praktisch wäre, stattdessen deren Elemente aufzulisten.

Wenn Sie das Modul Data::Printer mit [Sudo] cpan Data::Printer Als einmalige Operation installieren, können Sie es in = laden REPL für die Verwendung der Funktion p(), an die Sie Listen/Arrays/Hashtables zur Aufzählung übergeben können.

Hier ist ein Alias ​​namens iperl mit readline und Data::Printer Unterstützung , den Sie in die Initialisierung Ihrer POSIX-ähnlichen Shell einfügen können Datei (zB ~/.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()//[email protected]'\'

Sie können dann beispielsweise Folgendes tun, um alle Umgebungsvariablen über die Hash-Tabelle %ENV Zu drucken:

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

Wie bei Jáns Antwort wird das skalar Ergebnis eines Ausdrucks automatisch gedruckt; z.B.:

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

Matt Trout's Übersicht listet fünf Auswahlmöglichkeiten auf, von Perl -de 0 und er empfiehlt Reply , wenn Erweiterbarkeit über Plugins wichtig ist, oder tinyrepl von Eval::WithLexicals für eine minimale, reine Perl-Lösung mit Readline-Unterstützung und lexikalischer Persistenz.

1
Davor Cubranic

Sepia und PDE haben auch eigene REPLs (für GNU Emacs).

0
Johny

Siehe auch Stylish REPL (für GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod =

0
Johny

Suchen Sie auch nach ptkdb auf CPAN: http://search.cpan.org/search?query=ptkdb&mode=all

0
runrig