我已将script1转换为script2,以便使用数据库插入语句。然而,我的script2在一段时间后停止了,就像我在将脚本放入循环后耗尽内存一样。如果我只运行script1,那么循环将永远运行。我错过了什么?
脚本1
logupdate("${cid}_$mon$day${year}_${time}_${status}.csv",
"$uid|$ext||$cid|$did|$statusn");
# log to file
sub logupdate
{
my $log = shift;
unless (open(LOG, ">>$path$log"))
{
print STDERR "Can't write to $path$log: $!n";
}
print LOG @_;
close LOG;
}
脚本2
{
my $filedata = "${cid}";
my $filename = "$status";
logupdate("${cid}", "$status");
}
# log to file
sub logupdate
{
my $filedata = shift;
my $filename = shift;
if ( not $dbh ) {
$dbh = DBI->connect( $url, $user, $dbpass );
sleep 6;
print "reconnecting to db.... Success!n";
}
if ( not $filedata eq '') {
$sth = $dbh->prepare('INSERT INTO cliinfo (calltype, callno)
VALUES(?, ?)');
$sth->execute($filename, $filedata);
print "Inserting into db $filename:tt$filedatan";
}
}
如果不使用$dbh作为全局变量,则使用"my"初始化$dbh;
my $dbh;
断开功能内的数据库连接;
$dbh->disconnect();
更安全的是,在函数末尾,将undef赋值给$dbh变量;
$dbh = undef;