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
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; }
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.
Está ahí para mucho más que parecer awk. Los bloques BEGIN son muy útiles para secuenciar cosas. –
¿No es eso exactamente lo que dije? Había un poco de texto antes de la oración que decidiste elegir ... –
@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
chromatic explica how a Perl program works.
- 1. ¿Cuál es el rol del bloque BEGIN en Perl?
- 2. ¿Cómo se determina el valor de un bloque begin?
- 3. Declaración de la variable en el bloque BEGIN
- 4. ¿Por qué este bloque Perl BEGIN actúa de forma diferente en el depurador?
- 5. ¿Puede ejecutarse un bloque Obj-C?
- 6. ¿Cómo se puede sincronizar fácilmente un bloque de código C#?
- 7. ¿Por qué no puedo usar "create schema" en un bloque begin/end en SQL Management Studio?
- 8. BEGIN - END transacciones atómicas de bloque en PL/SQL
- 9. ¿Puede una tubería en Linux perder datos alguna vez?
- 10. ¿Qué inspiró la sintaxis del bloque de comentarios de Ruby = begin .. = end?
- 11. Por qué no puedo crear una vista interior de un bloque END BEGIN ...
- 12. ¿Por qué una sentencia de 'uso' se ejecuta primero en un bloque BEGIN?
- 13. ¿Se puede modificar un script Perl?
- 14. ¿Por qué usar un bloque "do {} if" en Perl?
- 15. Valgrind: ¿se puede perder posiblemente ser tratado como definitivamente perdido?
- 16. ruby: ¿puede un bloque afectar variables locales en un método?
- 17. ¿Cómo uso un bloque como una cláusula 'o' en lugar de un simple dado?
- 18. Magento - Transmisión de datos entre un controlador y un bloque
- 19. Cómo liberar un bloque
- 20. Perder tipo de excepción cuando Regeneración de una excepción de un bloque catch
- 21. Begin Rescue no detecta error
- 22. Propagar constness a los datos apuntados por las variables miembro
- 23. ¿Cómo puedo actualizar Perl en Windows sin perder módulos?
- 24. Suprimir "BEGIN failed - compilation aborted at"
- 25. ¿Hay un patrón para propagar detalles de errores y advertencias?
- 26. Tener un bloque/comando de Ruby falla silenciosamente sin un bloque de 'rescate' en blanco
- 27. ¿Cómo propagar estilos a hipervínculos dentro de un DataTemplate?
- 28. Utilice un bloque 'try-finally' sin un bloque 'catch'
- 29. std :: inserter con set - insertar para begin() o end()?
- 30. ¿Empieza? . . fin, mientras denotan un 'bloque'?
Excelente punto sobre '$^C'. Aquí hay un enlace a la entrada de Perlvar: http://perldoc.perl.org/perlvar.html#$^C – daotoad
@daotoad su enlace estaba roto, así que edité la respuesta para contener una de trabajo. – Ether