帮我看下这段代码为啥总是报这样的错误
时间:2010-08-31
来源:互联网
本帖最后由 heqidz 于 2010-08-31 12:34 编辑
分析apache 日志的
复制代码
报错信息
复制代码
老提示这一行有未初始化的值?
复制代码
各位大大们,看一下,谢谢
分析apache 日志的
- #!/bin/env perl
-
- use strict;
- use warnings;
- use DBI;
- use POSIX qw#strftime#;
-
- my %serial;
-
- my %month = ('Jan'=>'01','Feb'=>'02','May'=>'03',
- 'Apr'=>'04','May'=>'05','Jun'=>'06',
- 'Jul'=>'07','Aug'=>'08','Sep'=>'09',
- 'Oct'=>'10','Nov'=>'11','Dec'=>'12'
- );
-
- my $logdir = "/log/apache_log/201008apachelog";
- my $date = strftime "%m%d",localtime(time-86400);
-
- opendir LOG,"$logdir" or die "$!\n";
-
- while (my $file = readdir LOG) {
- next unless $file =~ m{\d+_\d{2}$date.};
- print $file . "\n";
-
- open FILE,"$logdir/$file" or die "$!\n";
-
- while (my $str = <FILE>) {
- chomp $str;
- next if $str =~ m{^(127|::)};
- next unless $str =~ m{onfig}i;
- my (@record) = $str =~ m{^(\S+).*(\d{2}/\w+/\d{4}):\d+.*&id=(\d+)};
- my ($serial) = $str =~ m{serial=(\w+)};
- next if (!$serial);
- my ($svn) = $str =~ m{svn=(\w+)};
- $svn = "" if (!$svn);
- next if !$record[2] or $record[2] =~ m{^0};
- my @tmpdate = split /\//,$record[1];
- my $date = "$tmpdate[2]-$month{$tmpdate[1]}-$tmpdate[0]";
- my $key = "$record[2]\t$serial\t$date";
- $serial{$key} = "$record[0]\t$svn";
- }
- close FILE;
- }
- closedir LOG;
-
- my @array = ();
- my $sqlstr = "";
-
- for (sort keys %serial) {
- my @tmpA = split /\t/,$_;
- my @tmpB = split /\t/,$serial{$_};
- my $values = "('$tmpA[0]','$tmpA[1]','$tmpA[2]','$tmpA[2]','$tmpB[1]','$tmpB[0]')";
- push @array,$values;
-
- if ($#array >= 10000) {
- my @tmparray = splice @array,0,10000;
- $sqlstr = join ",",@tmparray;
- &addtomysql($sqlstr);
- }
- }
-
- $sqlstr = join ",",@array;
- &addtomysql($sqlstr);
-
- sub addtomysql {
- my $sql = shift;
- my $dsn = "DBI:mysql:database=test;host=localhost;port=3306";
- my $dbh = DBI->connect($dsn,'root','2010',{RaiseError=>1}) || die "$!\n";
- my $insert_data = qq#INSERT INTO history VALUES $sql
- ON DUPLICATE KEY UPDATE first_visit_date=least(first_visit_date,values(first_visit_date))
- ,last_visit=greatest(last_visit,values(last_visit)),ip=values(ip)
- #;
-
- my $sth=$dbh->prepare($insert_data) or die "$insert_data:$dbh->errstr\n";
- $sth->execute();
- $sth->finish();
- $dbh->disconnect();
- }
- Use of uninitialized value in concatenation (.) or string at ./test.pl line 52.
- my $values = "('$tmpA[0]','$tmpA[1]','$tmpA[2]','$tmpA[2]','$tmpB[1]','$tmpB[0]')";
作者: heqidz 发布时间: 2010-08-31
回复 heqidz
就是说有个变量为空的意思嘛
就是说有个变量为空的意思嘛
作者: guap514 发布时间: 2010-08-31
本帖最后由 heqidz 于 2010-08-31 12:31 编辑
回复 guap514
呵,好象是$svn的值为空,我试试啊
回复 guap514
呵,好象是$svn的值为空,我试试啊
作者: heqidz 发布时间: 2010-08-31
本帖最后由 heqidz 于 2010-08-31 12:40 编辑
回复 guap514
真是的,英文不好,没理解好,把$svn= 0,就好了,呵呵,谢了
回复 guap514
真是的,英文不好,没理解好,把$svn= 0,就好了,呵呵,谢了
作者: heqidz 发布时间: 2010-08-31
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28