Hello,

I was not able to find anything similar in list archives,

Trying to :

        use base Ima::DBI

in mod_perl (also in a <Perl></Perl> block of config)
a cought this trace:

 Uncaught exception from user code:
        Can't locate DBI/db.pm in @INC (@INC contains: [...]


This happens because Ima::DBI 'uses' base DBI::db at line 645 of his
source code and DBI::db is not a package available from @INC but
directly from the DBI namespace.


In these cases base.pm (line 42) steps into an unless{} block
to by-pass 'Can't locate ...' exceptions rised from inside base.pm
itself:

        eval "require $base";
        # Only ignore "Can't locate" errors from our eval require.
        # Other fatal errors (syntax etc) must be reported.
------> die if $@ && $@ !~ /^Can't locate .*? at \(eval /; #'# <------


Working outside mod_perl (i.e. in a command line perl program) no
problem jumps out because the above arrowed 'die' correctly matches
its regexp (the exception message starts at the beginning of the line).

>From inside mod_perl we have an unmatch so base croaks with the complete
backtrace and httpd doesn't start (if I pre-use the module) or send
500 - Server Error (in a runtime require).

With the follow substitution it works, but I'm sure there is a better
and more correct way to behave with.

    In base.pm :
    
    42: <<< die if $@ && $@ !~ /^Can't locate .*? at \(eval /; #'#
    42: >>> die if $@ && $@ !~ /Can't locate .*? at \(eval /; #'#


Any suggests?


Thanks a lot,
Stefano di Sandro

Reply via email to