2013-05-09 12 views
20

Ho appena trovato sul mio Ubuntu che Perl non si lamenta del punto e virgola alla fine. Controllare il seguente codice:Perl non si lamenta del punto e virgola mancante

#!/usr/bin/perl 
use warnings; 
use strict; 

my @array = (1, 2, 3, 4); 

foreach (@array) 
{ 
    print $_."\n" 
} 

print "no, this cant be true" 

Si prega di notare che punto e virgola ";" manca la dichiarazione di stampa. Il codice funziona ancora bene.

USCITA:

1 
2 
3 
4 
no, this cant be true 

Se metto virgola dopo stampa, funziona ancora. Quindi questo mi confonde.

Potresti aiutarmi a capire cosa mi manca qui, O c'è qualche ovvia ideologia Perl che ho trascurato?

+0

Non si lamenta neanche dei "semi-colon" extra. Lo stesso vale per le virgole "extra" e "mancanti". – ikegami

+2

Dagli archivi: [un programma che viene eseguito solo quando si dimentica il punto e virgola] (http://stackoverflow.com/q/11695110/168657) – mob

+0

Questo è in realtà molto utile nei blocchi eval a una riga. Considera di dire "eval {$ some-> method};" versi che dicono "eval {$ some-> method;};". –

risposta

45

Da perldoc perlsyn:

Ogni semplice dichiarazione deve terminare con un punto e virgola, a meno che sia la dichiarazione finale in un blocco, in questo caso il punto e virgola è opzionale.

L'estratto conto è l'ultima dichiarazione in un blocco.

L'omissione del punto e virgola non è tuttavia consigliata. È troppo facile dimenticare di aggiungerlo se estendi il blocco in un secondo momento.

9

Dal Perl documentation:

Ogni semplice dichiarazione deve terminare con un punto e virgola, a meno che non è la dichiarazione finale in un blocco, in questo caso il punto e virgola è facoltativa.

12

Spesso penso al punto e virgola in Perl come separatori anziché come terminatori, il che rende molto più facile abituarsi a questo comportamento.

Detto questo, non è affatto una cattiva idea usare sempre un punto e virgola perché non devi ricordarti di aggiungerlo in seguito se inserisci più istruzioni alla fine del blocco, un po 'come usare una virgola in più in un elenco in modo da non dimenticare di aggiungerlo successivamente (Perl ignora l'ultima virgola se non c'è nessun elemento dopo di esso).

Problemi correlati