perl扰人的问题

perl扰人的问题

Perl code
while(1)
{
   monitor();
   sleep(100);
}
###以上代码是为了达到定时执行采集的目的
sub monitor
{
$dbh = DBI->connect("dbi:mysql:host=$dbHost;database=$dbName", $dbUser, $dbPass,
        {'mysql_auto_reconnect' => 1, RaiseError => 1, AutoCommit => 1});
    while($retry > 0 and not defined $dbh)
    {
        sleep 10;
        $dbh = DBI->connect("dbi:mysql:host=$dbHost;database=$dbName", $dbUser, $dbPass,
            {'mysql_auto_reconnect' => 1, RaiseError => 1, AutoCommit => 1});
    }
###以上链接数据库

my $dbGetDevice = $dbh->prepare("select dev.dev_id as dev_id, dev.dev_ipaddress as dev_ip from deviceinfo where dev.dev_area='1'") or die "Error: prepare dbGetDevice: ", $dbh->errstr;
    $dbGetDevice->execute or die "Error: execute dbGetDevice: ", $dbh->errstr;
while(my $data = $dbGetDevice->fetch)
    {
        if ($$data[1] =~ /(\d+(\.\d+){3})/)
        {
            my ($dev_id, $dev_ip) = @$data;

                        $ip2id{$dev_ip} = $dev_id;
                        ###%ip2id作为全局变量已定义
        }
    }

###以上获得查询数据

my @ips =  sort keys %ip2id;

print @ips;

###以上测试输出

}




现在假设数据库中符合条件的查询结果为5条,输出了5个ip地址,没问题。
我现在在程序执行的过程中改变查询条件,使得有原来的5条结果中,少了1条,并另外又增加了1条,
在sleep后输出的ip为6个,包含少了的那个。若此时重新执行该perl程序,则会输出正确的5条。
问题的关键就在于少了的仍然会输出,请问是什么原因?
因为它是全局变量


QUOTE:
原帖由 cobrawgl 于 2008-6-4 18:21 发表
因为它是全局变量

一剑飙血啊


QUOTE:
原帖由 churchmice 于 2008-6-4 19:05 发表

一剑飙血啊

高手本色啊


QUOTE:
原帖由 cobrawgl 于 2008-6-4 18:21 发表
因为它是全局变量

茅塞顿开!


QUOTE:
原帖由 churchmice 于 2008-6-4 19:05 发表

一剑飙血啊

柳暗花明阿!