Perl 程序中的 PM 模块错误 :: 无法在未定义的值上调用方法 "prepare"



我必须确定如何消除这个错误。

$ perl use_pkg.pl

Can't call method "prepare" on an undefined value at use_pkg.pl line...

我有两个文件。

第一个是perl包PKG.pm

package PKG;
require 5.000;
require Exporter;
@ISA = qw(Exporter);

@EXPORT = qw(SoxDBLogin);  
use DBI;
sub SoxDBLogin
{
# these values are provided using Unix env variables
$user     = $user|| $ENV{"DBUSER"}; 
$pswd     = $pswd||$ENV{"DBPSWD"}; 
$srvr     = $srvr||$ENV{"DBSRVR"}; 
$dbName   = $dbName|| $ENV{"DBNAME"};
printf STDOUT ("Program %s: DBUSER <%s>,  DBSRVR <%s>, DBNAME <%s>n",$0,$user,$srvr,$dbName);
$DSN = "driver={ODBC Driver 17 for SQL Server};server=$srvr;data base=$dbName;uid=$user;pwd=$pswd";
$dbh = DBI->connect("DBI:ODBC:$DSN") or die "Couldn't open database : $DBI::errstrn";
}

另一个文件有一个perl程序use_pkg.pl

#!/usr/bin/perl
use PKG;
use DBI;
&main;
sub main
{
&initialize;
&delFeedForDay;
}

sub initialize
{
# these values are provided using Unix env variables
$user = $ENV{"DBUSER"};
$pswd = $ENV{"DBPSWD"};
$srvr = $ENV{"DBSRVR"};
$dbName = $ENV{"DBNAME"};
&SoxDBLogin($user,$pswd,$srvr,$dbName);
}
sub delFeedForDay
{

my $sql = "SELECT count(*) FROM [myDb].[dbo].[adp_users]" ;
# I receive the error "Can't call method "prepare" on an undefined value at" on next line     
my $sth = $dbh->prepare($sql) or die "Can't prepare statement: $DBI::errstr";
my $exStat = $sth->execute() or die "ERROR while query execution...exiting $DBI::errstrn";

my $data = $sth->fetchrow();
printf STDOUT ("Data : $data n");

$sth->finish();
}

使用returnsub SoxDBLogin获取DB句柄

return $dbh ;

然后将其赋值给sub initialize

中的一个变量
$dbh = &SoxDBLogin($user,$pswd,$srvr,$dbName); 

效果很好。