Wally Hartshorn has asked for the wisdom of the Perl Monks concerning the following question:
Okay, this is bizarre. In one particular program (which uses Class::DBI), when I "use diagnostics", the program fails to compile, complaining that it cannot find "DBI/db.pm". If I "use warnings" instead, the program compiles fine and runs perfectly.
Consider the following code (stripped of all useful statements), which you can use on your system to determine whether you get the same behavior:
#!/usr/bin/perl use strict; use diagnostics; # use warnings works use lib "."; use MyTable;
package MyTable; use base 'MyDatabase'; 1;
package MyDatabase; use base 'Class::DBI'; 1;
When I try to run "mydemo.pl" with "use diagnostics", I get a boatload of errors about being unable to load "DBI/db.pm". Here's a few lines from the start:
Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Uncaught exception from user code: Can't locate DBI/db.pm in @INC (@INC contains: . /usr/local/li +b/perl5/5.6.1/sun4- solaris /usr/local/lib/perl5/5.6.1 /usr/local/lib/perl5/site _perl/5.6.1/sun4- solaris /usr/local/lib/perl5/site_perl/5.6.1 /usr/local/lib/ perl5/site_perl/5.6.0/sun4- solaris /usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/ perl5/site_perl/5.005/sun4- solaris /usr/local/lib/perl5/site_perl/5.005 /usr/local/lib/ perl5/site_perl) at (eval 6) line 3. eval 'require DBI::db ;' called at /usr/local/lib/perl5/5.6.1/base.pm line 59 base::import('base', 'DBI::db') called at /usr/local/lib/perl5/site_perl/5.6.1/Ima/DBI.pm line 645 Ima::DBI::db::BEGIN() called at DBI/db.pm line 0 eval {...} called at DBI/db.pm line 0 require Ima/DBI.pm called at (eval 5) line 3 eval 'require Ima::DBI ;' called at /usr/local/lib/perl5/5.6.1/base.pm line 59 base::import('base', 'Class::Accessor', 'Class::Data::Inherita +ble', 'Ima ::DBI') called at /usr/local/lib/perl5/site_perl/5.6.1/Class/DBI.pm line 6 Class::DBI::__::Base::BEGIN() called at DBI/db.pm line 0 eval {...} called at DBI/db.pm line 0 require Class/DBI.pm called at (eval 3) line 3 eval 'require Class::DBI ;' called at /usr/local/lib/perl5/5.6.1/base.pm line 59
It goes on and on like that. Just change "diagnostics" to "warnings" and the problems go away (not to mention that, with the actual code in place, the program works).
What kind of weirdness have I stumbled across? Has anyone else seen something like this? (I spent about 5 hours trying to figure out why one program was working while a similar program -- use had the "use diagnostics" line -- was not!) This is Perl 5.6.1 under Sun Solaris 7.
Wally Hartshorn
(Plug: Visit JavaJunkies, PerlMonks for Java)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Why Does My Class::DBI Program Break Under "use diagnostics" Pragma?
by pfaut (Priest) on Jul 12, 2003 at 12:12 UTC | |
|
(jeffa) Re: Why Does My Class::DBI Program Break Under "use diagnostics" Pragma?
by jeffa (Bishop) on Jul 12, 2003 at 15:48 UTC | |
by pfaut (Priest) on Jul 12, 2003 at 18:59 UTC | |
by Wally Hartshorn (Hermit) on Jul 14, 2003 at 20:24 UTC |