2012-06-28 15 views
5

Tengo un pequeño programa Perl que quiero ejecutar en la línea de comandos. Necesito require otro script de Perl (no un módulo) que alguien más haya escrito. Eso, a su vez, require s algunos otros scripts. (No puedo hacer nada sobre la forma en que esto funciona).En Perl, ¿cómo puedo desactivar CGI :: Carp que se cargó en un script obligatorio?

Ahora bien, es muy molesto que una de estas secuencias de comandos tiene use CGI; y use CGI::Carp qw(fatalsToBrowser) en ella. No quiero eso. Tener 15 líneas de 500 Internal Server Error page en mi consola cada vez que algo se rompe realmente me está poniendo de los nervios. He intentado

require 'otherscript.pl'; 
no CGI; 
no CGI::Carp; 

y

no CGI; 
no CGI::Carp; 
require 'otherscript.pl'; 

descargarlo, como el use doc describe, pero no funciona.

¿Puedo de alguna manera manipular la tabla de símbolos o hacer alguna otra magia para deshacerme de ella?

Respuesta

3

No existe una rutina unimport en el paquete CGI :: Carp, por lo que no no tiene ningún efecto. Deshaga la parte relevante de la rutina import manualmente.

ámbito léxico (ver caveat):

local $main::SIG{__DIE__} = \&CGI::Carp::realdie; 

alcance global:

CGI::Carp::set_die_handler(\&CGI::Carp::realdie); 
+1

Una mejor manera es 'CGI :: Carp :: set_die_handler (\ & CGI :: Carp :: realdie)'. Pero es global. –

3

Al establecer $CGI::Carp::TO_BROWSER variable para 0 puede suprimir la impresión de la versión HTML de los mensajes de la matriz.

+0

También me gusta esta respuesta, pero daxim fue más rápido, así que elegí la suya. Gracias de todos modos. :) – simbabque

2

¿De dónde viene el código que usa fatalsToBrowser? Mientras que fatalsToBrowser es una herramienta de desarrollo realmente útil, solo debe usarse en desarrollo. En un entorno de producción, se puede argumentar que fatalsToBrowser es un riesgo de seguridad ya que potencialmente da demasiada información a alguien que intenta crackear su servidor.

Por lo tanto, use los trucos que otras personas han mencionado para apagarlo. Pero también debe hacer lo que pueda para asegurarse de que el código ofensivo se modifique para que no se use fatalsToBrowser en producción.

+0

Eso es un buen consejo. Gracias. – simbabque

Cuestiones relacionadas