2012-06-28 18 views
5

Ho un piccolo programma Perl che voglio eseguire sulla riga di comando. Ho bisogno di require un altro script Perl (non un modulo) scritto da qualcun altro. Questo, a sua volta, è lo require s altri script. (Non posso fare nulla per come funziona).In Perl, come posso disabilitare CGI :: Carp che è stato caricato in uno script richiesto?

Ora, è davvero fastidioso che uno di questi script ha use CGI; e use CGI::Carp qw(fatalsToBrowser) in esso. Non voglio quello. Avere 15 linee di 500 Internal Server Error page sulla mia console ogni volta che qualcosa si rompe mi sta davvero facendo innervosire. Ho provato

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

e

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

scaricarlo, come il use doc descrive, ma non funziona.

Posso in qualche modo manipolare il tavolo dei simboli o fare qualche altra magia per sbarazzarmene?

risposta

3

Non esiste una routine unimport nel pacchetto CGI :: Carp, quindi no non ha alcun effetto. Annullare manualmente la parte pertinente della routine import.

scope lessicale (vedi caveat):

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

portata globale:

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

Un modo migliore è 'CGI :: Carp :: set_die_handler (\ & CGI :: Carp :: realdie)'. Ma è globale. –

3

Impostando $CGI::Carp::TO_BROWSER variabile 0 è possibile sopprimere la stampa della versione HTML di messaggi die.

+0

Mi piace anche questa risposta, ma daxim era più veloce, quindi ho scelto il suo. Grazie lo stesso. :) – simbabque

2

Da dove viene il codice che utilizza fatalsToBrowser? Mentre fatalsToBrowser è uno strumento di sviluppo davvero utile, dovrebbe essere utilizzato solo in fase di sviluppo. In un ambiente di produzione si può affermare che lo fatalsToBrowser è un rischio per la sicurezza in quanto potenzialmente fornisce troppe informazioni a qualcuno che tenta di crackare il server.

Quindi, con tutti i mezzi usare i trucchi che altre persone hanno menzionato per spegnerlo. Ma dovresti anche fare tutto il possibile per assicurarti che il codice incriminato sia cambiato in modo che non usi fatalsToBrowser in produzione.

+0

Questo è un consiglio molto valido. Grazie. – simbabque

Problemi correlati