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
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; }
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.
È molto più che sembrare awk. I blocchi BEGIN sono molto utili per il sequenziamento delle cose. –
Non è esattamente quello che ho detto? C'era un bel po 'di testo prima della frase che hai deciso di scegliere. –
@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
cromatico spiega how a Perl program works.
- 1. Come può esistere un virus in un'immagine?
- 2. Qual è il ruolo del blocco BEGIN in Perl?
- 3. Cercando di decodificare un virus
- 4. È meglio avere un blocco sincronizzato all'interno di un blocco try o un blocco try all'interno di un blocco sincronizzato?
- 5. Task Flusso dati, un blocco dati può essere modificato dallo stato di completamento?
- 6. Diffondere promesse goniometro
- 7. Perl: struttura dati, è un hash?
- 8. Cambia tipo di colonna senza perdere dati
- 9. Magento - Passaggio di dati tra un controller e un blocco
- 10. Condivisione di un blocco sincronizzato Java in un cluster o utilizzando un blocco globale?
- 11. Come utilizzare @@ ROWCOUNT nell'istruzione IF e nel blocco BEGIN..END?
- 12. Come può un web crawler Perl seguire un postback ASP.NET?
- 13. Un blocco condiviso su uno std :: shared_timed_mutex può essere aggiornato a un blocco esclusivo?
- 14. Come testare un virus a livello di codice?
- 15. Perché utilizzare un blocco "do {} if" in Perl?
- 16. Come concatenare a un blocco inline in Perl 6?
- 17. API di scansione virus .NET
- 18. Utilizzando chiusure di modificare le classi all'interno di Perl BEGIN blocchi
- 19. In VB.NET si può fare un blocco di codice arbitario?
- 20. Differenza tra vector :: begin() e std :: begin()
- 21. Perdere tipo di eccezione quando rethrowing un'eccezione da un blocco catch
- 22. Cosa significa "provare" di Scala senza un blocco o un blocco finale?
- 23. Bloccare un telefono Android (sequenza di blocco o simile)
- 24. Monadi multipli in un blocco di blocco
- 25. Rubino: blocco di rendimento da un blocco?
- 26. Begin Rescue not catching error
- 27. Un ramo GIT può avere un sottoinsieme di dati?
- 28. Sopprime "BEGIN failed - compilation aborted at"
- 29. astronautico-benchmark.php" copione virus
- 30. Come può un modulo perl trovare il proprio percorso?
Punto eccellente su '$^C'. Ecco un link alla voce perlvar per questo: http://perldoc.perl.org/perlvar.html#$=C – daotoad
@daotoad il tuo link è stato interrotto, quindi ho modificato la risposta per contenere quella funzionante. – Ether