2009-10-02 9 views
7

Sono ancora nuovo in Perl. Poiché i blocchi BEGIN vengono eseguiti durante la compilazione, non è possibile che si diffonda un virus o che si verifichi una perdita di dati dalla semplice compilazione? Perl fa qualcosa per fermarlo? In tal caso, significa che il codice nei blocchi BEGIN può agire diversamente al di fuori di esso?Un blocco BEGIN di Perl può diffondere un virus o perdere dati?

risposta

13

Sì a tutte queste domande. L'IDE di Eclipse era vulnerabile a questo. È discussed in more detail here.

Come per tutti i software, è necessario evitare di scaricare ed eseguire qualsiasi cosa da una fonte di cui non ci si fida. CPAN è generalmente affidabile; anche se non sono a conoscenza di qualcuno che rilascia intenzionalmente codice canaglia a CPAN, è possibile che sia successo.

È possibile evitare l'esecuzione di codice durante i controlli di compilazione con il $^C flag, ad es .:

BEGIN { load_data_from_db() unless $^C; } 
+2

Punto eccellente su '$^C'. Ecco un link alla voce perlvar per questo: http://perldoc.perl.org/perlvar.html#$=C – daotoad

+0

@daotoad il tuo link è stato interrotto, quindi ho modificato la risposta per contenere quella funzionante. – Ether

1

Nota che a volte questa è una caratteristica. I blocchi BEGIN all'interno dei moduli mod_perl vengono eseguiti una sola volta, quando vengono caricati per la prima volta. Quindi hai una sintassi semplice per eseguire l'inizializzazione a livello di pagina nello stesso script e posizionarlo "vicino" al codice che assiste.

Occasionalmente è altrettanto utile per scrivere codice di inizializzazione complicato che non si vuole mettere in cima a uno script.

Ma per lo più è solo lì per compatibilità tematica con awk.

+1

È molto più che sembrare awk. I blocchi BEGIN sono molto utili per il sequenziamento delle cose. –

+0

Non è esattamente quello che ho detto? C'era un bel po 'di testo prima della frase che hai deciso di scegliere. –

+1

@Andy - hai detto "per lo più". Nei miei molti anni di sviluppo del software Perl, ho usato (e visto usato) i blocchi BEGIN per una serie di motivi su miriadi di occasioni, e non UNA VOLTA ho visto che usava "compatibilità tematica con awk". – DVK

Problemi correlati