我已将 script1 转换为 script2 以使用db insert语句。但是我的脚本2在一段时间后停止,就像我将脚本放入循环后耗尽内存一样。如果我只运行script1,那么循环运行永远。我错过了什么?
logupdate("${cid}_$mon$day${year}_${time}_${status}.csv",
"$uid|$ext||$cid|$did|$status\n");
# 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;
}
{
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:\t\t$filedata\n";
}
}
答案 0 :(得分:0)
如果你没有使用$ dbh作为全局变量,那么用'my';
初始化$ dbhmy $dbh;
断开功能中的DB连接;
$dbh->disconnect();
为了更安全,在函数结束时将undef分配给$ dbh变量;
$dbh = undef;