我一直在使用DBI模块连接数据库时遇到了一些问题。我有一个属性文件,其中指定了是否要通过简单的database=oracle
或database=postgres
连接我的Oracle或Postgres数据库。我的属性文件是使用Config::Tiny模块设置的,我的变量设置如下:
my $database = $config->{myDB}->{database};
...
我不理解的是,尽管这对我所有的变量都起作用,但如果我尝试像这样连接到属性文件中指定的任何数据库...
if($database eq "oracle"){
my $dbh = DBI->connect("dbi:Oracle:host=abc123-server;sid=XE;port=1521","User","Pass");
}
elsif($database eq "postgres"){
my $dbh = DBI->connect("dbi:Pg:dbname=pepperoni;host=789xyz-server;port=5444;","Foo","Bar");
}else{
print "Could not connect to a database";
}
当我运行程序时,出现了以下错误:
Global symbol "$dbh" requires explicit package name at supportvuloop.pl line 70.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 80.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 81.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 82.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 88.
如果它们不是if条件的一部分,我可以很好地连接到任何一个数据库,为什么现在会导致错误?