2009-06-21 4 views
6

Come posso verificare che una variabile abbia un valore specifico in Perl? Esiste un comando per fermare l'esecuzione di uno script per cercare alcune delle sue variabili?Come posso avere asserzioni variabili in Perl?

mi chiedo se posso usare la pratica di inserire Pythonic:

assert 0, (foo, bar) 

per il debug di script in modo debuger-meno?

risposta

2

C'è uno script su PerlMonks che introduce un metodo rapido di asserzione.

La velocità è importante dal momento che il Perl viene interpretato e tutte le verifiche in linea avrà un impatto le prestazioni (a differenza di semplici macro C per esempio)


Non sono sicuro se queste cose stanno per essere direttamente utilizzabili.


Ok! Questo è quello che stavo cercando - PDF Warning: Test-Tutorial.pdf. Il Test::Harness viene utilizzato per scrivere i test del modulo Perl.

10

Una ricerca CPAN rapida suggerisce Carp::Assert.

+1

+1 per digitare più caratteri più velocemente di me. Ho intenzione di modificare l'URL per essere agnostico della versione però. –

+0

Stavo per commentare la tua risposta riguardo al fotofinish. Per quanto riguarda l'URL, lo dimentico costantemente, quindi grazie. – Telemachus

5

Smart::Comments sono belle.

+0

Smart :: Comments ++ Se usato con l'opzione -ENV, è uno strumento fantastico per questo genere di cose. Molto meglio che dover togliere tutti i test prima di andare in produzione, come suggerito da qualcun altro. – RET

1
$var_to_check =~ /sometest/ or die "bad variable!"; 

tendo a gettare le cose come questo nel mio codice, e poi usare una ricerca e sostituzione di sbarazzarsi di loro (nel codice di produzione).

Inoltre, 'eval' può essere utilizzato per eseguire una sezione di codice e acquisire errori e può essere utilizzato per creare funzionalità di gestione delle eccezioni. Se stai affermando che un valore non è 0, forse vuoi lanciare un'eccezione e gestirla in un modo speciale?

0
if ($next_sunrise_time > 24*60*60) { warn("assertion failed"); } # Assert that the sun must rise in the next 24 hours. 

È possibile farlo se non si ha accesso a Perl 5.9 che è richiesto per Carp::Assert.