Come posso avviare una console interattiva per Perl?
-
09-06-2019 - |
Domanda
Come posso avviare una console interattiva per Perl, simile a irb
comando per Ruby o python
per Python?
Soluzione
Puoi usare il debugger Perl su un programma banale, in questo modo:
perl -de1
In alternativa c'è Alexis Sukriehla console Perl di applicazione, ma non l'ho usata.
Altri suggerimenti
Matt Trout non solo ha scritto un articolo sul REPL, ma ne ha scritto anche uno... Sviluppo::REPL
L'ho usato un po' e funziona abbastanza bene, ed è in fase di sviluppo attivo.
A proposito, non ho idea del motivo per cui qualcuno abbia modificato la persona che ha menzionato l'uso di "perl -e" dalla console.Questo non è proprio un REPL, è vero, ma è straordinariamente utile e lo uso sempre.
Ho scritto uno script che chiamo "psh":
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Qualunque cosa digiti, viene valutata 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
Se vuoi la storia, usa 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()//$@'
Ed ecco come appare:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
Penso che tu stia chiedendo un'interfaccia REPL (Read, Evaluate, Print, Loop) per perl.Esistono alcuni modi per farlo:
- Matt Trout sì un articolo che descrive come scriverne uno
- Adriano Ferreira ha descritto alcune opzioni
- e infine, puoi andare su IRC su irc.perl.org e provare uno dei bot di valutazione in molti dei canali più popolari.Valuteranno i pezzi di Perl che gli passi.
Utilizzo la riga di comando come console:
$ perl -e 'print "JAPH\n"'
Allora posso usare il mio bash History per recuperare i vecchi comandi.Ciò tuttavia non preserva lo stato.
Questo modulo è molto utile quando vuoi testare "una piccola cosa" (come quando rispondi a domande sul Perl).Spesso, trovo che questi comandi vengano raschiati parola per parola in uno script di shell o in un makefile.
Non esiste una console interattiva per Perl integrata come fa Python.Puoi comunque utilizzare Perl Debugger per eseguire operazioni correlate al debug.Lo attivi con l'opzione -d, ma potresti voler controllare 'man perldebug' per saperne di più.
Dopo aver cercato un po' su Google, c'è un progetto separato che implementa una console Perl che puoi trovare su http://www.sukria.net/perlconsole.html.
Spero che questo ti aiuti!
Puoi sempre accedere al debugger integrato ed eseguire i comandi da lì.
perl -d -e 1
Esistono due REPL Perl popolari.
1. Sviluppo::REPL è grande.
2.Ma secondo me Rispondere è meglio.
Ho creato perli
, UN Perl REPL che continua a funzionare Linux, macOS e Windows.
Il suo obiettivo è la stampa automatica dei risultati, le convenienti ricerche di documentazione e la facile ispezione delle corrispondenze di espressione regolari.
Puoi vedere gli screenshot Qui.
Funziona indipendente, autonomo (non ha dipendenze diverse da Perl stesso), ma installazione di rlwrap
è fortemente raccomandato in modo da supportare la modifica della riga di comando, la cronologia persistente dei comandi e il completamento tramite scheda - leggi di più Qui.
Installazione
Se ti capita di avere Node.js installato:
npm install -g perli
Altrimenti:
Unixpiattaforme simili:Scaricamento questa sceneggiatura COME
perli
in una cartella nel percorso del tuo sistema e rendilo eseguibile conchmod +x
.finestre:Scarica il questa sceneggiatura COME
perli.pl
(notare la.pl
estensione) in una cartella nel percorso del sistema.
Se non ti dispiace invocare Perli asperli.pl
, è tutto pronto.
Altrimenti, crea un file batch denominatoperli.cmd
nella stessa cartella con il seguente contenuto:@%~dpn.pl %*
;questo consente l'invocazione come giustaperli
.
perl -d
È tuo amico:
% perl -de 0
re.pl da Devel::REPL
Ho sempre fatto:
perl -wlne'eval;print$@if$@'
Con la versione 5.10 sono passato a:
perl -wnE'say eval()//$@'
Ciclo di lettura-valutazione-stampa:
$ perl -e'while(<>){print eval,"\n"}'
Perl non dispone di una console ma il debugger può essere utilizzato come tale.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 a Conchiglia Perl.
Per maggiori informazioni leggere perlfaq3.
Potresti esaminare Psh qui: http://gnp.github.io/psh/
È una shell completa (puoi usarla ad esempio in sostituzione di bash), ma usa la sintassi perl.così puoi creare metodi al volo, ecc.
Sotto Debian/Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Aggiornamento:Da allora ho creato un REPL scaricabile - vedi la mia altra risposta.
Con il senno di poi:
- IL soluzioni di terze parti menzionati tra le risposte esistenti sono entrambi macchinoso da installare e/o non funzionante senza passaggi aggiuntivi non banali e non ovvi - alcune soluzioni appaiono abbandonate almeno a metà.
- Un REPL utilizzabile necessita della libreria readline per il supporto della tastiera per la modifica della riga di comando e il supporto della cronologia - garantire che questo sia un punto problematico per molte soluzioni di terze parti.
- Se installi la CLI
rlwrap
, che fornisce supporto readline a qualsiasi comando, puoi combinarlo con un semplice comando Perl per creare un REPL utilizzabile, e quindi rinunciare alle soluzioni REPL di terze parti.- Su OSX è possibile installare
rlwrap
attraverso Birra fatta in casa conbrew install rlwrap
. - Le distribuzioni Linux dovrebbero offrire
rlwrap
tramite i rispettivi gestori di pacchetti;ad esempio, su Ubuntu, utilizzaresudo apt-get install rlwrap
. - Vedere La risposta di Ján Sáreník per detta combinazione di
rlwrap
e un comando Perl.
- Su OSX è possibile installare
Cosa NON ottieni con la risposta di Ján:
- completamento automatico
- possibilità di inserire istruzioni su più righe
L'unica soluzione di terze parti che li offre (con installazione non banale + passaggi aggiuntivi non ovvi) è psh, Ma:
non vede attività da circa 2,5 anni
il suo obiettivo è diverso in quanto mira ad essere un programma a tutti gli effetti sostituzione del guscio, e quindi funziona come una shell tradizionale, il che significa che non valuta automaticamente un comando come a Perl istruzione 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 migliorato in un modo:
- Per impostazione predefinita, esso stampa array/liste/tabelle hash come scalari, ovvero, stampa solo i loro conteggio degli elementi, mentre sarebbe invece utile enumerarne gli elementi.
Se installi il Data::Printer
modulo con [sudo] cpan Data::Printer
come operazione una tantum, puoi caricarlo nel REPL per l'utilizzo del file p()
funzione, alla quale è possibile passare elenchi/array/tabelle hash per l'enumerazione.
Ecco un alias nominato iperl
con readline e Data::Printer
supporto, che puoi inserire nel file di inizializzazione della shell simile a POSIX (ad esempio, ~/.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()//$@'\'
Ad esempio, puoi quindi 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 scalare il risultato di un'espressione è automaticamente stampato;per esempio.:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Matt Trout panoramica elenca cinque scelte, da perl -de 0
in poi, e raccomanda Reply
, se l'estensibilità tramite plugin è importante, oppure tinyrepl
da Eval::WithLexicals
, per una soluzione minimale, puramente perl che include supporto readline e persistenza lessicale.
Cerca anche ptkdb su CPAN:http://search.cpan.org/search?query=ptkdb&mode=all
Sepia e PDE hanno anche i propri REPL (per GNU Emacs).
Vedi anche Stylish REPL (per GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod