2009-10-02 13 views
7

Todavía soy nuevo en Perl. Como los bloques BEGIN se ejecutan durante la compilación, ¿no se puede propagar un virus o la pérdida de datos se produce simplemente compilando? ¿Perl hace algo para detenerlo? Si es así, ¿significa que el código en los bloques BEGIN puede actuar de manera diferente fuera de él?¿Puede un bloque Perl BEGIN propagar un virus o perder datos?

Respuesta

13

Sí a todas estas preguntas. El Eclipse IDE era vulnerable a esto. Es discussed in more detail here.

Como con todo el software, debe evitar descargar y ejecutar cualquier cosa desde una fuente en la que no confíe. CPAN generalmente es confiable; aunque no estoy al tanto de que alguien haya lanzado intencionalmente código malicioso a CPAN, es posible que haya sucedido.

Usted puede evitar la ejecución de código en los controles de compilación con el $^C flag, por ejemplo .:

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

Excelente punto sobre '$^C'. Aquí hay un enlace a la entrada de Perlvar: http://perldoc.perl.org/perlvar.html#$^C – daotoad

+0

@daotoad su enlace estaba roto, así que edité la respuesta para contener una de trabajo. – Ether

1

Tenga en cuenta que a veces esto es una característica. Los bloques BEGIN dentro de los módulos mod_perl se ejecutan solo una vez, cuando se cargan por primera vez. De modo que tiene una sintaxis simple para inicializar el nivel de página en el mismo script, y colocarlo "cerca" del código que ayuda.

Ocasionalmente, es igualmente útil para escribir código de inicialización complicado que no desea colocar en la parte superior de un script.

Pero sobre todo está allí para la compatibilidad temática con awk.

+1

Está ahí para mucho más que parecer awk. Los bloques BEGIN son muy útiles para secuenciar cosas. –

+0

¿No es eso exactamente lo que dije? Había un poco de texto antes de la oración que decidiste elegir ... –

+1

@Andy - dijiste "sobre todo". En mis muchos años de desarrollo de software Perl, he usado (y he visto usar) bloques BEGIN por varias razones en miríadas de ocasiones, y no UNA VEZ he visto que usó "compatibilidad temática con awk". – DVK

Cuestiones relacionadas