it-swarm.it

Come posso avviare una console interattiva per Perl?

Come posso avviare una console interattiva per Perl, simile al comando irb per Ruby o python per Python?

249
ibz

È possibile utilizzare il debugger Perl su un programma banale, in questo modo:

Perl -de1

In alternativa c'è Perl Console di Alexis Sukrieh , ma non l'ho usato.

280
Daniel Papasian

Matt Trout non solo ha scritto un articolo su un REPL, ma ne ha anche scritto uno - Devel :: REPL

L'ho usato un po 'e funziona abbastanza bene, ed è in fase di sviluppo attivo.

A proposito, non ho idea del perché qualcuno abbia modificato la persona che ha menzionato l'utilizzo di "Perl -e" dalla console. Questo non è davvero un REPL, vero, ma è straordinariamente utile, e lo uso sempre.

59
Dave Rolsky

Ho scritto una sceneggiatura che chiamo "psh":

#! /usr/bin/Perl

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

Qualunque cosa tu digiti, valuta 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
34
raldi

Se si desidera la cronologia, utilizzare rlwrap . Questo potrebbe essere il tuo ~/bin/ips per esempio:

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

Ed è così che appare:

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

Penso che tu stia chiedendo un'interfaccia REPL (Read, Evaluate, Print, Loop) a Perl. Ci sono alcuni modi per farlo:

  • Matt Trout ha n articolo che descrive come scriverne uno
  • Adriano Ferreira ha descritto alcune opzioni
  • e infine, puoi saltare su IRC su irc.Perl.org e provare uno dei bot di valutazione in molti dei canali popolari. Valuteranno i pezzi di Perl che passi loro.
20
amoore

Uso la riga di comando come console:

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

Quindi posso usare la mia storia bash per recuperare i vecchi comandi. Ciò non preserva lo stato, tuttavia.

Questo modulo è molto utile quando si desidera testare "una piccola cosa" (come quando si risponde alle domande Perl). Spesso, trovo che questi comandi vengano raschiati alla lettera in uno script Shell o in un makefile.

19
Jon Ericson

Non esiste una console interattiva per Perl integrata come Python. Puoi comunque usare il Debugger Perl per fare cose relative al debug. Puoi accenderlo con l'opzione -d, ma potresti voglio dare un'occhiata a "man perldebug" per saperne di più.

Dopo un po 'di ricerche su Google, esiste un progetto separato che implementa una console Perl che puoi trovare su http://www.sukria.net/perlconsole.html .

Spero che sia di aiuto!

15
Frank Wiles

Puoi sempre semplicemente accedere al debugger integrato ed eseguire i comandi da lì.

   Perl -d -e 1
14
Clinton Pierce

Ho creato perli , un Perl REPL che gira su Linux, macOS e Windows .

Il suo focus è la stampa automatica dei risultati, ricerche documentali convenienti e una facile ispezione delle corrispondenze di espressioni regolari.
Puoi vedere schermate qui .

Funziona autonomo (non ha dipendenze diverse dal Perl stesso), ma installazione di rlwrap è fortemente raccomandato per supportare la modifica della riga di comando, la cronologia dei comandi persistenti e il completamento della scheda - leggi di più qui .

Installazione

  • Se hai Node.js installato:

    npm install -g perli
    
  • Altrimenti:

    • Unix - piattaforme simili: Scarica questo script come perli in una cartella nel percorso del tuo sistema e rendilo eseguibile con chmod +x.

    • Windows: Scarica questo script come perli.pl (notare la .pl extension) in una cartella nel percorso del tuo sistema.
      Se non ti dispiace invocare Perli come perli.pl, sei pronto.
      Altrimenti, crea un file batch chiamato perli.cmd nella stessa cartella con il seguente contenuto: @%~dpn.pl %*; questo abilita l'invocazione come solo perli.

11
mklement0

Esistono due REPL Perl popolari.

  1. Devel :: REPL è fantastico.
  2. Ma IMO Rispondi è migliore.
11
Eric Johnson

Perl -d È tuo amico:

% Perl -de 0
6
Brian Phillips

re.pl di Devel :: REPL

6
Johny

Ciclo di lettura-eval-stampa:

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

Ho sempre fatto:

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

Con 5.10 sono passato a:

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

Puoi consultare psh qui: http://gnp.github.io/psh/

È completo su Shell (puoi usarlo in sostituzione di bash per esempio), ma usa la sintassi Perl .. in modo da poter creare metodi al volo ecc.

4
shelfoo

Perl non ha una console ma il debugger può essere usato come uno. Al prompt dei comandi, digitare Perl -de 1. (Il valore "1" non ha importanza, è solo un'istruzione valida che non fa nulla.)

Ci sono anche un paio di opzioni per un Perl Shell .

Per maggiori informazioni leggi perlfaq .

4
Michael Carman

Sotto Debian/Ubuntu:

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

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

Aggiornamento: da allora ho creato un download REPL - vedi l'altra mia risposta .

Con il senno di poi:

  • Le soluzioni di terze parti citate tra le risposte esistenti sono ingombranti da installare e/o non funzionano senza -triviali passaggi non ovvi - alcune soluzioni sembrano essere almeno semi-abbandonate.
  • A utilizzabile REPL richiede la libreria readline per il supporto della tastiera per la modifica della riga di comando e il supporto della cronologia - assicurando che si punto problematico per molte soluzioni di terze parti.
  • Se si installa CLI rlwrap, che fornisce supporto readline a qualsiasi comando, è possibile combinarlo con un semplice comando Perl per creare un REPL utilizzabile e quindi fare a meno di terze parti REPL.
    • Su OSX, puoi installare rlwrap tramite Homebrew con brew install rlwrap.
    • Le distro Linux dovrebbero offrire rlwrap tramite i rispettivi gestori di pacchetti; ad esempio, su Ubuntu, usa Sudo apt-get install rlwrap.
    • Vedi la risposta di Ján Sáreník per detta combinazione di rlwrap e un comando Perl.

Cosa NON ottieni con la risposta di Ján:

  • completamento automatico
  • possibilità di inserire istruzioni multilinea

L'unica soluzione di terze parti che offre questi (con installazione non banale + passaggi aggiuntivi, non ovvi), è psh, ma:

  • non ha visto attività da circa 2,5 anni

  • il suo focus è diverso in quanto mira ad essere un vero e proprio Sostituzione della shell, e quindi funziona come una Shell tradizionale, il che significa che non valuta automaticamente un comando come Perl e richiede un comando di output esplicito come print per stampare il risultato di un'espressione.


la risposta di Ján Sáreník può essere migliorata in un modo:

  • Per impostazione predefinita, stampa array/elenchi/hashtable come scalari, ovvero stampa solo il loro elemento conta, mentre sarebbe utile invece enumerare i loro elementi.

Se installi il modulo Data::Printer con [Sudo] cpan Data::Printer Come operazione una tantum, puoi caricarlo nel = REPL per l'uso della funzione p(), alla quale è possibile passare elenchi/matrici/hashtable per l'enumerazione.

Ecco un alias chiamato iperl con readline e supporto Data::Printer, che puoi inserire nell'inizializzazione della Shell simile a POSIX file (ad es. ~/.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]'\'

Ad esempio, è possibile eseguire le seguenti operazioni per stampare tutte le variabili di ambiente tramite hashtable %ENV:

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

Come per la risposta di Ján, il risultato scalare di un'espressione è automaticamente stampato; per esempio.:

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

Matt Trout's panoramica elenca cinque scelte, da Perl -de 0 in poi, e raccomanda Reply , se è importante estensibilità tramite plugin, oppure tinyrepl da Eval::WithLexicals , per una soluzione minimale di puro Perl che include supporto readline e persistenza lessicale.

1
Davor Cubranic

Sepia e PDE hanno anche REPL propri (per GNU Emacs).

0
Johny

Vedi anche Stylish REPL (for GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod =

0
Johny
0
runrig