Domanda

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

È stato utile?

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 con chmod +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 as perli.pl, è tutto pronto.
      Altrimenti, crea un file batch denominato perli.cmd nella stessa cartella con il seguente contenuto: @%~dpn.pl %*;questo consente l'invocazione come giusta perli.

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 con brew install rlwrap.
    • Le distribuzioni Linux dovrebbero offrire rlwrap tramite i rispettivi gestori di pacchetti;ad esempio, su Ubuntu, utilizzare sudo apt-get install rlwrap.
    • Vedere 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 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.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top