Oops, I hadn't noticed you had use DBI; inside the if.
use ...; occurs at *compile* time and unconditionally. In other words, your code is identical to
#!/usr/bin/perl use strict; use DBI; my $use_dbi = 1; eval("use DBI;"); $use_dbi = 0 if (not($@)); print `uname -n`; print `prtconf |grep Mem` if (`uname` eq 'SunOS'); print `cat /proc/meminfo` if (`uname` eq 'Linux'); if ($use_dbi) { print "Hurray!!\n"; } else { print "NO DBI\n"; }
It's quite easy to fix: Remove the use DBI; since it's already done in the eval EXPR. As you can see in my earlier fixed code, I removed that line (apparently without realising it!).
Here's the fix with a couple of small cleanups:
#!/usr/bin/perl use strict; use warnings; # Always good to have. print `uname -n`; my $uname = `uname`; # Only run "uname" once. print `prtconf |grep Mem` if ($uname eq 'SunOS'); print `cat /proc/meminfo` if ($uname eq 'Linux'); my $use_dbi = eval("use DBI; 1"); # More concise than checking $@. if ($use_dbi) { print "Hurray!!\n"; } else { print "NO DBI\n"; }
In reply to Re^5: DBI detector?
by ikegami
in thread DBI detector?
by jcpunk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |